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)
<IfModule mod_suexec.c> <VirtualHost *:80> 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 <Directory /var/www/dspam> Options ExecCGI Options -Indexes Addhandler cgi-script .cgi DirectoryIndex dspam.cgi </Directory> <Directory /> 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 </Directory> </VirtualHost> </IfModule>
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 :
Ressources
Les sites ressources que j’ai utilisées :
Jolie tuto, merci à toi !
Par contre, dans le titre, il manque un « s » à SpamassasSin.
Bonjour
J’ai cette erreur dans l’interface web , c’est du à quoi ?
An Error Has Occured
The following error occured while trying to process your request:
System Error. I was unable to determine your identity.
If this problem persists, please contact your administrator.
Merci
Michel
Est-ce que tu as eu une authentification HTTP ?
Si tu n’utilise pas ispconfig il faut que tu le fasse avec un htaccess.
David