Category Archives: Admin

Bash et fonctionnalités réseaux

Ce week-end j’ai mis à jour netsoul-purple. Création de packages debian, corrections…

Et ce matin en me levant je me suis demandé : Mais combien de personnes utilisent netsoul-purple ? Est-il utilisé ?

J’ai donc décidé de faire un petit script en bash pour compter les utilisateurs.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

exec 9<>/dev/tcp/ns-server.epita.fr/4242
echo -e "list_users" >&9
numbers=0
while read line <&9
do
  ns=`echo $line | grep netsoul%2dpurple >&1`
  quit=`echo $line | grep "rep 002 -- cmd end" >&1`
  if [[ ! -z $ns ]]
  then
    echo $ns
    numbers=$(($numbers+1))
  fi
  if [[ ! -z $quit ]]
  then
    break
  fi;
done
exec 9<&-
exec 9>&-

echo "Result: $numbers"

Voilà un parfait exemple de comment initialiser une connexion TCP et la lire avec bash. Par la suite il serait intéressant de faire des graphs RRD avec le résultat.

La virtualisation avec KVM sous debian

On a toujours besoin de tester ses configurations sur une machine qui n’est pas en prod, il y a encore peu, je testais tout sur du matériel de récupération que j’accumulais chez moi. Mais il arrive un moment dans la vie où il faut se débarasser de tout ce vieux matériel (une petite amie, un déménagement, ou je ne sais quoi :) ). Bref, des machines ça prend de la place, et j’essaie désormais d’en avoir le moins possible.

Pour notre plus grand bonheur, Intel et AMD ont implémenté dans les derniers processeurs des technologies de virtualisation ! On voit alors fleurir sur le net, de multiples applications opensource (ou pas) utilisant ces technologies, comme par exemple, KVM, Xen.

J’ai choisi d’utiliser KVM et non Xen, en effet, ce dernier n’est pas compatible avec les dernières versions du kernel linux, ce qui est un peu génant pour moi, en effet, ma carte mère n’est pas pleinement supportée avec un 2.6.18.

On commence d’abord par installer kvm et son module kernel, sous debian, pour les autres je vous laisse chercher :

1
2
3
4
 # apt-get install kvm
 # module-assistant
 # modprobe kvm
 # modprobe kvm-intel ( ou kvm-amd )

N’oubliez pas de vérifier que votre processeur est compatible avec la virtualisation, et que cette option est activée dans le BIOS :) Il devient alors assez simple de créer une machine virtuelle. On créer tout d’abord le fichier qui va la contenir :

1
 $ kvm-img create file.qcow2 -f qcow2 5G

Ceci créera une image de 5 gigas. Vous souhaitez alors installer une debian (par exemple) sur ce disque virtuel, il suffira de donner en paramètre l’image iso du CD de cette façon :

1
2
$ kvm -m 512 -cdrom debian-40r3-i386-businesscard.iso \
-boot d -hda file.qcow2

Vous procédez alors à une installation classique d’une debian :)

Tout ça est bien joli, ou presque, mais vous ne pouvez pas accéder à votre machine virtuelle depuis le réseau, et inversement, ce qui n’est pas réellement pratique si vous souhaitez vous servir de votre machine virtuelle comme serveur.

En supposant qu’il y ait un serveur dhcp sur le réseau, nous allons configurer votre machine en tant que bridge, pour qu’elle puisse faire circuler le réseau vers les VMs.

1
# apt-get install bridge-utils uml-utilities

Il vous faut alors modifier votre configuration réseau dans /etc/network/interfaces:

1
2
auto lo eth0
iface lo inet loopback

commentez cette ligne:

1
2
3
4
5
6
7
8
9
10
11
12
#iface eth0 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 5
</code
ATTENTION: vos VMs vont communiquer sur le réseau physique avec une adresse MAC virtuelle ! Celà peut ne pas fonctionner si vos switchs restreignent les adresses MAC.

On relance ensuite le réseau de cette façon :
<code>
/etc/init.d/networking restart

Si plus rien ne marche, c’est que vous devez adapter le fichier interfaces en fonction de votre réseau :)

Nous allons ensuite configurer le script de démarrage de kvm, de façon à ce qu’il associe le tunnel que nous allons créer en le lançant, avec le bridge, pour celà il faut juste modifier le fichier /etc/kvm/kvm-ifup:

1
2
3
4
5
6
7
    #!/bin/sh
   
    switch=$(ip route ls | awk '/^default / { for(i=0;i&lt;NF;i++) { if ($(i) == "dev") print $(i+1) }}')
   
    sudo /sbin/ifconfig $1 0.0.0.0 up
    sudo /usr/sbin/brctl addif ${switch} $1
    exit 0

