Sisällysluettelo

Harmaalistauksen toteutus IKI:ssä (grossd konfiguraatio)

Tällä sivulla kerrotaan miten ja miksi grossd on konfiguroitu iki:ssä sekä esitetään miten sen asentaminen käyttöön tapahtuu esim. NetBSD, Linux ja MacOSX-palvelimissa.

Tämä sivu on tarkoitettu sähköpostijärjestelmien ylläpitäjille avuksi ja vinkiksi. Tavallisen käyttäjän ohjeita sekä taustatietoja löytyy mm. FAQ-sivulta Harmaalistaa estolistatut lähettäjät.

Tältä sivulta löytyy myös asennusohjeet ympäristöihin NetBSD ja Sendmail, Linux ja Postfix ja MacOSX ja Postfix.

Johdanto

Tämä sivu kuvaa konfiguraatiota 18.5.2008, voi olla että sen jälkeen sitä on hienosäädetty ilman että tätä FAQ-sivua on muistettu päivittää.

Lisätietoja itse Grossista löytyy osoitteesta http://code.google.com/p/gross/.

Käytössä olevat estolistat

IKI:ssä on käytössä seuraavat estolistat. Näiden listojen perusteella ei siis estetä postia kokonaan, listoilla oleviin sovelletaan harmaalistausta. Oikea posti tulee siis näistäkin paikoista läpi mutta pienellä viiveellä.

dnsbl = mXXXXu.zen.dq.spamhaus.net # maksullinen, noin 0.10e/jäsen/vuosi
dnsbl = bl.spamcop.net
dnsbl = combined.njabl.org
dnsbl = dnsbl.sorbs.net

Käytössä olevat estolistat on havaittu hyvin toimiviksi ja käytännössä luotettaviksi.

Grossd.conf

Iki:n palvelimissa konfiguraatiota on muutettu oletuksesta seuraavasti oletusasetuksista.

grey_delay = 180

Tämä asetus määrää että ensimmäisen harmaalistatun yrityksen jälkeen voi onnistua vasta 3 minuutin kuluttua. Oletusarvo oli ainakin joskus 10 sekuntia joka on turhan lyhyt – kuulemma jotkut spämmiohjelmat yrittävät parin sekunnin välein jonkin aikaa jos onnistuisivat pääsemään läpi.

number_buffers = 13
rotate_interval = 7200

IKI:ssä halutaan pitää sallittu harmaalistaus (eli onnistunut uudelleen yritys) voimassa noin 24h, sen jälkeen viestit harmaalistataan uudelleen. Nämä asetukset tarkoittavat että tiedot ovat voimassa noin 13*2h ajan eli vähintään 24h. Grossissa on käytössä kiertävä lista filtteripuskureita joilla aikamääre saadaan aikaan.

sync_listen = TAMAKONE.iki.fi
sync_peer = TOINENMX.iki.fi

Huom: Linux-serverissä pitää käyttää ip-osoitetta tässä asetuksessa eikä saman koneen nimeä, koska Linux mäppää nimen localhostiksi eikä ip-osoitteeksi, jolloin yhteys ei ole auki toisesta koneesta.

Tämä asetus aktivoi ja konfiguroi kahden postipalvelimen välisen synkronoinnin joka on ehdottomasti suositeltava asetus jos samalla domainilla on useita MX-palvelimia, kuten iki:llä on kaksi. Tällä hetkellä gross tukee vain kahden palvelimen välistä synkronointia. Tämä tarkoittaa että palvelimet jakavat tietoja keskenään eli kun joku asia on kerran katsottu, niin sitten molemmat palvelimet tietävät sen.

statefile = /var/db/grossd/grossd.state

Tämä asetus aktivoi tilatiedoston, eli jos grossd:n käynnistää uudelleen tms niin se ei kadota tilatietojaan vaan löytää ne täältä. Tilatiedoston käyttöönotto vaati tilatiedoston luomisen ensin käsin, esim: mkdir /var/db/grossd; chown nobody /var/db/grossd; grossd -C.

protocol = milter

Tämä laittaa milter-rajapinnan käyttöön. IKI:ssä käytetään toistaiseksi Sendmailia MTA:na ja se keskustelee suodattimien kanssa milter-rajapinnalla.

milter_listen = inet:5523@localhost

Tämä kertoo missä portissa gross kuuntelee milter-pyyntöjä.

Sendmail.cf

Sendmailissa milter-rajapinta on konfiguroitu käyttöön seuraavilla asetuksilla. Tämä on tehty IKIgross.mc -tiedostoon josta makroilla sitten genetoiruu IKIgross.cf -tiedosto joka on se ”tunnetusti kauhea” sendmail.cf. Mc-tiedostot ovat onneksi aika simppeleitä.

