Ajouter des services décentralisés “à la maison” c’est le bien mais à force d’empiler des briques… ça déborde. Et là j’étais à un stade ou la SWAP était un chouilla trop utilisée.
J’avais déjà désactivé ClamAv (anti-virus) pour économiser de la mémoire vive mais ça ne suffisait pas. Mon autre plus gros poste de dépense en RAM était Amavis/Spamassasin. Je me suis donc mis à chercher une alternative ; La plus légère et efficace semble être DSPAM.
Attention : Le fait de remplacer Amavis/Spamassasin va, de fait vous amputer de fonctionnalité administrable par le panel ISPconfig “Stratégie anti-spam”, “liste blanche” car Ispconfig ne support pas (encore !?) DSPAM
Préparation
Étant donné que le serveur est déjà en prod j’ai modifié mon script de firewall (iptables) en spécifiant seulement mon adresse IP pour l’accès au SMTP (pour les tests) ça aura pour effet de faire patienter vos emails en file d’attente sur le serveur émetteur quoi que vous fassiez comme bêtise…
< iptables -A INPUT -p tcp --dport smtp -j ACCEPT
> iptables -A INPUT -p tcp --dport smtp -s VOTRE.IP.DE.MAISON -j ACCEPT
5 jours, c’est par défaut le temps d’attente maximal de la plupart des MTA. Vous pouvez donc théoriquement bricoler pendant 5 jours sans perdre d’email dans cet état…
Installation
Je suis sous Debian squeeze, les paquets Dsapm existe pour squeeze mais dans le backport (non activé pour ma part)
Installation des dépendances :
$ aptitude install libgd-gd2-perl libgd-graph-perl libgd-graph3d-perl libgd-text-perl dbconfig-common postfix-pcre
Ensuite on récupère les paquets sur le site de debian et ont les installent
$ dpkg -i libdspam7_3.10.1+dfsg-3~bpo60+1_amd64.deb
$ dpkg -i libdspam7-drv-mysql_3.10.1+dfsg-3~bpo60+1_amd64.deb
$ dpkg -i dspam_3.10.1+dfsg-3~bpo60+1_amd64.deb
$ dpkg -i dspam-webfrontend_3.10.1+dfsg-3~bpo60+1_all.deb
Note : dbconfig-common va vous demander ce qu’il faut pour créer la base de données..”suivez le guide.”
Configuration
Postfix
Nous allons, dans postfix désactiver la partie Amavis et activer la partie Dspam /etc/postfix/main.cf :
58c58
< smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
---
> smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf, check_client_access pcre:/etc/postfix/dspam_filter_access
71,72d70
< content_filter = amavis:[127.0.0.1]:10024
< receive_override_options = no_address_mappings
74a73,76
>
> dspam_destination_recipient_limit = 1
Même chose dans le fichier /etc/postfix/master.cf :
smtp inet n - - - - smtpd
11a12
> -o content_filter=dspam:
116,129c117,118
< 127.0.0.1:10025 inet n - - - - smtpd
< -o content_filter=
< -o local_recipient_maps=
< -o relay_recipient_maps=
< -o smtpd_restriction_classes=
< -o smtpd_client_restrictions=
< -o smtpd_helo_restrictions=
< -o smtpd_sender_restrictions=
< -o smtpd_recipient_restrictions=permit_mynetworks,reject
< -o mynetworks=127.0.0.0/8
< -o strict_rfc821_envelopes=yes
< -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
< -o smtpd_bind_address=127.0.0.1
<
---
> dspam unix - n n - 10 pipe
> flags=Rhqu user=dspam argv=/usr/bin/dspam --deliver=innocent --user $user -i -f $sender -- $recipient
Dspam
Dans mon cas j’ai choisi de tout le temps délivrer les SPAM et de tagger le sujet. L’apprentissage se fera via l’interface web (dont nous verrons la configuration plus tard)
Activer le démarrage de Dspam /etc/default/dspam
< start=NO
---
> start=YES
La configuration de Dspam à largement été inspiré du howto d’UNIX garden :
29c29
< StorageDriver /usr/lib/dspam/libhash_drv.so
---
> StorageDriver /usr/lib/dspam/libmysql_drv.so
48c48
< TrustedDeliveryAgent "/usr/bin/procmail"
---
> TrustedDeliveryAgent "/usr/sbin/sendmail"
144c144
< Trust root
---
> #Trust root
146,149c146,149
< Trust www-data
< Trust mail
< Trust daemon
< Trust amavis
---
> #Trust www-data
> #Trust mail
> #Trust daemon
> #Trust amavis
151a152
> Trust postfix
297c298
< Preference "signatureLocation=message" # { message | headers } -> default:message
---
> Preference "signatureLocation=headers" # { message | headers } -> default:message
371a373,380
> MySQLServer 127.0.0.1
> #MySQLPort
> MySQLUser dspam
> MySQLPass MOTDEPASSEDEMALADE
> MySQLDb dspam
> MySQLCompress true
> MySQLUIDInSignature on
>
471c480
< LocalMX 127.0.0.1
---
> #LocalMX 127.0.0.1
Pour finir sur les tags j’ai dû faire la chose suivante :
$ mkdir /var/spool/dspam/txt/
$ echo ‘Scanned and tagged as SPAM by DSPAM’ > /var/spool/dspam/txt/msgtag.spam
Premier test
Redémarrage des services pour appliquer tous ces changements :
$ service amavis stop
$ service postfix restart
$ service dspam start
Pour tester vous pouvez en envoyer un message avec la commande telnet. Voici un petit script pratique pour automatiser le test :
#!/bin/bash
from="nimportequi@domain.fr"
to="david@domain.fr"
smtp="smtp.domain.fr"
(
sleep 1
echo "ehlo x"
sleep 1
echo "mail from:${from}"
sleep 1
echo "rcpt to:${to}"
sleep 1
echo "data"
sleep 1
echo "subject:Test message"
sleep 1
echo "from:${from}"
sleep 1
echo "to:${to}"
sleep 1
echo " "
echo "Coucou."
sleep 1
echo "."
sleep 1
echo "QUIT"
) | telnet ${smtp} 25
Dans les entêtes du message vous devriez avoir du X-DSPAM comme ceci :
X-DSPAM-Result: Innocent
X-DSPAM-Processed: Thu Jul 1 00:03:19 2050
X-DSPAM-Confidence: 0.9751
X-DSPAM-Probability: 0.0000
X-DSPAM-Signature: 1,51e7a147199049585619662
Si tout fonctionne on dégage amavis (dit “le gros amavis”) du démarrage :
update-rc.d dspam defaults
update-rc.d amavis remove
Sinon fouiller vos logs (/var/log/mail.log /var/log/syslog…)
Interface web
L’interface web est en CGI et nous allons utiliser apache & suexec (qui est déjà embarqué avec ISPconfig) pour le faire tourner
Voici la configuration du virtualhost (sites-available/dspam)
DocumentRoot /var/www/dspam
# Problème css, image :
Alias /usr/share/dspam /usr/share/dspam
ServerName dspam.domain.fr
ServerAdmin dspam@domain.fr
SuexecUserGroup dspam dspam
Options ExecCGI
Options -Indexes
Addhandler cgi-script .cgi
DirectoryIndex dspam.cgi
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
AuthType Basic
AuthName "Restricted DSPAM user"
Auth_MYSQLhost localhost
Auth_MYSQLusername ispconfig
Auth_MYSQLpassword MOTDEPASSESUPERCHAUD
Auth_MYSQLdatabase dbispconfig
Auth_MYSQLpwd_table mail_user
Auth_MYSQLuid_field login
Auth_MYSQLpwd_field password
On active le virtualhost :
$ a2ensite dspam
$ service apache2 graceful
On ajoute le compte admin de l’interface :
$ echo "david" > /etc/dspam/admins
Vous devriez maintenant pouvoir vous rendre sur l’interface :
- http://dspam.domain.fr/ (interface utilisateur)
- http://dspam.domain.fr/admin.cgi (interface d’administration)
Conclusion
L’objectif premier était d’économiser de la mémoire vive, c’est chose faite ! la preuve en image :
Je suis aussi très satisfait de l’apprentissage de DSPAM. Au début ça peut faire peur parce qu’il laisse vraiment tout passer, mais l’apprentissage est rapide et significatif :
Les premiers jours d’utilisation de DSPAM
Ressources
Les sites ressources que j’ai utilisées :
Original post of David Mercereau.Votez pour ce billet sur Planet Libre.