vous pouvez ensuite lancer votre VM de cette façon :

1
2
    kvm -m 512  -net nic,vlan=0 \
    -net tap,vlan=0,ifname=`sudo tunctl -b -u $USER` file.qcow2

Lorsque vous l’aurez quitté, je vous conseille de supprimer les interfaces tap que tuncl a créé, à coup de :

1
    $ sudo tunectl -d tap0

Installation d’OpenWRT sur un ASUS WL-500GP

J’ai acquis récemment un routeur wifi ASUS WL-500GP, tout geek que je suis, je me suis empressé de le passer sous OpenWRT. Voici donc la procédure que j’ai suivi ! Inspiré notamment de la documentation officielle d’OpenWRT.

Installation par TFTP

  • Téléchargez le firmware pour Broadcom BCM947XX, pour ma part j’ai choisi un firmware xwrt afin de ne pas avoir à installer l’interface de gestion web
  • Configurez votre carte réseau en 192.168.1.2 netmask 255.255.255.0 et branchez le sur une des prises LAN
  • Retirez le cordon d’alimentation
  • Restez appuyé sur le bouton noir “Restore”
  • Remettre le cordon d’alimentation
  • Attendre que la LED POWER clignote pour pouvoir arrêter d’appuyez , vous êtes alors en “diag mode”
  • On upload alors le firmware par TFTP
    1
    2
    3
    4
    5
    6
    7
    #tftp 192.168.1.1
    binary
    rexmt 1
    timeout 60
    trace
    Packet tracing on.
    tftp&gt; put openwrt-xxx-x.x-xxx.bin
  • Lorsque le transfert est terminé on attend 6 minutes (je ne sais pas vraiment à quoi ça sert mais il parait que si on attends pas assez on casse le routeur)
  • On peut alors débrancher/rebrancher le routeur pour le rebooter (celui ci ne reboot pas automatiquement après changement de firmware)
  • On accède alors au routeur par telnet, ssh, ou par l’interface web selon le firmware.
  • On active ensuite les 32MB de RAM sous telnet ou ssh (uniquement sur les versions PREMIUM, sinon celà casse votre routeur)
    1
    2
    3
    4
    nvram set sdram_init=0x0009
    nvram set sdram_ncdl=0x208
    nvram commit
    reboot

La machine

1
2
3
4
5
6
7
8
9
10
11
12
root@OpenWrt:~$ cat /proc/cpuinfo
system type             : Broadcom BCM947XX
processor               : 0
cpu model               : BCM3302 V0.6
BogoMIPS                : 263.78
wait instruction        : no
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : no
hardware watchpoint     : no
VCED exceptions         : not available
VCEI exceptions         : not available
1
2
3
root@OpenWrt:~$ cat /proc/meminfo
total:    used:    free:  shared: buffers:  cached:
Mem:  31248384 13135872 18112512        0  1323008  5079040

How-To Debian Sarge: Postfix + SASL + MySQL + PostfixAdmin + Courier + VirtualDomain

Le problème est le suivant, nous souhaitons héberger de nombreux domaines sur une machine que nous nommerons ici serveur.domaine.com, cette machine doit servir de serveur SMTP pour ces domaines, ainsi que de serveur IMAP, le tout administré à l’aide de PostfixAdmin. Cependant postfix doit être un minimum sécurisé : mots de passe md5 dans la bdd et chroot.

Mise en place de MySQL

Nous allons d’abord installer les bases MySQL qui nous permettrons de stocker les comptes utilisateurs et les domaines ! Pour celà il suffit de suivre l’installation de postfixadmin, téléchargeons donc les sources de postfixadmin.

1
2
3
4
cd /var/www/
tar -zxvf postfixadmin-2.1.0.tgz
cd postfixadmin-2.1.0
mysql -u root -p &lt; DATABASE_MYSQL.TXT

Voilà à présent vous avez installé la base de donnée MySQL postfix, à savoir que l’utilisateur postfix aura comme mot de passe postfix, n’oubliez pas de le changer par la suite ! Vous pouvez également installer cette base sur un serveur MySQL distant ! Cependant pour des questions de sécurité, il sera judicieux d’utiliser un socket unix en local.

Installation de postfixadmin

On édite alors le fichier de configuration de postfixadmin :

1
mv config.inc.php.sample config.inc.php

editor config.inc.phpOn modifie alors les variables pour le serveur local. Sans oublier :

1
2
3
$CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';

Se référer ensuite au fichier INSTALL.TXT !

On modifiera aussi le fichier /var/www/postfixadmin/admin/.htaccess

1
2
3
4
AuthUserFile /var/www/postfixadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic

require valid-userPuis on redéfinit le mot de passe à l’aide de la commande

