Zunächst muss natürlich spamd installiert werden. Stelle zuvor sicher, dass der Portstree aktuell ist.
- Mit folgendem Befehl installieren wir spamd;
# cd /usr/ports/mail/spamd/ && make install clean - Folgende Einträge machen wir in '/etc/rc.conf':
obspamd_flags="-G 15:4:864 -v -l 127.0.0.1"
Die pfspamd_flags bedeuten im einzelnen folgendes:
obspamd_enable="YES"
obspamlogd_enable="YES"-G: aktiviere folgende Refresh-Raten:
15: Der sendende Host bleibt für 15 Minuten in der Greylist
-v: protokolliere sehr genau, sodass die ausgehenden Mails in der Whitelist landen
4: Leere die Greylist nach 4 Stunden
864: Lösche die Einträge in der Whitelist, die älter als 3 Monate sind - Als nächstes erstellen wir uns eine Konfigurationsdatei für spamd. Diese finden wir als '/usr/local/etc/spamd/spamd.conf'. Diese lädtst du am besten von mir herunter. Die Syntax ist ziemlich klar. Achte aber darauf, dass du nur Leerzeichen verwendest, keine Tabulatoren. Damit kommt spamd nämlich nicht klar. Die Benachrichtigungen an die Absender habe ich deaktiviert.
In der "spamd.conf" werden die Listen hinterlegt, anhand derer die sendenden Server auf Spam überprüft werden. - Bevor wir in einem weiteren Schritt die pf-Konfiguration anpassen, erstellen wir noch ein paar Dateien und bringen spamd dazu, über syslogd zu protokollieren.
# touch /var/log/spamd
# touch /etc/pf_files/whitelist.lst
# touch /etc/pf_files/blacklist.lst
# touch /var/db/spamd
# chown _spamd:_spamd /var/db/spamd
Füge folgenden Eintrag in die Datei '/etc/syslog.conf' ein:
!spamd
daemon.err;daemon.warn;daemon.info /var/log/spamd - Zu guter letzt starten wir den syslog-Daemon neu und ergänzen in der '/etc/fstab' folgenden Eintrag, sodass spamlogd richtig arbeiten kann:
fdescfs /dev/fd fdescfs rw 0 0
Firewallregeln anpassen
Jetzt öffnen wir unsere '/etc/pf.conf' und ändern sie wie folgt ab:
- Im Abschnitt "Tables" ergänzen wir folgende Zeile, die verhindert, dass interne IPs nicht von außen ankommen dürfen:
table <rfc1918> persist
table <spamd> persist
table <spamd-white> persist
table <whitelist> persist file "/etc/pf_files/whitelist.lst"
table <blacklist> persist file "/etc/pf_files/blacklist.lst" - Jetzt fügen wir noch folgende Weiterleitungsregeln ein. Achte dabei auf die Reihenfolge, da dies erreichen könnte, dass überhaupt keine Mail mehr ankommt.
rdr pass on $if proto tcp from <whitelist> to $if port 25 -> $mail_ip port 25
$if: Ist das Interface, bspw. eth0
rdr pass on $if proto tcp from <blacklist> to $if port 25 -> 127.0.0.1 port 8025
rdr pass on $if proto tcp from <spamd> to $if port 25 -> 127.0.0.1 port 8025
rdr pass on $if proto tcp from <spamd-white> to $if port 25 -> $mail_ip port 25
rdr pass on $if proto tcp from !<spamd-white> to $if port 25 -> 127.0.0.1 port 8025
rdr pass on $if proto tcp from any to $if port 25 -> $mail_ip port 25
$mail_ip: Ist die interne IP des Mailservers (z.B. einer Jail) - Bei den Block-Regeln tragen wir noch folgendes ein:
block in quick on $if inet from <rfc1918> to any - Bei den pass-Regeln tragen wir noch diese Zeilen ein. Diese bewirken, dass pflogd vom Mailverkehr erfährt und somit in die Whitelist aufgenommen werden.
pass out log on $if inet proto tcp from $mail_ip to any port 25 keep state
pass in log on $if inet proto tcp from any to $if port 25 keep state - Ein wichtiger Hinweis: Da du wahrscheinlich eine dynamische IP-Adresse hast, wird dein Mailclient nicht mit dem Mailserver verbinden können. Ist logisch, da spamd sagt, dass du später wiederkommen sollst. Um das zu verhindern, kannst du entweder die Regeln entschärfen, dass du sagst, wenn der Host nicht in einer Blacklist steht, dann darf er durch (setze hierzu einfach eine '#' vor die zwei <spamd-white>-Zeilen), oder du erstellst eine weitere rdr pass-Regel, die einen anderen Port weiterleitet und stellst deinen Mailclient dann auf diesen Port ein (hier 8825). Beispiel:
rdr pass on $if proto tcp from any to $if port 8825 -> $mail_ip port 25
set limit table-entries 500000