Mój serwer pocztowy działa od jakiegoś czasu na dynamicznym IP (dobre bo tanie…) i przeważnie nie ma z tym problemów. Postarałem się jak mogłem ustawiając SPF’a i DomainKeys aby uwiarygodnić go u większych dostawców poczty.

Niestety wszystko to diabli biorą w momencie gdy wygasa mi leasse DHCP i dostaję nowe IP po jakimś spamerze/zombiaku. Wisi takie w 2-3 większych RBL’ach i o dostarczaniu poczty można zapomnieć. Miło gdy jeszcze zdalny MTA zechce odesłać zwrotkę “zróbta coś bo wisisz w RBL’u takim a takim…”, ale zdecydowania niefajnie gdy wysyłasz pocztę a ona od razu leci do /dev/null :(

rblcheck

Poszperałem trochę i znalazłem fajne narzędzie aka rblcheck, które sprawdza domyślnie kilka RBL’i. Można też dodać kolejne jako parametry. Wygląda to mniej więcej tak:

$ rblcheck 89.76.116.114
89.76.116.114 not listed by sbl.spamhaus.org
89.76.116.114 not listed by xbl.spamhaus.org
89.76.116.114 not listed by pbl.spamhaus.org
89.76.116.114 not listed by bl.spamcop.net
89.76.116.114 not listed by list.dsbl.org
89.76.116.114 not listed by dnsbl.njabl.org
89.76.116.114 listed by dul.dnsbl.sorbs.net

Jak widać IP wisi w jednym z RBL’i.

Można odpytać RBL’e o konkretny powód znalezienia się na liście (o ile funkcja taka jest obsługiwana):

$ rblcheck 89.76.116.114 -t
89.76.116.114 not listed by sbl.spamhaus.org
89.76.116.114 not listed by xbl.spamhaus.org
89.76.116.114 not listed by pbl.spamhaus.org
89.76.116.114 not listed by bl.spamcop.net
89.76.116.114 not listed by list.dsbl.org
89.76.116.114 not listed by dnsbl.njabl.org
89.76.116.114 listed by dul.dnsbl.sorbs.net: \
Dynamic IP Addresses See: http://www.sorbs.net/lookup.shtml?89.76.116.114

W tym przypadku nie było się czym przejmować. Ta lista zawiera wszystkie IP dynamiczne, więc nic dziwnego że nasze dynamiczne też tam jest. Nawet jeżeli ktoś będzie korzystać z tej listy to raczej nie na zasadzie odcinania się od dynamicznych IP, ale w ramach punktowania wiarygodności danego adresu. Z naszej strony za bardzo nie jesteśmy w stanie nic z tym zrobić (bo nie zamierzamy dopłacić za statyczne IP), więc tak musi być.

Automatyzacja

Najpierw zainstalowałem rblcheck‘a:

sudo apt-get install rblcheck

Później w /usr/local/sbin/check_rbls.sh utworzyłem skrypt sprawdzający kilka interesujących mnie RBL’i:

#!/bin/bash

IP=`host mojadomena.pl | head -n1  | awk '{print $4}'`
RBLCHECK="rblcheck -t -s dul.dnsbl.sorbs.net \
        -s abuse.rfc-ignorant.org \
        -s postmaster.rfc-ignorant.org \
        -s dsn.rfc-ignorant.org \
        -s ix.dnsbl.manitu.net \
        -s rhsbl.ahbl.org"

$RBLCHECK $IP | awk '{if($2 != "not") print $0 }'

Skrypt ten podlinkowałem aby uruchamiał się co godzinę:

ln -s /usr/local/sbin/check_rbls.sh /etc/cron.hourly/

Dzięki temu prostemu skryptowie jeżeli dostanę IP wiszące w tych kilku RBL’ach to stosunkowo szybko (maksymalnie w ciągu godziny) się o tym dowiem. Jeżeli natomiast IP będzie czyste to nie będę dostawać zbędnych maili. Do tego listę sprawdzanych RBL’i można bardzo łatwo powiększyć o kolejne w razie takiej potrzeby.