1
# htpasswd -b /var/www/postfixadmin/admin/.htpasswd admin motdepasse

Vérifiez que le fichier .htaccess est interprété ! Si ce n’est pas le cas, vérifiez la variable AllowOverride dans votre configuration apache !

Installation et configuration de postfix

On install postfix et son extension postfix-mysql à l’aide d’un

1
#apt-get install postfix postfix-mysql

On indiquera lors de la configuration automatique, une configuration “Site Internet”.

On crée d’abord le dossier où seront stocké les maildirs :

1
2
3
# mkdir /var/mail/virtual
# chown -R 1001:1001 /var/mail/virtual
# chmod -R 771 /var/mail/virtual

On modifie ensuite la configuration de postfix en ajoutant ceci au /etc/postfix/main.cf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:1001
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001
virtual_transport = virtual
virtual_uid_maps = static:1001
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

On crée ensuite le dossier dans lequel sera stocké les maps :

1
2
# mkdir /etc/postfix/mysql/
# cd /etc/postfix/mysql/

et on crée ensuite les fichiers :

1
mysql_virtual_alias_maps.cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address

mysql_virtual_domains_maps.cf

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'

mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

mysql_virtual_mailbox_limit_maps.cf
1
2
3
4
5
6
7
8
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'

Les valeurs de l’hosts ont été mises à 127.0.0.1 et non pas à localhost pour contrer un problème dû au chroot !

Par ailleurs, il faut modifier les droits d’accés de l’utilisateur postfix pour ne pas avoir d’erreur !

1
2
mysql -u root -p
GRANT SELECT , INSERT , UPDATE , DELETE ON `postfix` . * TO 'postfix'@'%';
1
2
# chmod -R 755 mysql/
# chown -R root:root mysql/
1
 
1
# /etc/init.d/postfix restart

On devrait à partir de là obtenir un postfix qui fonctionne !

Pour tester : On crée un utilisateur avec postfixadmin, puis on crée une boite mail. Si tout se passe bien, la boite est crée dans /var/mail/virtual … sinon on observe les logs dans /var/log/mail.log

A partir de là nous avons un postfix configuré pour recevoir les mails fonctionnel

Installation de Courier-IMAP Courier-POP !

1
apt-get install courier-authmysql courier-imap courier-pop courier-authdaemon

Nous allons maintenant configurer courier pour l’authentification avec la base MySQL de postfix !

On modifie pour celà le fichier /etc/courier/authdaemonrc

1
authmodulelist="authmysql"

Puis on édite la configuration de l’identification MySQL :

1
2
3
4
vim /etc/courier/authmysqlrc
MYSQL_SERVER            127.0.0.1
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          postfix
1
2
3
4
5
6
7
8
9
MYSQL_OPT               0

MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password

MYSQL_UID_FIELD         '1001'
MYSQL_GID_FIELD         '1001'
MYSQL_LOGIN_FIELD       username
1
2
3
MYSQL_HOME_FIELD        '/var/mail/virtual/'
MYSQL_NAME_FIEL         name
MYSQL_MAILDIR_FIELD     maildir

Attention: N’utilisez que des tabulations, les espaces provoquent des erreurs d’identification ! cf /var/log/mail.log

on lance ensuite les services désirés :

1
2
3
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart

On teste ensuite la récupération des mails, en principe, ça marche.

Authentification SASL SMTP

Il existe plusieurs méthodes d’identification SASL avec postfix, mais notre problème est que nous voulons utiliser les mots de passe cryptés dans la base de donnée, et que nous ne voulons pas patché les packages par soucis de maintenance.

La meilleure solution que j’ai trouvé, est d’utiliser le daemon d’authentification de courier !

Pour celà on procéde d’abord à l’installation de SASL2

1
#apt-get install postfix-tls  sasl2-bin libsasl2 libsasl2-modules

On doit ensuite permettre à postfix de voir le socket du daemon authdaemond, celui-ci étant dans un chroot, on va lier le socket dans le chroot

1
2
# mkdir -p /var/spool/postfix/var/run/courier/authdaemon/
# ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket

On crée ici un hard link du socket de authdaemon dans le chroot, cependant à chaque relance authdaemon il faudra refaire ce hard link, je vous recommande de modifier vos scripts d’init pour celà !

Maintenant on configure postfix pour l’authentification SASL, on crée d’abord un fichier /etc/postfix/sasl/smtpd.conf :

1
2
3
4
5
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/courier/authdaemon/socket
# ( en réalité /var/spool/postfix/var/run/courier/authdaemon/socket )

et on ajoute à /etc/postfix/main.cf :

1
2
3
4
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
1
/etc/init.d/postfix restart

