Tag Archives: debian

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

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 !

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…