Hlavní navigace

Sendmail jako antivirus a antispam

Petr Macek 23. 10. 2008

V dnešním dílu jsem se dál chtěl věnovat šedé teorii, ale podle reakcí v diskuzi jsem se nakonec rozhodl jinak. Teorii si necháme na příště a ukážeme si praktické využití sendmailu. Často se s tímhle řešením setkávám. Představte si následující situaci - v LAN máme poštovní server: Exchange či Novell Groupwise.

Ten nechceme z nějakých důvodů (obzvláště starší verze Exchange) vystavovat přímo do internetu. Také antivirové a antispamové možnosti nejsou nejlepší (nebo nejlevnější). Proto před něj do internetu vystavíme sendmail, který bude provádět antivirovou a antispamovou ochranu, použit bude antivir ClamAV a Spamassassin. Použijeme tzv. miltery. Vyčištěnou poštu pak předáme na vnitřní poštovní server.

Řešení si předvedeme na FreeBSD, můžete použít třeba aktuální verzi 7.0, ale stejně funkční bude i na starších 6.x. Lan síť má adresy 192.168.1.0/24, vnitřní pošťák má 192.168.1.10. Doména je firma.cz, MX záznam ukazuje na vnější rozhraní našeho FreeBSD routeru.

Konfigurace sendmailu se nachází v adresáři /etc/mail. Najdeme tu několik připravených souborů. Bývá zvykem, aby byl hlavní konfigurační soubor pojmenován jako hostname s příponou mc. V našem případě tedy router.firma.cz.mc. Tady zmíním dobře připravený Makefile ve FreeBSD. Projděte si jej, spoustu toho udělá za vás. Třeba při změně access, virtusertable není potřeba ručně spouštět například

$ /usr/sbin/makemap hash access.db < access

Zadejte jen make. Tím i začneme a make vytvoří výše zmiňované konfigurační soubory.

Do souboru access povolíme stroji 192.168.1.10 pou­žívat fbsd server jako relay:

192.168.1.10                     RELAY

Do souboru /etc/mail/router.firma.cz.mc přidáme následující řádky. Jsou to právě výše zmíněné miltery. Přidejte je mezi ostatní řádky define:

dnl pridame milter clamav
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m')dnl
dnl pridame milter spamassassin
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')

dnl dalsi parametry nam urcuji:
dnl S - socket
dnl F - jak se chovat pri vypadku filtru, mame nastaveno, ze posta pujde dal
dnl T - timeouty pro praci s milterem
dnl      S - timeout pro odesílání dat ze sendmailu do filtru
dnl      R - timeout pro čtení z filtru
dnl      E - celkový timeout do odeslání znaku konce zprávy filtru

