Spamfilter · 6 min read · Oct 13, 2025
Die perfekte SpamSnake - Ubuntu Jeos 12.04 LTS Präziser Pangolin
Die perfekte SpamSnake - Ubuntu Jeos 12.04 LTS Präziser Pangolin
Autor: Rocky
Version: 5
Postfix w/Bayesian Filtering, Postscreen, Postfix Recipient Callout (Relay Recipients via look-ahead Optional), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, SPF Checks, FuzzyOcr, Sanesecurity Signatures, Greyfix, KAM, Scamnailer, FireHOL (Iptables Firewall), Relay Recipients Script (Optional), Webmin (Optional), Outgoing Disclaimer with alterMIME (Optional)
Dieses Tutorial zeigt, wie man einen auf Ubuntu Jeos basierenden Server als Spamfilter im Gateway-Modus einrichtet. Am Ende haben Sie ein SpamSnake-Gateway, das saubere E-Mails an Ihren MTA weiterleitet. Sie werden auch in der Lage sein, Ihre eingehende Warteschlange zu sehen, Ihre SpamSnake zu trainieren und einige weitere fortgeschrittene Operationen über Baruwa durchzuführen.
Ich kann keine Garantien geben, dass dies bei Ihnen funktioniert, so wie es bei mir funktioniert.
Ich werde die folgende Software verwenden:
• Webserver: Nginx v1.1.19/Uwsgi v1.0.3
• Datenbankserver: MySQL v5.5.28
• Mailserver: Postfix v2.9.3
• Caching DNS-Server: Dnsmasq 2.59
• Filter: MailScanner v4.84.5-3
• Frontend: Baruwa v1.1.2-4sn
Die Anerkennung geht an die Jungs von HowToForge und die Entwickler von MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC und Firehol.
GRUNDINSTALLATION
- Installieren Sie die Mindest-VM-Option
Setzen Sie den Hostnamen auf server1 - Standardgeführte Partitionierungsmethode
- Benutzer einrichten:
u: administrator
p: password
Keine Verschlüsselung - Keine automatischen Updates
- Installieren Sie OpenSSH
NACH DER INSTALLATION
1. Root-Rechte erhalten
Aktivieren Sie den Root-Login, indem Sie Folgendes ausführen und dem Root ein Passwort geben. Sie können sich dann direkt als Root anmelden:
sudo passwd root2. Das Netzwerk konfigurieren
Da der Ubuntu-Installer unser System so konfiguriert hat, dass es seine Netzwerkeinstellungen über DHCP erhält, müssen wir das jetzt ändern, da ein Server eine statische IP-Adresse haben sollte. Bearbeiten Sie /etc/network/interfaces und passen Sie es an Ihre Bedürfnisse an (in diesem Beispielsetup werde ich die IP-Adresse 192.168.0.100 verwenden):
vi /etc/network/interfacesund lassen Sie es wie folgt aussehen:
# Diese Datei beschreibt die verfügbaren Netzwerkinterfaces auf Ihrem System
# und wie man sie aktiviert. Für weitere Informationen siehe interfaces(5).
# Das Loopback-Netzwerkinterface
auto lo
iface lo inet loopback
# Das primäre Netzwerkinterface
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.1Starten Sie dann Ihr Netzwerk neu:
/etc/init.d/networking restartvi /etc/hostsund lassen Sie es so aussehen:
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::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-allhostsFühren Sie nun aus:
echo server1.example.com > /etc/hostname
reboot nowFühren Sie danach aus:
hostname
hostname -fBeide sollten jetzt server1.example.com anzeigen.
3. Die Standard-Shell ändern
/bin/sh ist ein Symlink zu /bin/dash, wir benötigen jedoch /bin/bash, nicht /bin/dash. Daher tun wir Folgendes:
dpkg-reconfigure dashInstallieren Sie einige Pakete und Anforderungen, die später benötigt werden:
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. Caching Dnsmasq
apt-get install dnsmasq -yvi /etc/dnsmasq.confund lassen Sie Dnsmasq auf localhost hören:
listen-address=127.0.0.15. Mysql installieren
apt-get install mysql-client mysql-server libdbd-mysql-perl -y Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben - dieses Passwort ist sowohl für den Benutzer root@localhost als auch für [email protected] gültig, sodass wir später kein MySQL-Root-Passwort manuell angeben müssen:
Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
6. Postfix installieren:
apt-get install postfix postfix-mysql postfix-doc procmail -ySie werden mit zwei Fragen konfrontiert. Antworten Sie wie folgt:
Allgemeiner Typ der Mailkonfiguration: –> Internet Site
System-Mail-Name: –> server1.example.com
Stoppen Sie Postfix:
postfix stopvi /etc/postfix/master.cfund lassen Sie es wie folgt aussehen:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checksBearbeiten Sie main.cf:
vi /usr/src/postfix.shmit folgendem Inhalt:
#!/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 < Hinweis: Stellen Sie sicher, dass Sie in diesem Schritt [email protected], example.com und @example.com durch echte Werte ersetzen, die zu Ihrem Setup passen.
Machen Sie es ausführbar und führen Sie es aus:
chmod +x /usr/src/postfix.sh
./usr/src/postfix.sh
*Hinweis: Der Benutzer/Passwort für die cf-Dateien muss derselbe sein wie der Benutzer/Passwort, den Sie später mit Ihrem Baruwa DB-Setup verwenden werden. Stellen Sie sicher, dass Sie alles in Rot ändern, bevor Sie das Skript ausführen.
Postfix Recipient Callout (Optional)
Diese Funktion fragt den Empfänger-Server ab, um zu sehen, ob der Empfänger existiert. Wenn nicht, antwortet er mit einem 550-Fehler an den sendenden Server und trennt die Verbindung. Wenn der Benutzer existiert, wird die SpamSnake mit der Verarbeitung der E-Mail fortfahren. Dies ist nur eine weitere Methode, um Backscatter zu verhindern, hat jedoch ihren Preis. Lesen Sie mehr darüber unter http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Sie können diese Methode überspringen und die Skriptmethode verwenden (später in diesem Handbuch), wenn Sie entscheiden, dass sie Ihren Server belasten wird.
vi /etc/postfix/main.cf und fügen Sie Folgendes hinzu:
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/verifyFügen Sie dies zu Ihren smtpd_restriction_classes hinzu:
verify_recipient, look_aheadFügen Sie dies zu den smptd_recipient_restrictions hinzu:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, look_ahead, whitelist_policy, grey_policy, rbl_policy, spf_policy, permitErstellen Sie die Zugriffsdatei:
touch /etc/postfix/accessFügen Sie Ihre Domains hinzu:
cat > /etc/postfix/access <
example.com verify_recipient
example2.com verify_recipient
EOF
*Hinweis: Stellen Sie sicher, dass Sie gültige Domains hinzufügen, für die Sie filtern.
Postmap es:
postmap /etc/postfix/accessLetzter Blick auf die Postfix-Installation:
less /etc/postfix/main.cfÜberprüfen Sie den Inhalt der Datei auf Fehler und reparieren Sie sie gegebenenfalls. Starten Sie Postfix:
postfix startÜberprüfen Sie, ob Postfix antwortet:
telnet 127.0.0.1 25Sie sollten sehen:
220 [yourFQDNhere] ESMTP Postfix (Ubuntu)Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.