Voilà, nous avons donc effectué une configuration rudimentaire, sachez que cette configuration n’est PAS SÉCURISÉE ! En effet, les mots de passes transitent en clair, et les restrictions laissent à désirer, dans un prochain article, je vous expliquerais comment améliorer tout ça !

N’oubliez pas de changer tous les mots de passe par défaut !

Nvidia et Sortie Vidéo … (separate x-screens)

Je ne m’étais jamais vraiment intéressé aux sorties vidéos sous Linux, en effet, je trouve le Dual View peu pratique …

Ce qui m’intéressait vraiment, c’était de pouvoir utiliser ma TV de temps en temps pour regarder un film depuis ma machine !

Il est possible de faire celà de façon plus pratique, en définissant un x-screen pour l’autre écran ! Ces deux écrans seront alors indépendants et l’on pourra lancer le film sur l’autre écran tout en continuant de travailler sur l’actuel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Section "Device"
# Sortie VGA
Identifier    "VGA"
Driver        "nvidia"
BusID        "PCI:1:0:0"
Screen    0
EndSection
Section "Device"
#Sortie SVIDEO
Driver          "nvidia"
Identifier      "SVIDEO"
Screen 1
Option          "TVOutFormat" "SVIDEO"
Option          "TVStandard" "SECAM"
Option          "ConnectedMonitor" "CRT,TV"
BusID           "PCI:1:0:0"
EndSection
Section "Monitor"
Identifier    "LCD"
Option        "DPMS"
HorizSync    28-64
VertRefresh    43-60
EndSection
Section "Monitor"
Identifier "TV"
HorizSync 60
VertRefresh 30-150
EndSection
...

On conserve notre section screen habituelle et on en ajoute une pour la TV :

1
2
3
4
5
6
7
8
9
10
Section "Screen"
Device "SVIDEO"
Identifier "Screen TV"
Monitor "TV"
DefaultDepth 24
SubSection "Display"
Depth         24
Modes         "720x576"
EndSubSection
EndSection

Il faut ensuite modifier la section ServerLayout pour faire fonctionner le tout !

1
2
3
4
5
6
7
Section "ServerLayout"
Identifier    "Default Layout"
Screen    0    "Default Screen"
Screen    1    "Screen TV"    RightOf "Default Screen"
InputDevice    "Generic Keyboard"
InputDevice    "Configured Mouse"
EndSection

On doit pouvoir faire la même chose avec 2 cartes graphiques pour accélérer les performances.

Les GSM et Debian GNU/Linux

J’ai décidé de tester ce que l’on pouvait faire avec un GSM et une machine sous Linux aujourd’hui.

Je m’équipe donc de mon câble RS232, et de mon SonyEricsson k700i ! Hmm cependant je n’ai pas de port série sur l’ibook, donc on va utiliser un adaptateur bluetooth, l’occasion de compliquer un peu les choses !

Donc on install le package bluez-utils de debian afin de pouvoir utiliser rfcomm, rfcomm nous servira à virtualiser le câble série par le bluetooth. Le package bluez-pin sera aussi utilisé afin de pouvoir entrer le PIN pour le jumelage.

On branche donc le dongle bluetooth, la plupart sont reconnus sans problème, le module bluetooth devrait donc se charger.

On active ensuite le bluetooth sur le GSM, et on lance un “hcitool scan” dans une console… Celà nous renvoie l’adresse MAC du GSM.

Scanning … 00:0F:DE:E0:B2:71 K700i

On se connecte ensuite grâce à rfcomm

$ rfcomm connect rfcomm0 00:0F:DE:E0:B2:71 Connected /dev/rfcomm0 to 00:0F:DE:E0:B2:71 on channel 1 Press CTRL-C for hangup

Et voilà notre connexion série est active sur le device /dev/rfcomm0 ! Tout ceci est configurable dans /etc/bluetooth/ pour éviter de retaper les commandes.

À partir de là on va pouvoir s’amuser avec le téléphone !

On peut faire pas mal de chose :

  • Se connecter sur Internet par le GPRS
  • Récupérer et envoyer des SMS
  • Se servir du téléphone comme télécommande
  • Intéragir avec le répertoire

et j’en passe …

Reception et Envoi de SMS

Pour envoyer et recevoir des SMS en console depuis votre mobile, vous aurez besoin d’installer le package gsm-utils dans debian. Celui-ci offre des outils intéressants et particulièrement gsmsmsstore !

gsmsmsstore –source /dev/rfcomm0 -l –store SM gsmsmsstore –source /dev/rfcomm0 -l –store ME

Vous montreras les SMS stockés dans votre carte SIM (SM) ou dans votre mobile (ME)

Pour envoyer un message on utilisera

gsmsendsms -d /dev/rfcomm0 06xxxxxxxx “Message Blabla”

la suite de l’article bientôt…