dnl nasledujici dve makra vyzaduji miltery, vice se doctete v dokumentaci milteru
define(`confMILTER_MACROS_CONNECT',`b, j, _, {daemon_name}, {if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_ENVRCPT',`r, v, Z')dnl
dnl filtry pouzit pro prichozi SMTP zpravy
define(`confINPUT_MAIL_FILTERS', `clmilter,spamassassin')

Ještě upravíme soubor /etc/mail/mailertable. Tam nastavíme, co s poštou pro doménu firma.cz. Budeme ji dál předávat na vnitřní pošťák. Je zde vyžadováno doménové jméno. Samozřejmě musí tedy exchange.firma.cz ukazovat na 192.168.1.10. Pokud nemáme rozběhaný named, stačí přidat záznam do  /etc/hosts.

firma.cz               smtp:exchange.firma.cz

ClamAV i Spamassassin nainstalujeme z FreeBSD portů. Jak se instalují programy z portů zde nebudeme rozebírat, přečtěte si třeba starší článek. Můžeme použít i předkompilované balíky, ale ty mají pevně dané závislosti a nemáme možnost si je přizpůsobit jako při kompilaci.

Začneme antivirem:

$ cd /usr/ports/security/clamav
$ make install clean

Objeví se malé menu, navíc zaškrtněte milter.

Tím máme nainstalovaný antivir. Konfiguraci najdeme v /usr/local/etc/clamav.conf. Tam si můžete upravit třeba velikost a umístění log souborů, ale jinak je konfigurace pro nás připravena dobře.

Podobným způsobem doinstalujeme spamassassin. Začneme rovnou milterem, ten si při instalaci zařídí vlastní spamassassin sám.

$ cd /usr/ports/mail/spamass-milter
$ make install clean

V menu spamassassinu si můžete vybrat další komponenty (např. razor). Nespouštím spamd jako root, takže nezaškrtnu první volbu ( AS_ROOT).

Konfiguraci najdeme v /usr/local/etc/mail/spamassassin. Trochu si poupravíme soubor  local.cf:

rewrite_header Subject *****SPAM*****
report_safe 1
trusted_networks 192.168.1.
required_score 4.50
use_bayes 1
bayes_auto_learn 1
dns_available yes
bayes_auto_learn_threshold_spam 8.00
bayes_path /var/spool/spamd/bayes
bayes_file_mode 0777

whitelist_from uzivatel@jinde.cz
whitelist_from *@domena.cz

Na konci souboru je ukázka, jak udělat výjimku a některé odesílatele netestovat. To se může hodit u některých automaticky rozesílaných e-mailů. Zpočátku doporučuji nechat bayes nastavený mírněji a až se po pár stovkách spamů něco naučí, zvýšit jeho přísnost. Používám 4.0 pro označení zprávy jako spam a 6.0 pro diskartování e-mailu (záznam v /etc/rc.conf, uvidíte níže). Ale toto se může lišit dle vaší domény, množství a typu spamů.

Celkem se nainstalovalo pět démonů – clamd, freshclam, clamav-milter, spamd a spamass-milter. Teď řekneme systému, že má při startu systému tyto démony spustit. Stačí je zapsat do /etc/rc.conf. Ještě přidáme některé parametry:

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_milter_enable="YES"
clamav_milter_flags="-q"
spamd_enable="YES"
spamd_flags="-u spamd -H /var/spool/spamd"
spamass_milter_enable="YES"
# diskartuj zpravy, ktere maji hodnoceni 8 a vice
spamass_milter_localflags="-r 8.0"
sendmail_enable=”YES”

Zbývá vše spustit:

$ cd /usr/local/etc/rc.d
$ ./clamav-clamd start
$ ./clamav-freshclam start
$ ./clamav-milter start
$ ./sa-spamd start
$ ./spamass-milter start

$ cd /etc/mail
$ make stop
$ make
$ make install
$ make start

A tím je hotovo. Vše důležité se pak dozvíte v souboru /var/log/maillog. Toto řešení můžeme dál rozšířit třeba o RBL listy a další filtry. Osobně rád používám spamilter ( /usr/ports/mail/spamilter). Na RBL se podíváme příště.

Pokud se objeví nová verze antispamu nebo antiviru (nebo některého ze závislých balíků), můžeme díky systému portů a aplikaci portupgrade snadno provést aktualizaci. Přístí aktualizace si můžeme usnadnit zapsáním voleb instalačních menu do souboru /usr/local/etc/pkgtools.conf. To je podrobně rozebíráno v našem starším článku.

Jak poštovní server pracuje si můžeme zkontrolovat pomocí:

$ tail -f /var/log/maillog

Takhle třeba vypadá zablokovaný spam, je krásně vidět, jak procházel miltery a s jakým výsledkem. Při použití třeba amavisd, už takhle pěkný log neuvidíte:

Oct 18 20:14:20 mail sm-mta[53429]: m9IIEE2F053429: from=<pharren@mwdh2o.com>, size=900, class=0, nrcpts=1, msgid=<19677.willie@annamari>, proto=ESMTP, daemon=IPv4, relay=201-95-133-205.dsl.telesp.net.br [201.95.133.205]
Oct 18 20:14:20 mail sm-mta[53429]: m9IIEE2F053429: Milter add: header: X-Milter: Spamilter (Reciever: mail.firma.cz; Sender-ip: 201.95.133.205; Sender-helo: 201-95-133-205.dsl.telesp.net.br;)
Oct 18 20:14:20 mail sm-mta[53429]: m9IIEE2F053429: Milter add: header: X-Virus-Scanned: ClamAV 0.93.3/8443/Sat Oct 18 08:08:31 2008 on mail.firma.cz
Oct 18 20:14:20 mail sm-mta[53429]: m9IIEE2F053429: Milter add: header: X-Virus-Status: Clean
Oct 18 20:14:20 mail spamd[26188]: spamd: connection from localhost [127.0.0.1] at port 50909
Oct 18 20:14:20 mail spamd[26188]: spamd: processing message <19677.willie@annamari> for root:1006
Oct 18 20:14:23 mail spamd[26188]: spamd: identified spam (27.5/4.0) for root:1006 in 3.2 seconds, 1488 bytes.
Oct 18 20:14:23 mail spamd[26188]: spamd: result: Y 27 - BAYES_99,FH_HELO_EQ_D_D_D_D,HELO_DYNAMIC_HCC,HELO_DYNAMIC_IPADDR2,HTML_MESSAGE,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E8_51_100,RAZOR2_CHECK,RCVD_IN_PBL,RDNS_DYNAMIC,TVD_RCVD_IP,URIBL_AB_SURBL,URIBL_BLACK,URIBL_JP_SURBL,URIBL_OB_SURBL,URIBL_RHS_DOB,URIBL_SC_SURBL,URIBL_WS_SURBL scantime=3.2,size=1488,user=root,uid=1006,required_score=4.0,rhost=localhost,raddr=127.0.0.1,rport=50909,mid=<19677.willie@annamari>,bayes=1.000000,autolearn=spam
Oct 18 20:14:23 mail sm-mta[53429]: m9IIEE2F053429: Milter add: header: X-Spam-Flag: YES
Oct 18 20:14:23 mail sm-mta[53429]: m9IIEE2F053429: Milter add: header: X-Spam-Status: Yes, score=27.5 required=4.0 tests=BAYES_99,FH_HELO_EQ_D_D_D_D,\n\tHELO_DYNAMIC_HCC,HELO_DYNAMIC_IPADDR2,HTML_MESSAGE,RAZOR2_CF_RANGE_51_100,\n\tRAZOR2_CF_RANGE_E8_51_100,RAZOR2_CHECK,RCVD_IN_PBL,RDNS_DYNAMIC,TVD_RCVD_IP,\n\tURIBL_AB_SURBL,URIBL_BLACK,URIBL_JP_SURBL,URIBL_OB_SURBL,URIBL_RHS_DOB,\n\tURIBL_SC_SURBL,URIBL_WS_SURBL autolearn=spam version=3.2.5
Oct 18 20:14:23 mail sm-mta[53429]: m9IIEE2F053429: Milter: data, reject=550 5.7.1 Blocked by SpamAssassin
Oct 18 20:14:23 mail sm-mta[53429]: m9IIEE2F053429: to=<smyersi@firma.cz>, delay=00:00:05, pri=30900, stat=Blocked by SpamAssassin

Snadno si můžeme udělat malou statistiku. V portech jsou připravené programy pro statistiky, například /usr/ports/mail/spamstats. Ale i jeden jednoduchý grep bude fungovat:

$ grep "spamd: clean message" /var/log/maillog | wc -l
$ grep " spamd: identified spam" /var/log/maillog | wc -l
$ grep "stat=Blocked by SpamAssassin" /var/log/maillog | wc -l

A tím máme vše hotovo. Příchozí pošta bude zkontrolována antivirem, antispamem a následně předána na vnitřní server. Pokud chcete přidat třeba milter greylist, stačí jej nainstalovat, spustit, přidat příslušné řádky do mc souboru a pomocí make, make stop install start spustit sendmail.

Našli jste v článku chybu?

25. 10. 2008 15:22

Buki (neregistrovaný)
nemusi byt zrovna v local-host-names, ale je to jedna moznost. Nebo muze byt zaznam v /etc/mail/access:

To:domena.cz RELAY

kazdopadne mi slo o to, ze kdyz nekdo puste zkopiruje informace ve clanku, bude se desne divit, ze mu ten stroj neprijima maily pro "domena.cz", tot vse.



25. 10. 2008 14:30

uživatel si přál zůstat v anonymitě
Super clanek jen tak dal. Kdysi sem pouzival na postak jen sendmail ale pak jsem presel na postfix. Ted po precteni uvazuju ze bych presel spatky. sendmail je pro me srdecni zalezitost :-)
Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?