INPUT_MAIL_FILTER(`Gross', `S=inet:5523@localhost, T=C:10m;R:5m')

Tässä S= -asetukset ovat siis samat kuin grossille annetut. T= timeout -asetukset oletuksena olivat iki:ssä turhan lyhyitä jolloin hidas DNS-vastaus tms saattoi aiheuttaa timeoutteja. Yllä annetut arvot ovat aika konservatiivisia varmuuden vuoksi vielä testikäyttövaiheessa, yhteyden avaaminen milteriin 10 minuuttia ja milter-vastauksen odottelu 5 minuuttia.

Jos sendmail havaitsee että milter ei vastaa, se lopettaa tietojen kyselemisen sieltä, eli jos grossd menee jostain syystä rikki, niin sendmail toimii sitten ilman suodatusta.

Grossd:n asentaminen

IKI:ssä on käytössä NetBSD käyttöjärjestelmä. Alempana myös Linux-ohjeet.

NetBSD ja Sendmail

Grossd:n asennusoptiot

IKI:ssä käytettiin seuraavaa configure-komentoa:

CFLAGS="-g -O -Wall" CPPFLAGS="-I/usr/pkg/include -DFD_SETSIZE=2048" LDFLAGS=-L/usr/pkg/lib ./configure --enable-milter

Optioiden selitys:

FLAGS=”-g -O -Wall”: Debug-optio päälle jotta mahdollista coredumppia voi katsoa debuggerilla. Kaikki varoitukset päälle huvin vuoksi.

CPPFLAGS=-I/usr/pkg/include ja LDFLAGS=-L/usr/pkg/lib: IKI käyttää NetBSD -käyttöjärjestelmää tällä hetkellä, jonka lisäkirjastot ovat hieman oudossa paikassa joka pitää kertoa configurelle.

CPPFLAGS=”-DFD_SETSIZE=2048” tarvittiun koska muuten NetBSD:n selectin bittimaski on maksimissaan 256 filedescriptoria ja iki:ssä grossd-prosessin tiedostomäärä on asetettu korkeammaksi jotta varmasti kaikki yhteydet mahtuu toimimaan.

–enable-milter: Tämä kytkee milter-rajapinnan tuen päälle.

Grossd:n vaatimien kirjastojen asennus

Grossd tarvitsee libmilter (Sendmailin kansa) ja libcares (asynkroniset nimipalvelukutsut) -kirjastot toimiakseen.

NetBSD:ssä libmilter pitää myös kääntää isommalla FD_SETSIZE -optiolla jotta suuri määrä avoimia milter-socketteja toimii kunnolla:

cd /usr/pkgsrc/mail/libmilter; CPPFLAGS="-DFD_SETSIZE=2048" make update

/etc/rc.d/grossd (NetBSD)

IKI:n netbsd-koneissa on käytössä seuraava käynnistysscripti grossd:lle.

Huomioitavaa on ulimit -n 2048 joka kasvattaa prosessin maksimi tiedostomäärän oletuksena olevasta 64:n rajoituksesta reilusti isommaksi. Asiakas sendmail-prosesseja saattaa olla yhtäaikaa 700+ kpl ajossa serverissä ja muitakin verkkoyhteyksiä (DNS-kyselyt) tarvitaan.

#!/bin/sh
#
# NetBSD startup script for grossd
#
# PROVIDE: grossd
# REQUIRE: named
# BEFORE: mail

$_rc_subr_loaded . /etc/rc.subr

name="grossd"
rcvar=$name
command="/usr/local/sbin/${name}"
required_files="/usr/local/etc/grossd.conf"

grossd_chdir=/root/grossd

ulimit -n 2048

extra_commands="statistics"
statistics_cmd=grossd_statistics
grossd_statistics()
{
telnet -4 localhost 5522 | grep Grossd
}

load_rc_config $name
run_rc_command "$1"

# EOF

OpenSUSE Linux 10.3 ja Postfix-maileri

Nämä ohjeet saattavat toimia jossain toisessakin Linux-variantissa. Imuroi ensin, käännä ja asenna ensin c-ares -kirjasto ja grossd. Editoi sitten ylläolevien vinkkien mukaan grossd:n konfiguraatio-tiedosto haluamallasi tavalla. Konfiguroi Postfix laittamalla main.cf tiedostoon seuraavanlainen asetus:

...
smtpd_recipient_restrictions = 
      permit_mynetworks
      reject_unauth_destination
      check_policy_service inet:127.0.0.1:5525
...

Laita sitten seuraava scripti tiedostoon /etc/init.d/grossd

#!/bin/sh
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
# 
### BEGIN INIT INFO
# Provides:          grossd
# Required-Start:    $network
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: grossd Grossd
# Description:       Grossd
#       Intelligent Greylisting
### END INIT INFO

grossd_BIN=/usr/local/sbin/grossd
test -x $grossd_BIN || { echo "$grossd_BIN not installed"; 
	if [ "$1" = "stop" ]; then exit 0;
	else exit 5; fi; }
. /etc/rc.status
rc_reset

case "$1" in
    start)
	echo -n "Starting grossd "
	/sbin/startproc $grossd_BIN
	rc_status -v
	;;
    stop)
	echo -n "Shutting down grossd "
	/sbin/killproc -TERM $grossd_BIN
	rc_status -v
	;;
    restart)
	$0 stop
	$0 start
	rc_status
	;;
    status)
	echo -n "Checking for service grossd "
	/sbin/checkproc $grossd_BIN
	rc_status -v
	;;
    *)
	echo "Usage: $0 {start|stop|status|restart}"
	exit 1
	;;
