Maniatux's Blog

Welcome to the internet

Sysadmin

Serveur mail sur CentOS

Rédigé par Xavier - - Aucun commentaire

Comme promis voici un petit article expliquant la mise en place d'un serveur mail sur CentOS avec accès IMAP sécurisé (chiffrement SSL). Nous parlons ici d'une situation très simple, les utilisateurs sont les comptes locaux du système, les messages sont enregistrés dans leur répertoire personnel. C'est ce que vous devriez faire pour un serveur perso ou avec peu d'utilisateurs.

Pour la fonction SMTP (envoi/réception) nous allons utiliser Postfix, et pour l'accès IMAP (consultation du courrier via un client de messagerie distant) ce sera Dovecot. Le serveur sera capable de recevoir du courrier, mais nous ne traiterons pas la partie envoi (vous pouvez passer par n'importe quel SMTP, par exemple celui de votre FAI) car de toutes manières le port 25 sortant est bloqué à l'extérieur.

Cas et pré requis

Vous devez disposer d'un nom de domaine sur internet redirigé chez vous (sans quoi la réception de courriers sera impossible). Si vous passez par un routeur avec une couche de NAT n'oubliez pas de rediriger le port 25 sur votre serveur.

Dans ce tuto nous prendrons comme domaine (fictif) : freeman.org

Installation

L'installation ne requiert pas de manipulation particulière. Si vous passez par le DVD, vous aurez le choix des "rôles", sélectionnez "Minimal".

Réseau

La configuration du réseau est détaillée sur cette page, ou alors sur la documentation de CentOS.

Dans system-config-network-tui, n'oubliez pas d'aller faire un tour dans "Configuration DNS" afin d'entrer votre nom d'hôte (par exemple mail.freeman.org).

Mise à jour et installation

Effectuez tout d'abord une mise à jour du système puis installez Postfix et Dovecot :

# yum update -y
# yum install postfix dovecot

Puis on ajoute au démarrage ces deux daemons :

# chkconfig postfix on
# chkconfig dovecot on

SSL

Avant d'aller plus loin on va devoir obtenir ou créer un certificat et une clé privée SSL. Vous pouvez le faire vous-même avec openssl, ou en demander gratuitement sur cacert.org (Linuxfr utilise ces certificats).

  • La clé (freeman.key) est à mettre dans /etc/pki/tls/private/
  • Le certificat (freeman.crt) est à mettre dans /etc/pki/tls/certs/

Puis on leur donne les bons droits :

# chmod 0400 /etc/pki/tls/private/freeman.key
# chmod 0444 /etc/pki/tls/certs/freeman.crt

Nous verrons après que Dovecot se charge en root, il a donc théoriquement les droits de lecture sur freeman.key, mais SELinux le bloque. Pour palier à ça il faut effectuer la manipulation suivante :

# restorecon -RvF /etc/pki

Configuration de Postfix

La configuration se fait dans le fichier main.cf qui est situé dans /etc/postfix. Il faudra ensuite définir quelques alias dans /etc/aliases mais nous verrons plus tard.

# vi /etc/postfix/main.cf

Chaque paramètre est largement commenté et humainement compréhensible. Voici, dans le cadre de notre tutoriel, les paramètres à modifier :

myorigin = freeman.org
inet_interfaces = all
inet_protocols = ipv4
mydestination = freeman.org
home_mailbox = Maildir/

Enregistrez et refermez. Nous allons ensuite définir les alias. Nous allons rediriger les mails destinés à root vers l'utilisateur "xavier" :

# vi /etc/aliases
# Person who should get root's mail
root:         xavier

Appliquez les alias et lancez postfix :

# newaliases
# service postfix start

Créer un compte

Comme vu précédemment nous allons faire le compte "xavier" :

# useradd -m xavier
passwd xavier

L'adresse de ce compte est xavier@freeman.org. Astuce : pour avoir une adresse xavier.chotard@freeman.org, utilisez un alias (xavier.chotard: xavier).

Configuration de Dovecot

La configuration est astucieusement répartie dans plusieurs fichiers de configuration :

# vi /etc/dovecot/dovecot.conf
protocols = imap
# vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
# vi /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/pki/tls/certs/freeman.crt
ssl_key = </etc/pki/tls/private/freeman.key

Lancez dovecot :

# service dovecot start

Configuration du parefeu

Par défaut, CentOS dispose d'une configuration assez restrictive de son parefeu. Vous allez devoir ouvrir les ports 25 (smtp) et 993 (imap-ssl). Pour faire cela simplement, utilisez l'outil system-config-firewall-tui. Si vous ne l'avez pas, reportez-vous à cet article.

Essais

Il va falloir tout d'abord tester le service SMTP, pour voir si les courriers sont bien reçus. Ensuite ce sera l'IMAP, pour vérifier si on peut configurer notre compte sur un Thunderbird distant.

Test SMTP

Le test le plus simple, c'est d'envoyer un mail sur votre nouvelle adresse. Vérifiez ensuite que le répertoire Maildir s'est bien créé dans /home/xavier. Autrement il est possible de procéder en telnet depuis une autre machine :

$ telnet IPSERVER 25
220 mail.freeman.org ESMTP Postfix
HELO galactica
250 mail.freeman.org
MAIL FROM:
250 2.1.0 Ok
RCPT TO:
250 2.1.5 Ok
DATA
354 End data with .
TEST
.
250 2.0.0 Ok: queued as C0BB6A0116
QUIT

Test IMAP

Ajoutez votre compte IMAP dans votre client de messagerie favori...

Vous devez voir apparaitre votre mail de test dans la liste (après un message de validation du certificat de sécurité).

