Installation d’un serveur Ubuntu #2

Je suis en train de re installer un serveur à la maison pour pouvoir migré en douceur ma vieillissante machine sous Debian 5. J’ai choisi une Ubuntu 9.10 édition serveur. Ce billet va traité la partie messagerie du serveur. Il fait suite à : Installation d’un serveur Ubuntu #1 ou je traitais des services Web.

État des lieux.

  • Le serveur héberge les boites mails de plusieurs domaines.
  • Il y’a des alias / redirection.
  • Dspam joue le rôle d'antispam.
  • Postgrey se charge de faire du Greylisting.
  • Les boites mails sont toutes dans : /var/spool/vmail/domaine.tld/mailbox
  • Les services POP et IMAP sont gérés par Dovecot.
  • Il n’y a pas de SSL disponible, ce serveur de messagerie est on ne peut plus simpliste !

Préparation de la base de données

Le but de cette étape est de préparer la base de données qui va servir à gérer notre messagerie. Il y’a 3 tables :

  • domain
  • mailbox
  • alias
CREATE TABLE IF NOT EXISTS \`alias\` (
  \`source\` varchar(255) NOT NULL DEFAULT '',
  \`destination\` text NOT NULL,
  \`actif\` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (\`source\`)
) 

CREATE TABLE IF NOT EXISTS \`domain\` (
  \`domain\` varchar(255) NOT NULL DEFAULT '',
  \`actif\` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (\`domain\`)
)

CREATE TABLE IF NOT EXISTS \`mailbox\` (
  \`email\` varchar(255) NOT NULL DEFAULT '',
  \`password\` varchar(255) NOT NULL DEFAULT '',
  \`quota\` int(10) NOT NULL DEFAULT '0',
  \`actif\` tinyint(1) NOT NULL DEFAULT '1',
  \`imap\` tinyint(1) NOT NULL DEFAULT '1',
  \`pop3\` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (\`email\`)
)

Installation de Postfix

sudo apt-get install postfix postfix-mysql

```L'utilisateur **vmail** et le groupe **vmail** seront utilisé pour les droits sur les répertoires des boites mails, on leur donne comme **UID** et **GID** **5000**.```
sudo useradd -d /var/spool/vmail -u 5000 vmail
sudo groupadd -g 5000 vmail
sudo usermod -g vmail vmail

```Une fois l'installation de **Postfix** faite on va commencer à le configurer : Le répertoire de configuration est **/etc/postfix**, il y'a deux fichiers qui sont **master.cf** et **main.cf**. Il y'a aussi les fichiers de configuration **mysql**.```
\# mysql-virtual\_domains.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select\_field = 'virtual'
table = domain
where\_field = domain
additional\_conditions = AND actif=1

# mysql-virtual\_mailboxes.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select\_field = CONCAT(SUBSTRING\_INDEX(email,'@',-1),'/',SUBSTRING\_INDEX(email,'@',1),'/')
table = mailbox
where\_field = email
additional\_conditions = AND actif=1

# mysql-virtual\_aliases.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select\_field = destination
table = alias
where\_field = source
additional\_conditions = AND actif=1

# mysql-virtual\_aliases\_mailbox.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select\_field = email
table = mailbox
where\_field = email
additional\_conditions = AND actif=1

```Laissons le fichier **master.cf** dans sa version par défaut nous feront des modifications au moment de l'installation de l'**antispam**.```
\# /etc/postfix/main.cf

smtpd\_banner = $myhostname ESMTP (Debian/GNU)
biff = no
disable\_vrfy\_command = yes
smtpd\_helo\_required = yes

mydomain = domaine.tld
append\_dot\_mydomain = yes

myhostname = domaine.tld

mydestination = localhost, localhost.localdomain

# Mettez ici le relais smtp de votre FAI
relayhost = smtp.free.fr

mynetworks = 127.0.0.0/8 192.168.0.0/24
inet\_interfaces = all

smtpd\_sender\_restrictions =
        permit\_mynetworks,
        warn\_if\_reject reject\_unverified\_sender

smtpd\_recipient\_restrictions =
        permit\_mynetworks,
        reject\_unauth\_destination,
        reject\_unknown\_recipient\_domain,
        reject\_non\_fqdn\_recipient,

smtpd\_client\_restrictions =
        permit\_mynetworks

virtual\_alias\_maps = mysql:/etc/postfix/mysql-virtual\_aliases.cf,mysql:/etc/postfix/mysql-virtual\_aliases\_mailbox.cf
virtual\_mailbox\_domains = mysql:/etc/postfix/mysql-virtual\_domains.cf
virtual\_mailbox\_maps = mysql:/etc/postfix/mysql-virtual\_mailboxes.cf
virtual\_mailbox\_base = /var/spool/vmail/
virtual\_uid\_maps = static:5000
virtual\_gid\_maps = static:5000

```On redémarre **postfix** et c'est partie !```
sudo /etc/init.d/postfix restart

Postgrey

Parce que Postfix c’est bien mais avec Postgrey c’est mieux ! Postgrey est un serveur de Greylisting, késako le Greylisting ? Et bien simplement le Greylisting bloque tous les mails entrants au moins une fois. En général un serveur de mail réémet son message si il reçoit une erreur compréhensible lors de la première émission, par contre un robot spammeur ne réémet que très rarement. Le Greylisting permet donc de supprimer naturellement beaucoup de SPAM !``` sudo apt-get install postgrey

\# /etc/default/postgrey
POSTGREY\_OPTS="--inet=60000"

# /etc/postfix/main.cf
smtpd\_recipient\_restrictions =
        permit\_mynetworks,
        reject\_unauth\_destination,
        reject\_unknown\_recipient\_domain,
        reject\_non\_fqdn\_recipient,
        check\_policy\_service inet:127.0.0.1:60000

sudo /etc/init.d/postfix restart && sudo /etc/init.d/postgrey restart


Antispam
========

Nous allons utiliser Spamassassin pour analyser les courriels et les tagger si il s'agit de SPAM.```
sudo apt-get install spamassassin

```La configuration de **Postfix** pour utiliser **Spamassassin** se fait dans le fichier **/etc/postfix/master.cf**```
\# remplacer la ligne 
smtp      inet  n       -       -       -       -       smtpd
# par la ligne 
smtp      inet  n       -       -       -       -       smtpd
        -o content\_filter=spamassassin
# a la fin du fichier 
spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

```Puis on redémarre **Postfix**```
sudo /etc/init.d/postfix restart

```On test maintenant ! Envoyer vous un mail avec dans le corps du message cette chaine de caractère :```
XJS\*C4JDBQADN1.NSBN3\*2IDNEN\*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL\*C.34X

```Avec cette chaine le mail sera automatiquement détecté comme **SPAM**, cela permet de vérifier que **Spamassassin** fonctionne correctement.
updatedupdated2024-06-012024-06-01