esac
rc_exit

Aseta grossd käynnistymään komennolla insserv grossd ja sen jälkeen käynnistä grossd ja postfix uudelleen /etc/init.d/grossd start ja /etc/init.d/postfix restart. Kokeile että kaikki toimii OK.

(5.9.2008 haa, thanks to jake)

Mac OSX ja postfix

Kokeiltu OSX 10.5.8, toiminee client + server uudemmatkin.

Grossd asentaminen OSX:ään

Asenna macports -paketista c-ares kirjasto:

port install c-ares

Käännä grossd seuraavilla asetuksilla (oletuksena että kehitystyökalut XCode on asennettu):

CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" ./configure --prefix=/opt/grossd
make
sudo make install

Optioiden selitys: CPPFLAGS ja LDFLAGS kertoo mistä löytyy c-ares-kirjasto. –prefix sijoittaa kaiken /opt/grossd:hen asennettaessa. Ajatuksena tässä on asentaa grossd /opt/grossd:hen erikseen kaikesta muusta ylläpidon helpottamiseksi.

Tällöin grossd:n konfiguraatio löytyy tiedostosta /opt/grossd/etc/grossd.conf.

Grossd automaattinen käynnistys OSX:ssä

Luo tiedosto /Library/LaunchDaemons/com.grossd.server.plist ja laita sinne seuraavat määritykset:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Debug</key>
	<false/>
	<key>KeepAlive</key>
	<true/>
	<key>Label</key>
	<string>com.grossd.server</string>
	<key>ProgramArguments</key>
	<array>
		<string>/opt/grossd/sbin/grossd</string>
		<string>-d</string>
	</array>
</dict>
</plist>

Laita tiedosto rootin omistukseen:

sudo chown root /Library/LaunchDaemons/com.grossd.server.plist

Aja sitten komento

sudo launchctl load -w /Library/LaunchDaemons/com.grossd.server.plist

jolloin prosessin pitäisi käynnistyä automaattisesti koneen bootissa.

Seuraavalla komennolla voit kokeilla onko grossd toiminnassa normaalisti:

telnet localhost 5522

sen pitäisi tulostaa statustietoja. Statustiedot voi katsoa muutenkin ajoittain jos haluaa seurata toimintaa.

Pysäyttäminen onnistuu komennolla

sudo launchctl unload -w /Library/LaunchDaemons/com.grossd.server.plist

Postfix OSX:ssä

Voit käyttää systeemin mukana tulevaa postfixiä tai asentaa oman macports-paketista. Konfiguroi ensin postfix toimimaan muuten haluamallasi tavalla oikein.

Laita postfixin main.cf tiedostoon seuraava asetus:

...
smtpd_recipient_restrictions =
      permit_mynetworks
      reject_unauth_destination
      check_policy_service inet:127.0.0.1:5525
...

Ja käynnistä postfix uudelleen.

Lokiin (/var/log/system.log ellei muuta konfiguroitu) pitäisi alkaa tulla tällaisia rivejä per maili normaalitapauksissa (a=trust tarkoittaa että kohdetta ei harmaalistattu):

Nov  6 14:55:43 hostname com.grossd.server[31928]: Sun Nov  6 14:55:43 2011 
#f070d000: a=trust d=173 w=0 c=212.16.98.50 s=XXXX@EXAMPLE.iki.fi r=XXXX@EXAMPLE.com 
h=EXAMPLE.iki.fi

Seuraavan laisia tulee taas mustalistatuista kohteista joita sitten harmaalistataan:

Nov  6 15:00:48 hostname com.grossd.server[31928]: Sun Nov  6 15:00:48 2011 
#f070d000: a=greylist d=49 w=1 c=218.147.XXX.XXX s=XXXX@ihaa.com r=XXXX@ihaa.com 
h=?????? m=bl.spamcop.net+1