Les utilitaires de configuration en mode texte sur CentOS

Rédigé par Xavier - - Aucun commentaire

CentOS propose en mode texte des utilitaires permettant de configurer de manière simple le réseau et le parefeu. or selon l'installation que vous faites il se peut que ces utilitaires ne soient pas présents.

Voici donc un petit article détaillant la mise en place de ces outils (en version texte) de A à Z avec la configuration manuelle du réseau au passage. Cela me sert principalement de pense-bête car je n'ai pas l'habitude de CentOS.

Configurer son réseau à la main

Il arrive souvent que le réseau ne soit pas fonctionnel, ce qui est assez embêtant vu que nous avons besoin d'internet pour installer l'outil permettant de le configurer... voici donc la manipulation à faire pour y remédier.

Note : Il s'agit de configurations volatiles qui seront perdues au démarrage, mais dans notre cas c'est parfait.

Configuration DHCP

# dhclient eth0

Configuration statique

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0
# route add default gw 192.168.1.1 eth0
# echo "nameserver 8.8.8.8" > /etc/resolv.conf

Installation des outils

# yum install system-config-network-tui
# yum install system-config-firewall-tui

Et voilà !

Pour la virtualisation, ce sera CentOS

Rédigé par Xavier - - Aucun commentaire

Suite à mon article précédent, j'étais parti sur une solution Proxmox pour mon hyperviseur. Cependant je me suis rapidement énervé sur l'applet VNC en Java qui permet d'avoir l'affichage des machines virtuelles. Il est lent (impossible d'attraper le grub d'une VM), rigide, et fait régulièrement planter Firefox. Ragequit.

C'est donc CentOS 6.2 x86_64 qui est venu remplacer Proxmox sur l'ordinateur. La console distante virt-manager est sur mon notebook en archlinux. Les deux semblent plutôt bien se marier puisque je n'ai eu que 3 crashs en un weekend (ce qui est un miracle pour virt-manager).

J'ai actuellement deux VM (je vous laisse deviner d'où viennent les noms) :

  • Shadowbroker : serveur mail (Postfix + dovecot) sur CentOS 6
  • Harbinger : serveur jabber (prosody) sur Debian Squeeze

La mise en place du serveur mail sous CentOS est intéressante à faire, notamment à cause de SELinux que j'ai choisi de ne pas désactiver cette fois. Cela fera l'objet d'un article très prochainement.

Quelle solution KVM choisir ?

Rédigé par Xavier - - Aucun commentaire

Mon ancien ordinateur portable Dell Inspiron 9400 va être recyclé en serveur de virtualisation, et j'ai bien entendu choisi une solution Linux-KVM. En effet bien que je ne sois pas contre VMware ESXi, que je considère comme le meilleur produit existant actuellement, je préfère explorer quelque chose de moins connu qui sera donc plus instructif.

Ma problématique est de choisir l'OS qui sera utilisé pour faire fonctionner l'hyperviseur. J'en ai retenu deux :

  • CentOS
  • Proxmox

CentOS s'installe en mode texte avec l'hyperviseur et le daemon libvirt. On peut ensuite y connecter une console Virt-Manager depuis un autre poste. L'inconvénient est que Virt-manager est tout sauf fiable : c'est rigide, bugué, grandement variable selon les versions, et pas disponible sur Windows. L'avantage est qu'en partant d'une solution comme CentOS on a une certaine liberté sur le choix des composants. On sait aussi que les mises à jour offrent des améliorations dans la virtualisation du fait du travail de Red Hat.

Proxmox offre une console en web donc indépendante de l'OS, et en pratique bien plus fiable et complète que Virt-manager. L'inconvénient est qu'une solution tout-en-un offre moins de souplesse dans le choix des composants ou leur modification. On ne sait pas également comment évolue le produit, si les mises à jour se contentent de corriger les bugs, ou si elles apportent des améliorations de performances et l'introduction de nouveautés comme sur CentOS / RedHat.

Je pense retenir Proxmox, les OS invités seront sûrement des debian ce qui permettra d'utiliser les containers OpenVZ et économiser des ressources par rapport à KVM.

De fetchmail en cron à fetchmail en daemon

Rédigé par Xavier - - Aucun commentaire

Il y a quelques temps j'installais fetchmail sur mon serveur OpenBSD et utilisais la méthode cron pour rapatrier régulièrement du courrier présent sur d'autres serveurs mail. Mais hier je me suis rendu compte que cette méthode n'était pas très propre car elle générait des logs envahissants assez rapidement.

J'ai donc cherché comment faire fonctionner fetchmail de manière autonome, en daemon, sans besoin de passer par cron. Voici la méthode :

Supprimer notre planification cron

$ crontab -e

Retirer le @hourly fetchmail

Créer un script rc.d

# vi /etc/rc.d/fetchmail

Mettre :

#!/bin/sh
#
# $OpenBSD: $

daemon="/usr/local/bin/fetchmail -d 3600"
daemon_user="freeman"

. /etc/rc.d/rc.subr

rc_cmd $1

Attention : fetchmail sera lancé avec les droits de l'utilisateur "freeman", car c'est celui-là qui a tous les paramètres des comptes mail à rapatrier. Adaptez le script à votre situation. 3600 est la période de vérification des messages, exprimée en secondes. Donc là c'est 1 heure.

Essai :

# pkill fetchmail
# /etc/rc.d/fetchmail start
fetchmail(ok)
# ps aux | grep fetchmail
freeman    527  0.4  0.6   852  1620 ??  Ss    10:51AM    0:00.04 /usr/local/bin/fetchmail -d 3600

Ajoutez ensuite fetchmail dans votre rc.conf pour qu'il soit lancé au démarrage.