Serveur Mail · 7 min read · Oct 13, 2025
Le SpamSnake Parfait - Ubuntu Jeos 12.04 LTS Précise Pangolin
Le SpamSnake Parfait - Ubuntu Jeos 12.04 LTS Précise Pangolin
Auteur : Rocky
Version : 5
Postfix avec filtrage bayésien, Postscreen, appel de destinataire Postfix (destinataires relais via look-ahead optionnel), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, vérifications SPF, FuzzyOcr, signatures Sanesecurity, Greyfix, KAM, Scamnailer, FireHOL (pare-feu Iptables), script de destinataires relais (optionnel), Webmin (optionnel), avertissement sortant avec alterMIME (optionnel)
Ce tutoriel montre comment configurer un serveur basé sur Ubuntu Jeos comme filtre anti-spam en mode passerelle. À la fin, vous aurez une passerelle SpamSnake qui relayera des e-mails propres à votre MTA. Vous pourrez également voir votre file d’attente entrante, entraîner votre SpamSnake et effectuer quelques opérations plus avancées via Baruwa.
Je ne peux garantir que cela fonctionnera pour vous, de la même manière que cela fonctionne pour moi.
J’utiliserai les logiciels suivants :
• Serveur Web : Nginx v1.1.19/Uwsgi v1.0.3
• Serveur de base de données : MySQL v5.5.28
• Serveur de messagerie : Postfix v2.9.3
• Serveur DNS de mise en cache : Dnsmasq 2.59
• Filtre : MailScanner v4.84.5-3
• Frontend : Baruwa v1.1.2-4sn
Les crédits vont aux gars de HowToForge et aux développeurs de MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC et Firehol.
INSTALLATION DE BASE
- Installer l’option vm minimum
Définir le nom d’hôte sur server1 - Méthode de partitionnement guidée par défaut
- Configurer l’utilisateur :
u : administrateur
p : motdepasse
Pas de cryptage - Pas de mises à jour automatiques
- Installer OpenSSH
POST INSTALLATION
1. Obtenir des privilèges root
Activez la connexion root en exécutant ce qui suit et en donnant un mot de passe à root. Vous pouvez ensuite vous connecter directement en tant que root :
sudo passwd root2. Configurer le réseau
Parce que l’installateur Ubuntu a configuré notre système pour obtenir ses paramètres réseau via DHCP, nous devons changer cela maintenant car un serveur doit avoir une adresse IP statique. Éditez /etc/network/interfaces et ajustez-le selon vos besoins (dans cet exemple, j’utiliserai l’adresse IP 192.168.0.100) :
vi /etc/network/interfaceset faites-le ressembler à ce qui suit :
# Ce fichier décrit les interfaces réseau disponibles sur votre système
# et comment les activer. Pour plus d'informations, voir interfaces(5).
# L'interface réseau de boucle
auto lo
iface lo inet loopback
# L'interface réseau principale
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1Puis redémarrez votre réseau :
/etc/init.d/networking restartvi /etc/hostset faites-le ressembler à ceci :
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
# Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsMaintenant exécutez :
echo server1.example.com > /etc/hostname
reboot nowEnsuite, exécutez :
hostname
hostname -fLes deux devraient maintenant afficher server1.example.com.
3. Changer le shell par défaut
/bin/sh est un lien symbolique vers /bin/dash, cependant nous avons besoin de /bin/bash, pas de /bin/dash. Par conséquent, nous faisons ceci :
dpkg-reconfigure dashInstaller dash comme /bin/sh ? <– Non
Installer quelques paquets et exigences qui seront nécessaires plus tard :
apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-raw-zlib-perl libdb4.8-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential telnet wget gawk -y4. Mise en cache Dnsmasq
apt-get install dnsmasq -yvi /etc/dnsmasq.confet faites écouter Dnsmasq sur localhost :
listen-address=127.0.0.15. Installer Mysql
apt-get install mysql-client mysql-server libdbd-mysql-perl -y On vous demandera de fournir un mot de passe pour l’utilisateur root MySQL - ce mot de passe est valable pour l’utilisateur root@localhost ainsi que [email protected], donc nous n’avons pas à spécifier manuellement un mot de passe root MySQL plus tard :
Nouveau mot de passe pour l’utilisateur MySQL “root” : <– votremotdepassemysql
Répétez le mot de passe pour l’utilisateur MySQL “root” : <– votremotdepassemysql
6. Installer Postfix :
apt-get install postfix postfix-mysql postfix-doc procmail -yOn vous posera deux questions. Répondez comme suit :
Type général de configuration de messagerie : –> Site Internet
Nom de messagerie système : –> server1.example.com
Arrêtez Postfix :
postfix stopvi /etc/postfix/master.cfet faites-le ressembler à ce qui suit :
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checksÉditez main.cf :
vi /usr/src/postfix.shavec ce qui suit :
#!/bin/sh
postconf -e "alias_maps = hash:/etc/aliases"
newaliases
postconf -e "myorigin = domain.tld"
postconf -e "myhostname = server1.domain.tld"
postconf -e "mynetworks = 127.0.0.0/8, 192.168.0.0/24"
postconf -e "message_size_limit = 10485760"
postconf -e "local_transport = error:No local mail delivery"
postconf -e "mydestination = "
postconf -e "local_recipient_maps = "
postconf -e "relay_domains = mysql:/etc/postfix/mysql-relay_domains.cf"
postconf -e "relay_recipient_maps = mysql:/etc/postfix/mysql-relay_recipients.cf"
postconf -e "transport_maps = mysql:/etc/postfix/mysql-transports.cf"
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postconf -e "disable_vrfy_command = yes"
postconf -e "strict_rfc821_envelopes = no"
postconf -e "smtpd_banner = $myhostname ESMTP SpamSnake"
postconf -e "smtpd_delay_reject = yes"
postconf -e "smtpd_recipient_limit = 100"
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, permit"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_recipient_domain, reject_unauth_destination, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit"
postconf -e "smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining"
postconf -e "smtpd_restriction_classes = spf_policy, grey_policy, whitelist_policy"
postconf -e "spf_policy = check_policy_service unix:private/policy-spf"
postconf –e "policy-spf_time_limit = 3600s"
postconf -e "rbl_policy = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net"
postconf -e "grey_policy = check_policy_service unix:private/greyfix"
postconf -e "whitelist_policy = check_client_access mysql:/etc/postfix/mysql-global_whitelist.cf, check_sender_access mysql:/etc/postfix/mysql-global_whitelist.cf"
postconf -e "header_checks = regexp:/etc/postfix/header_checks"
touch /etc/postfix/virtual
echo "root [email protected]" >> /etc/postfix/virtual && echo "abuse [email protected]" >> /etc/postfix/virtual && echo "postmaster [email protected]" >> /etc/postfix/virtual
postmap /etc/postfix/virtual
touch /etc/postfix/header_checks
echo "/^Received:/ HOLD" >> /etc/postfix/header_checks
postmap /etc/postfix/header_checks
cat > /etc/postfix/mysql-global_whitelist.cf < /etc/postfix/mysql-relay_domains.cf < /etc/postfix/mysql-relay_recipients.cf < /etc/postfix/mysql-transports.cf < Note : Pour cette étape, assurez-vous de remplacer [email protected], example.com et @example.com par de vraies valeurs correspondant à votre configuration.
Rendez-le exécutable et exécutez-le :
chmod +x /usr/src/postfix.sh
./usr/src/postfix.sh
*Note : L’utilisateur/mot de passe pour les fichiers cf doit être le même que l’utilisateur/mot de passe que vous utiliserez avec votre configuration de base de données Baruwa plus tard. Assurez-vous de changer tout ce qui est en rouge avant d’exécuter le script.
Appel de destinataire Postfix (Optionnel)
Cette fonctionnalité interroge le serveur destinataire pour voir si le destinataire existe. Sinon, il répond avec une erreur 550 au serveur d’envoi et abandonne la connexion. Si l’utilisateur existe, le SpamSnake continuera à traiter l’e-mail. C’est juste une autre méthode pour prévenir le backscatter, mais cela a un coût. Lisez à ce sujet sur http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Vous pouvez ignorer cette méthode et utiliser la méthode de script (plus tard dans ce guide) si vous décidez qu’elle ralentira votre serveur.
vi /etc/postfix/main.cf et ajoutez ce qui suit :
verify_recipient = reject_unknown_recipient_domain, reject_unverified_recipient
look_ahead = check_recipient_access hash:/etc/postfix/access
unverified_recipient_reject_code = 550
address_verify_map = btree:/var/lib/postfix/verifyAjoutez ceci à vos classes de restriction smtpd :
verify_recipient, look_aheadAjoutez ceci aux restrictions de destinataires smptd :
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, look_ahead, whitelist_policy, grey_policy, rbl_policy, spf_policy, permitCréez le fichier d’accès :
touch /etc/postfix/accessAjoutez vos domaines :
cat > /etc/postfix/access <
example.com verify_recipient
example2.com verify_recipient
EOF
*Note : Assurez-vous d’ajouter des domaines valides que vous filtrez.
Postmap-le :
postmap /etc/postfix/accessDernière vérification de l’installation de Postfix :
less /etc/postfix/main.cfVérifiez le contenu du fichier pour des erreurs et réparez si nécessaire. Démarrez Postfix :
postfix startVérifiez que Postfix répond :
telnet 127.0.0.1 25Vous devriez voir :
220 [votreFQDNici] ESMTP Postfix (Ubuntu)Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.