10-05-05 09:05
Graylisting
piše ŽELJA BOROŠ
Neželjena pošta, spam, svima nam zadaje glavobolju. Svaka nova tehnika zaštite od spama samo je poluciklus na koji spameri brzo nalaze odgovore. Zamjene slova brojkama, namjerni tipfeleri, reklamni slogan kao slika... sve su to lukavstva za zaobilaženje filtera protiv spamova.
Kako se onda boriti protiv spama?
Spamerima je najvažnija brzina. Što više isporučenih poruka, na što više adresa, u što kraće vrijeme, pa će i zarada biti veća. Svjesni činjenice da ljudi mijenjaju adrese, primjenjuju nove filtere, da njihov adresar svakog trenutka sve manje vrijedi, spameri su neprestano u žurbi. Na tome se može graditi obrana. Spameri ne provjeravaju kod greške, tj. statusni kod koji im poslužitelji primatelja vraćaju. Kod je u pravilu pozitivan, tj. signalizira da je poruka prihvaćena i proslijeđena. No, u pojedinim situacijama poslužitelj nije spreman za prihvaćanje maila, što daje do znanja kodovima 4xx. Ovi kodovi poručuju pošiljatelju da dostavu pokušaju kasnije. Potpunu listu SMTP kodova možete naći u ovom članku.
Kad jednom "ispucaju" sve adrese s vaše domene (a to je događaj koji se mjeri sekundama, eventualno minutama), spameri ne pokušavaju ponovno, ili do novoga pokušaja protječe nekoliko sati ili dana. Upravo se na tome temelji novi način obrane od spama - graylisting.
Graylisting
Što su crne i bijele liste može se zaključiti iz samog imena. Siva lista (graylist), služi za privremenu "karantenu" IP adresa koje pokušavaju isporučiti e-poštu našem poslužitelju. U prvom razdoblju sva se pošta s te adrese odbija. Karantena traje kratko, 15 ili 25 minuta, a nakon toga se IP adresa prebacuje u bijelu listu i pošta se s nje prima određeno vrijeme, najčešće jedan dan.
Za razliku od spamerskog softvera, regularni poslužitelji su podešeni tako da se neisporučena pošta šalje ponovo dok ne nastupi definirani timeout (uobičajeno 3-5 dana). Razmak između pokušaja je najčešće petnaestak minuta.
Ova jednostavna razlika u načinu rada bit je ideje obrane putem graylistinga. Svaki regularni mail ("ham") nakon nekoliko pokušaja bit će uspješno isporučen, a nakon toga svaki sljedeći s te adrese neće se zadržavati. Kako spameri ne provjeravaju uspješnost isporuke, neće ni znati je li poruka isporučena, a njihov će softver krenuti na drugi niz adresa.
Mane i prednosti
Graylisting nije savršen. Glavna mu je mana očigledna, svaka će se poruka u početku odbiti, što može zasmetati u slučajevima kad je nužna hitnost isporuke. Problem ublažava pažljivo složena inicijalna bijela lista. Dodatna je nevolja što odbijajući poruke opterećujemo udaljene poslužitelje, što će eskalirati kad se mnogi počnu braniti graylistingom.
Druga mana je što spam ipak može proći zaštitu jer je istekao period karantene, a adresa spamera je završila na bijeloj listi. No bijela lista vrijedi samo 24 sata (ili koliko ste već odredili), pa jedan te isti spamer neće moći dugotrajno isporučivati neželjenu poštu. Također, moguće je njegovu IP adresu staviti u access listu sendmaila i trajno riješiti problem upornih spamera.
Treći i najveći problem je u tome što će se spameri neminovno prilagoditi novom sustavu zaštite. Spamerski softver samo treba malo dograditi, definirati da se svaki odbačeni mail kod kojega greška nije fatalna pokuša ponovno isporučiti. To bi srušilo temelj ovog sustava obrane, te će on u tom slučaju brzo zastarjeti.
Pozitivne strane primjene graylistinga ne treba više posebno isticati. Koliki će biti dobici ovisi o svakom poslužitelju pojedinačno, njegovoj konfiguraciji te prometu. No, može se reći da graylisting propusnost spama smanjuje od 60 do 80 posto, pa i bolje. Ako se pri tome rabe i klasični filtri (SpamAssassin, razor, pyzor, PureMessage itd.), postotak zaustavljanja spama može prijeći 95%, što će korisnici svakako zamijetiti i znati cijeniti. Trenutačno nema razloga da ne primijenite ovaj sustav, jer nakon primjene nema potrebe za daljim administriranjem, a instalacija je izuzetno jednostavna.
Instalacija
Graylisting se može primijeniti na svakom mail poslužitelju, no ovdje ćemo se ograničiti na CARNetov standard, sendmail. Iskoristit ćemo moćan filter ugrađen u sendmail, milter.
Milter koji ćemo rabiti "inventivno" se zove graymilter. Instalacija je jednostavna. Opisat ćemo postupak instalacije iz izvornog koda, koji se nalazi na adresi http://www.acme.com/software/graymilter/. Paketa za Debianovu distribuciju trenutačno nema, ali je dostupan paket postgrey za Postfix.
Postupak kompiliranja je standardan i jednostavan:
./configure & make & make install
Konfiguracija
Najprije treba sastaviti početnu bijelu listu. Kolegijalno upišite sve javne operatere u Hrvatskoj, što će spriječiti nepotrebno zadržavanje pošte. U najmanju ruku u datoteku je potrebno staviti CARNet. Unosi u datoteci su rasponi IP adresa (u CIDR notaciji):
161.53.0.0/16 # CARNet
193.198.0.0/16 # CARNet
195.29.150.0/8 # T-com
213.191.142.0/8 # Iskon
213.191.133.0/8 # Iskon
83.139.64.5 # X-net
83.139.64.12 # X-net
212.91.98.0/8 # Vipnet
212.91.97.0/8 # Vipnet
213.149.32.0/8 # Globalnet
217.14.208.0/8 # Vodatel
195.78.32.0/8 # Posluh
Navedeni su rasponi adresa naših ISP-ova, no popis nije potpun i valja ga prilagoditi lokalnim uvjetima i potrebama. Napomenut ćemo da je u bijelu listu dovoljno staviti samo onaj segment mreže gdje je Mail Exchanger (MX) poslužitelj, a ne cijeli IP raspon određenog ISP-a. Još je bolje staviti samo IP adresu MX poslužitelja, što je poželjno kod kabelskih i DSL operatera gdje su korisnička računala često zaražena virusima i spywareom.
Datoteku s bijelom listom možete nazvati bilo kako, recimo "graymilter_initial_whitelist" i postaviti je u /etc/mail. Naziv i mjesto datoteke podešava se u startup skripti.
Parametri
Izvršna datoteka graymilter prima nekoliko opcija:
-graytime seconds
Opcija određuje koliko će dugo IP adresa biti u karanteni, a default je 25 minuta (1500 sekundi)
-whitetime
Ovime se određuje vrijeme u kojemu je IP adresa označena kao sigurna, odnosno svaki mail s ove adrese neće biti zaustavljan u tom periodu.
-initialwhitelist file
Lokacija početne bijele liste. Popunite je uz pomoć uputa iz ovoga članka.
-user user
Korisnik pod čijom se prijavom vrti proces graymiltera. Ovo nije kritično; dovoljno je da je sendmailu dopušteno čitati početni graymilterov bijeli popis i njegov socket. U obzir dolaze korisnici smmsp, viruser/sweep, a na distribuciji Sarge najvjerojatniji je korisnik amavis.
-nodaemon|-X
Ova opcija određuje da se graymilter neće pokrenuti kao daemon, što može poslužiti kod debugiranja.
-socket
Putanja do graymilter socketa. Preporučamo /var/run/graymilter/graymilter.sock (ili neki kraći oblik).
Startup skripta
Isporučena startup skripta nije pogodna za operativne sustave Debian i Solaris, pa možemo prilagoditi amavisovu startup skriptu:
#!/bin/sh
# /etc/init.d/graymilter - start and stop the graymilter daemon
# Zeljko Boros <zelja@ravnica.ptfos.hr> Sun, 10 Apr 2005 20:07:32 +0200
set -e
if [ `uname -s` = "SunOS" ] ; then
PATH=/usr/bin:/sbin:/usr/sbin:/usr/ccs/bin:/usr/local/bin:/usr/local/sbin
MILTER=/usr/local/sbin/graymilter
else
PATH=/bin:/usr/bin:/sbin:/usr/sbin
MILTER=/usr/sbin/graymilter
fi
RUNDIR=/var/run/graymilter
MSOCK=$RUNDIR/graymilter.sock
WHITELIST=/etc/mail/graymilter_initial_whitelist
# Time in seconds (default 25 mins and 2 days, here 15 mins and 2 days)
GRAYTIME=900
WHITETIME=172800
USER=viruser
test -x $MILTER || (echo "CN: $MILTER is missing"; exit 2)
killkillkill() {
# time to kill
if [ `uname -s` = "SunOS" ] ; then
pkill -f $MILTER >/dev/null 2>&1 || true
else
pkill -u $USER $MILTER >/dev/null 2>&1 || true
fi
sleep 1
rm -fr $RUNDIR
}
case $1 in
start)
killkillkill
if [ ! -d $RUNDIR ] ; then
mkdir -p $RUNDIR
chown $USER:$USER $RUNDIR
chmod 700 $RUNDIR
fi
$MILTER -graytime $GRAYTIME -whitetime $WHITETIME -initialwhitelist \
$WHITELIST -user $USER $MSOCK
if [ $? -ne 0 ] ; then
echo "CN: graymilter start failed! Look at logs for details."
exit 4
fi
sleep 1
;;
stop)
killkillkill
;;
restart)
killkillkill
exec $0 start
;;
*)
echo "Usage: `basename $0` (start|stop|restart)" >&2
exit 1
;;
esac
exit 0
Konfiguracija sendmaila
Ostaje sustav povezati sa sendmailom. To je jednostavna operacija. Upišite sljedeći redak u sendmail.mc:
INPUT_MAIL_FILTER(`graymilter',`S=local:/var/run/graymilter/graymilter.sock,
T=S:4m;R:4m')
Pokrenite "make -C /etc/mail" ako rabite Linux, a na Solarisu je potreban nešto složeniji naredbeni redak
m4 -D_CF_DIR_=/usr/share/sendmail/sendmail.cf/ /usr/share/sendmail/sendmail.cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Provjera logova
Nakon uspješnog instaliranja, podešavanja i pokretanja, u log datoteci sendmaila bi se trebalo vidjeti zapis poput ovog:
Apr 17 10:36:34 ravnica.ptfos.hr graymilter: [ID 175536 mail.info] reading
/etc/mail/graymilter_initial_whitelist
Da graymilter radi ispravno vidi se po sljedećim zapisima u mail logu:
Apr 17 10:41:48 ravnica.ptfos.hr sendmail[18233]: [ID 801593 mail.info] j3H0fWfC
018233: Milter: from=<sneed_do@tin.it>, reject=450 4.7.1 Please try again later.
Svaki klijent koji nije u bijeloj listi dobija poruku 4.7.1 Please try again later, a njegova se adresa stavlja na sivi popis. Svake tri minute pregledavaju se IP adrese kojima je istekla karantena, te se one smještaju na bijeli popis.
Apr 17 10:44:21 ravnica.ptfos.hr graymilter: [ID 722812 mail.info] graduating 3 addresses to whitelist
Poslije toga sve se poruke s te IP adrese primaju bez zadržavanja.
Apr 17 10:50:15 ravnica.ptfos.hr graymilter: [ID 532204 mail.info] 123.456.789.123 is whitelisted ? accepting
Novi sustav za obranu od sveprisutnog spama je spreman za rad. Sretno!
|