Noget af det mest irriterende på internettet i dag er naturligvis spam. Som almindelig bruger generer det åbenlyst, fordi det forstyrrer og forvirrer. Som server-administrator er det også stærkt generende, fordi det lægger beslag på systemressourcer og tvinger dig til at sætte filtre og regler op. Som server-administrator er det ens opgave at sænke besværet for brugeren så meget som overhovedet muligt, men også at mindske ressourceforbruget på systemerne så meget som muligt. Traditionelle spambekæmpelsessystemer kan være tunge, da de typisk kræver en masse tekstanalyse på de indkomne mail. Vores tilgang til spambekæmpelse er at stoppe spammail så hurtigt som muligt og allerhelst afvise spam inden det overhovedet bliver afleveret på serveren. Dette lyder som en vanskelig opgave, men over 99% af al spam kan afvises, inden at serveren overhovedet accepterer mailen, og altså inden den krævende tekstanalyse begynder.

Sagt på en anden måde baserer denne metode sig ikke på hvad der står, men mere på hvem der siger det.
I disse eksempler anvender vi Postfix, da det er en meget nem og venlig mailserver, som er nem at konfigurere til de ting, vi ønsker her.
Pænt goddag: HELO
Den kontrol, der kan fjerne mest spam, og som er i særklasse den billigste, er kontrol af HELO. Derfor tager vi den først. Kontrollen har forskellige enkeltdele.
Fra main.cf
smtpd_helo_restrictions =
check_helo_access pcre:/etc/postfix/helo_ip.pcre,
check_helo_access hash:/etc/postfix/helo_access,
reject_non_fqdn_hostname,
reject_unknown_hostname
Første check. Her ser vi på om spammeren forsøger at bruge en ip-adresse som HELO-navn. Selvom det er lovligt ifølge RFC’erne og MUA’er benytter det, så er der ingen lovlig grund til at en server skulle anvende en ip-adresse som HELO-navn. Indhold af helo_ip.pcre:
/^\[[0-9]+(\.[0-9]+){3}\]$/ REJECT To spam or not to spam. That is the question.
HELO-navne indeholder også andre fantasifulde ting. Det er normalt at visse spammere vil forsøge at bruge dine egne domæner som HELO. Du bør have styr på alle, der sender mail ud i dit navn via andre midler. Derfor kan du trygt afvise mail med HELO fra dit eget domæne. Andre gange benytter spammerne maskinernes hostnavne som HELO, men da spamrobotterne ofte ikke er lavet til at stå på det åbne internet, har de oftest domæner som ikke er gyldige domæner, eller er domæner for ISP’er som er notoriske for ikke at stoppe spam. Dette kan bruges mod spammerne.
Eksempel på helo_access:
## Egne domaener.
casalogic.dk REJECT No, you dont belong to this domain.
## Lokale domaener gider vi ikke tale med
lan REJECT Your mailserver is incorrectly configured
local REJECT Your mailserver is incorrectly configured
int REJECT Your mailserver is incorrectly configured
localdomain REJECT localdomain? really? are you sure? Maybe you should check /etc/hosts.
localhost REJECT localhost? really? are you sure? Maybe you should check /etc/hosts.
## Lokale domaener gider vi ikke tale med, sandsynligvis Windoze-zombier
workgroup REJECT Go away. This is not your private network.
adsl REJECT Go away. This is not your private network.
windowsxp REJECT Go away. This is not your private network.
winxp REJECT Go away. This is not your private network.
computer REJECT Go away. This is not your private network.
home REJECT Go away. This is not your private network.
link REJECT Go away. This is not your private network.
static REJECT Go away. This is not your private network.
clients REJECT Go away. This is not your private network.
client REJECT Go away. This is not your private network.
dhcp REJECT Go away. This is not your private network.
## Kendte Spam-ISPer
tnet.dp.ua REJECT Spam me once, shame on you. Spam me twice, shame on me.
dialup.alkar.net REJECT Spam me once, shame on you. Spam me twice, shame on me.
ttnet.net.tr REJECT Spam me once, shame on you. Spam me twice, shame on me.
kubinter.ru REJECT Spam me once, shame on you. Spam me twice, shame on me.
tenet.odessa.ua REJECT Spam me once, shame on you. Spam me twice, shame on me.
ufamts.ru REJECT Spam me once, shame on you. Spam me twice, shame on me.
unnet.ru REJECT Spam me once, shame on you. Spam me twice, shame on me.
pool.ukrtel.net REJECT Spam me once, shame on you. Spam me twice, shame on me.
mtnl.net.in REJECT Spam me once, shame on you. Spam me twice, shame on me.
revip2.asianet.co.th REJECT Spam me once, shame on you. Spam me twice, shame on me.
Med andre ord, hvis afsenderen HELO’er med et af disse domæner, så kan vi afvise med en permanent fejl.
Endelig er der også åbenlyse HELO-fejl. De består normalt i at domænet ikke er lovligt FQDN, eller er lovligt FQDN, men ikke findes. Disse er indbyggede Postfix-kontrollerne.
Dårligt rygte
Hvis spammeren ikke er faldet for disse fælder, kan vi begynde at grave lidt i det.
Fra main.cf:
smtpd_recipient_restrictions =
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org,
check_policy_service unix:private/policy
check_policy_service inet:127.0.0.1:10023
Første trin er naturligvis, at vi ikke vil acceptere mail hvis den ikke er til os. Dette er en helt normal ting. Næste er at høre en RBL ad, om afsenderen er kendt. I bekræftende tilfælde kan vi afvise umiddelbart. Endelige har vi nogle Policy-kontroller. “Unix-socket” policy skal styres fra master.cf. Vi har en SPF-kontrol, fra master.cf:
policy unix - n n - - spawn
user=nobody argv=/usr/local/sbin/postfix-policyd-spf
Dette kontrollerer om afsenderserveren er tilladt via DNS SPF records. SPF (Sender Policy Framework) er en metode i DNS til at angive hvilke servere eller netværk, der må udsende mail på vegne af det pågældende domæne. Dette er i teorien en meget effektiv metode til at blokere spamzombieer. Desværre er der ikke ret mange af domænerne, der har SPF-records, og vi kommer heller aldrig til at opnå, at alle domæner vil have SPF. Derfor skal der mere til.
En “Inet” policy er en selvstændig process. Her benytter vi Postgrey, en greylisting server, som virker rigtigt fint. Greylisting er en måde at teste, om afsenderserveren er en ægte mailserver. Spamzombier vil ofte ikke prøve igen senere, hvis der opstår en fejl. Dette kan vi udnytte. Første gang en server forsøger at sende til os, afviser vi forbindelsen med en midlertidig fejl. Kommer serveren igen lidt senere og forsøger at aflevere mailen, så er det muligvis godt nok.
Disse kontroller er meget effektive og tager over 99% af alt spam. Desværre er der på det seneste kommet metoder til at omgå alle disse kontroller. Vi vil prøve at rode bod på det ved at skrive vores egen policy. Se mere næste indlæg.


