To my english speaking visitors: There is an english version of this page.
mxallowd
ist ein Daemon für Linux/Netfilter (via
libnetfilter_queue
) oder BSD/pf (via pflog), der eine Verfeinerung
der nolisting-
Methode darstellt. Hierbei werden für eine Domain zwei MX-Einträge vom
Nameserver ausgeliefert, wobei auf der IP-Adresse des ersten MX-Eintrags kein
Mailserver läuft. Einige Spammer versuchen nun, nur auf den ersten Mailserver
Spam auszuliefern und werden damit keinen Erfolg haben. Auf der IP-Adresse des
zweiten MX-Eintrags läuft dann ein richtiger Mailserver, der die E-Mails
entgegennimmt. Echte Mailserver probieren – im Gegensatz zu Spammern – alle
MX-Einträge in der angegeben Reihenfolge (geordnet nach Priorität) durch, bis
sie die Mail zustellen können. Somit kommen echte Mails an und Spam bleibt
draußen.
Das Problem beim nolisting ist nun, dass einige Spammer (vermutlich
aufgrunddessen) direkt den zweiten MX-Eintrag benutzen („direct-to-second-mx”).
Hier kommt nun mxallowd
ins Spiel: Auf den zweiten Mailserver darf
man sich nicht verbinden (das Paket wird einfach via netfilter/iptables
verworfen), außer, wenn man es zuvor beim ersten Mailserver probiert hat.
Dieses Problem hätte man prinzipiell auch nur via iptables
mit
dem Modul ipt_recent
lösen können, wenn es nicht ein kleines
Problem dabei gäbe: Einige Anbieter (wie zum Beispiel Google Mail) verwenden
zwar den gleichen DNS-Namen, aber unterschiedliche IP-Adressen im selben
Zustellzyklus. Das heißt, dass ipt_recent
, welches ausschließlich
auf IP-Adress-Basis arbeitet, E-Mails von Google nicht durchlässt.
mxallowd
fügt daher alle IP-Adressen des DNS-Eintrags in die
Whitelist ein (außer, wenn man die Option --no-rdns-whitelist
angibt).
Installation unter Linux
Damit neue Verbindungen an mxallowd
geleitet werden, muss man
folgende iptables
-Regel hinzufügen:
iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j NFQUEUE --queue-num 23
Falls das Einfügen dieser Regel nicht klappt, muss zuvor via modprobe
nfnetlink_queue
das Queue-Modul geladen werden.
Die Regel kann man selbstverständlich anpassen, sodass zum Beispiel nur an
bestimmte IP-Adressen gerichtete Verbindungen gefiltert werden, oder dass
Verbindungen von bestimmten IP-Adressen von vorneherein akzeptiert werden
(-j ACCEPT
am Ende).
Installation unter BSD
Eine /etc/pf.conf
könnte so aussehen:
tablepersist real_mailserver="192.168.1.4" fake_mailserver="192.168.1.3" real_mailserver6="2001:dead:beef::1" fake_mailserver6="2001:dead:beef::2" pass in quick log on fxp0 proto tcp from \ to $real_mailserver port smtp pass in quick log on fxp0 inet6 proto tcp from \ to $real_mailserver6 port smtp block in log on fxp0 proto tcp \ to { $fake_mailserver $real_mailserver } port smtp block in log on fxp0 inet6 proto tcp \ to { $fake_mailserver6 $real_mailserver6 } port smtp
Wichtig dabei ist, dass die Table mx-white
existiert und dass
sowohl die pass- als auch die block-Regeln loggen.
Wenn man ein anderes pflog-interface verwendet, kann man mxallowd das via Parameter mitteilen.
Hilfe, ich kann keine Mails mehr versenden!
Das stimmt – wenn du den selben Mailserver auch verwendest, um Mails zu
versenden, probiert dein Mailclient in der Regel nur eine Verbindung. Ich würde
raten, die Mails über SMTPS (SSL) zu versenden, denn dieser Port (465) wird
nicht von mxallowd
gefiltert. Ansonsten kannst du deinen
Mailserver auch zusätzlich auf einem anderen Port laufen lassen, den nur zu
benutzt (Spammer treiben nicht den Aufwand, einen Portscan durchzuführen,
wenn sie nicht mal standardkonforme Mailer verwenden…). Falls du eine fixe
IP-Adresse hast, kannst du diese natürlich auch via iptables
whitelisten:
iptables -I INPUT 1 -p tcp --dport 25 --s 192.168.2.3 -j ACCEPT
Herunterladen
- mxallowd 1.9 (33K, GPG-Signatur)
Lizenz
mxallowd ist freie Open-Source-Software unter der GPL2.
Entwicklung
Der aktuelle Entwicklungsstand kann in gitweb verfolgt werden.
Feedback
Solltest du mir eine Nachricht zukommen lassen wollen, schreib mir doch bitte eine E-Mail.