Spamszűrő és vírusirtó telepítés Debian Woodyra HOGYAN

A HupWiki-ből...

Tartalomjegyzék

Bevezető

Áttekintés

Felmerülhet benned a kérdés: miért kell egyáltalán vírusirtót telepíteni woodyra, ha Linuxra alig van működőképes vírus? Röviden Trey tollából: "Sajnos legtöbb helyen a Linux/Unix/UNIX rendszergazdáknak kell megoldani a windows klienesek védelmet, és a windowsos vírusok ügye egyre jobban a mi ügyünk lesz, nem a windows adminoké. Mivel a legtöbb helyen a védelem első bástyája általában valamilyen Linux/BSD/vagy egyéb Unix(szerű) rendszer..."

Mindenképpen szükség lehet tehát valamiféle vírusirtó megoldásra Linuxon, főleg sok felhasználó levelezését kiszolgáló rendszerek esetében. A választás a Debian Woody rendszerére esett, annak kiemelkedő stabilitása és kiforrottsága miatt. A felhasznált programok (Postfix, amavisd-new, ClamAV, SpamAssassin) kisebb-nagyobb erőfeszítések árán hozzáférhetőek ehhez a rendszerhez is, ráadásul szabadon (értsd: ingyen és legálisan). Lehetőség van a ClamAV helyett más, esetleg fizetős vírusirtó használhatára is, de ezzel jelen dokumentum nem foglalkozik. (Minek fizessünk valamiért, amit meg lehet oldani ingyen -- pláne, ha az ingyenes megoldás néha még jobb/gyorsabb is?)

Jelen dokumentum leírja, hogyan telepítsünk spamszűrőt és levélvírus-irtót Woodyra a helyi, nem virtuális felhasználók levelezésének védelmére; nem foglalkozik azonban az egyéb vírusvédelmi megoldásokkal (tűzfalak, webes tartalomszűrés, LDAP vagy SQL alapú virtuális felhasználók levelezésének védelme, stb.).

A felelősség teljes kizárása

Semmilyen felelősséget nem vállalok a dokumentum tartalmával kapcsolatban. Mindenki a saját felelősségére használja az elgondolásokat, példákat. Mivel ez egy új dokumentum, lehetnek benne hibák és pontatlanságok, amik akár a rendszer károsodásához is vezethetnek. Ezért mindenki figyelmesen járjon el, és habár ez különösen valószínűtlen, a szerző semmilyen felelősséget nem vállal érte.

Sem a szerző, sem a terjesztők, sem más közreműködő munkatárs nem felelős semmilyen módon a fizikai, pénzügyi, morális vagy bármely más típusú kárért, amit a szövegben ajánlott dolgok követése okozott.

Visszajelzés, a dokumentum új verziói

A dokumentum mindenkori legfrissebb verziója megtalálható itt, a HupWikiben. Visszajelzéseket a HUP fórumában várok.

Szerzői jog és licensz

Jelen dokumentum eredeti szerzője Csécsy László (Boobaa).

A dokumentum szabadon másolható, terjeszthető és módosítható, az FSF által közzétett GNU Szabad Dokumentációs Licenc v1.1, vagy annak későbbi változatában szereplő feltételek szerint. A licenc egy másolata megtalálható a www.gnu.org oldalon.

Köszönetnyilvánítás

A következő embereknek, illetve csoportoknak szeretnék köszönetet mondani:

fórumozóinak gyors, és legtöbbször pontos válaszaikért;

  • Micskó Gábor (Trey), a HUP.hu adminisztrátorának, amiért

megtűri a hülyeségeinket;

Követelmények

Ismeretek

A gépre érkező leveleket a Postfix fogadja a 25-ös porton (akkor is, ha azokat fetchmail segítségével töltjük le valahonnan). Ezután az 10024-es porton átadja az amavisd-new részére, ami megvizsgálja őket, és a megfelelő szabályok alkalmazása után visszaadja a Postfixnek az 10025-ös porton. A levél kézbesítése innentől ugyanúgy történik, mint eddig.

Az érdekes dolgokat tehát az amavisd-new csinálja, ami egyfajta összekötő az MTA (Postfix) és a vírusirtó (ClamAV) között: a kapott levelet átadja a vírusirtónak, s a válasz alapján dönt a továbbiakról. Tévedések elkerülése végett jegyezzük meg, hogy a ClamAV (még) nem képes a vírus kiirtására a levélből; ilyenkor az egész levél törlésre kerül, s helyette a címzett csak egy értesítést kap.

Csomagok

A következő programokra lesz szükségünk:

Telepítés

A fenti programok mindegyike megtalálható csomagként is a www.backports.org oldalon. (Némelyikük megtalálható az eredeti Woody disztribúcióban is, de attól tartok, az ma már túl elavult. Helyette nyugodtan használhatjuk ezt a telepítési forrást.) Ahhoz, hogy onnan telepíteni tudjuk őket, adjuk hozzá a következő sorokat az /etc/apt/sources.list fájlhoz:

deb http://www.backports.org/debian stable amavisd-new clamav spamassassin
deb http://www.backports.org/debian stable unrar arj unarj unzoo

A második sorra a tömörített csatolt fájlok ellenőrzéséhez van szükség. Telepítsük fel a megfelelő csomagokat függőségeikkel együtt:

apt-get update
apt-get install amavisd-new clamav clamav-daemon spamassassin
apt-get install unrar arj unzoo

A clamav-freshclam csomag telepítése során (megfelelően beállított debconf esetén) célszerűnek látszik az ifup.d lehetőség választása (ekkor ugyanis a vírusirtó adatbázisának frissítése egy démon segítségével történik, de csak működő hálózaton), azonban gondosan ügyeljünk a megfelelő hálózati csatoló kiválasztására (ADSL-nél általában ppp0, állandó kapcsolatnál eth0).

Igyekszem a leírást minél általánosabban megírni. Ha a géped állandóan a hálózaton van, nyugodtan választhatod a daemon módot is; ekkor az adatbázis-frissítő démon mindig futni fog. Az ifup.d megoldás azonban jobbnak tűnik otthoni ADSL vagy modemes internet-elérésnél is.

Vírusirtás beállítása

Először is állítsuk le a levelezést:

/etc/init.d/postfix stop
/etc/init.d/amavis stop
/etc/init.d/clamav-freshclam stop
/etc/init.d/clamav-daemon stop

A Postfix beállítása

A Postfix alapbeállításával jelen dokumentum nem foglalkozik; egyelőre bőven elég, ha az megfelelően működik (tud levelet küldeni és fogadni). A fájlok módosításakor figyeljünk arra, hogy ahol a leírásban nem szerepel szóköz, oda nem is szabad tenni; valamint a \ karakter helyett írhatjuk az általa elválasztott két sornyi szöveget egy sorba is.

Az /etc/postfix/master.cf fájlban javítsuk ki a következő sort:

smtp inet n - - - - smtpd

erre:

smtp inet n - y - - smtpd -o content_filter=smtp-amavis:[127.0.0.1]:10024

A fájl végére pedig fűzzük hozzá a következő két sort:

smtp-amavis unix - - y - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookup=yes
127.0.0.1:10025 inet n - n - 100 smtpd -o content_filter= -o myhostname=xdomain.hu -o local_recipient_maps:xdomain.hu,hostname

Természetesen az xdomain.hu helyére a megfelelő domain írandó, a hostname helyére pedig az /etc/hostname fájl tartalma, továbbá az utolsó opció tetszés szerint bővíthető.

Az amavisd-new beállítása

Az /etc/amavis/amavisd.conf fájl 61. sora környékén állítsuk be a domaint:

$mydomain = 'xdomain.hu';      # (no useful default)

A hálózatot ne terheljük a vírusos levelekkel, valamint az azokról való jelentésekkel (394. sor környéke):

$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny     = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny       = D_DISCARD; # (defaults to D_REJECT)

Ezekkel a beállításokkal az összes vírusos levél mindenféle értesítés nélkül eldobásra kerül. Ha a címzettet értesíteni szeretnénk, hogy vírusos levelet küldtek neki (anélkül, hogy magát a levelet megkapná), ugyanezen fájl 440. sora környékén szedjük ki a kettőskeresztet a következő sor elől:

$warnvirusrecip = 1; # (defaults to false (undef))

A ClamAV beállítása

A megfelelő jogosultságok végett állítsuk át a ClamAV felhasználóját az /etc/clamav/clamav.conf fájlban:

User amavis

Az adatbázis-frissítő felhasználóját is át kell állítanunk az /etc/clamav/freshclam.conf fájlban:

DatabaseOwner amavis

A démonokat futtató felhasználó átállítása miatt a jogosultságokat is meg kell változtatnunk itt-ott:

chown -R amavis. /var/log/clamav
chown -R amavis. /var/lib/clamav
chown -R amavis. /var/run/clamav

Ha logrotate-et használunk a logok rotálásához, akkor a logok rotálása utáni jogokat is át kell adnunk az amavis falhasználónak a /etc/logrotate.d/clamav-daemon és /etc/logrotate.d/clamav-freshclam fileokban, a 6. sor környékén:

create 640 amavis amavis

A vírusirtás elindítása

Először a ClamAV démonját indítsuk el:

/etc/init.d/clamav-daemon start

A /var/log/clamav/clamd.log fájlban ellenőrizzük, hogy rendben elindult-e.

Másodszor a ClamAV adatbázis-frissítőjét indítsuk el:

/etc/init.d/clamav-freshclam start

A /var/log/clamav/freshclam.log fájlban ellenőrizzük, hogy rendben elindult-e.

Harmadiknak indítsuk el az amavisd-new-t is:

/etc/init.d/amavis start

A syslogban ellenőrizzük, hogy rendben elindult-e, és hogy minden kívánt tömörítvényt tud-e ellenőrizni.

Végül elindíthatjuk a Postfixet is:

/etc/init.d/postfix start

Szintén a syslogban ellenőrizzük, hogy rendben elindult-e.

A vírusirtás ellenőrzése

A legegyszerűbb módszer: biztosan van egy másik postafiók, ahová kaptunk már valaha vírusos levelet. Továbbítsuk a tesztelendő gépre ezt a levelet, és nézzük meg a /var/log/mail.log fájlt, hogy mi történt vele. Ha fentebb bekapcsoltuk a címzett értesítését is, akkor neki is kell kapnia egy értesítő levelet.

Egy másik, barátságosabb módszer: az eicar vírustesztjének használata. Ehhez a következő szöveget (pontosan úgy, ahogy van: szóközök és egyéb tördelés nélkül, nagybetűket is úgy, ahogy vannak) küldjük el egy egyébként tetszőleges tartalmú levélben a tesztelendő címre egy másik gépről:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Ezt a szöveget (melyben a harmadik karakter nagy O betű, és nem 0, azaz nulla) a ClamAV "Eicar-Test-Signature" nevű vírusként azonosítja. (Megnyugtatásképpen: a

fenti szöveg természetesen nem vírus, tehát éles környezetben is használható tesztelésre.)

Spamszűrés beállítása

Bár vannak módszerek a gépen felvett összes felhasználó leveleinek szűrésére, ez több ok miatt nem ajánlott (bővebben a spamassassin.org/sitewide.html oldalon):

  1. A SpamAssassin is hibázik néha, és előfordulhat, hogy olyan levelet szűr ki, amilyet nem kellene.
  2. Néhány országban törvények szabályozzák a levelezést (Angliában pl. 2 napnál tovább nem szabad visszatartani levelet elemzés miatt).
  3. Egyáltalán nem biztos, hogy minden felhasználónak szüksége van a spamszűrésre, feleslegesen meg ne terheljük a szerverünket.

Lehetséges olyan beállítás is, hogy rendszerszintű elemzés után minden felhasználó maga döntheti el, hogy a leveleivel mit szeretne kezdeni.

A SpamAssassin démon beállítása és indítása

Az /etc/default/spamassassin fájl 7. sorát kell módosítani:

ENABLED=1

Majd elindítani a démont a szokásos módon:

/etc/init.d/spamassassin start

A syslogban ellenőrizhetjük, hogy rendben elindult-e. Paranoid rendszergazdák olvassák el az /usr/share/doc/spamassassin/README.spamd fájlt, amennyiben a spamc/spamd megoldást akarják használni.

A SpamAssassin beállítása felhasználói szinten

Mivel a Postfix csak MTA, és nem MDA (arra a procmail-t használja), ezért elég a felhasználó könyvtárában létrehozni egy .procmailrc fájlt a következő tartalommal:

MAILDIR=$HOME/mail
DEFAULT=/var/spool/mail/user
LOGFILE=$HOME/.procmail_log
# 250 kB fölött nincs SA
:0fw: spamassassin.lock
* < 256000
| spamc

# Ha valami gond van (pl. lefagy a spamassassin vagy
# elkonfiguráltuk), akkor se ragadjon be a levél
:0e
{
 EXITCODE=$?
}
                                                                               
# 15 ponttól már biztosan spam
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam-biztos

# 5-15 pont között talán spam
:0:
* ^X-Spam-Status: Yes
spam-talan

Természetesen user helyére a felhasználó neve írandó. A szabályokról:

  1. A procmail minden tevékenységét naplózzuk a felhasználó .procmail_log fájljába.
  2. 250 kB fölött nem indítjuk el a SpamAssassint: nagyon kevés olyan spam van, ami ilyen nagy lenne, tehát nem éri meg lassítani a kézbesítést. A SpamAssassint nem közvetlenül hívjuk meg, hanem a kliensén (spamc) keresztül, így ugyanis nem kell minden egyes levélnél újra betölteni az egész SpamAssassint, szabálylistát, hanem csak át kell adni ellenőrzésre a szervernek spamd).
  3. 15 pont fölött már biztosan spamről van szó, ezért elrakjuk a spam-biztos mappába.
  4. 5 és 15 pont között még csak valószínűsíthető, hogy spamről van szó, ezért a spam-talan mappába rakjuk.

A SpamAssassin beállítása rendszerszinten

Hozzuk létre az /etc/procmailrc fájlt a következő tartalommal:

DROPPRIVS=yes
:0fw
* < 256000
| spamc

# Ha valami gond van (pl. lefagy a spamassassin vagy
# elkonfiguráltuk), akkor se ragadjon be a levél
:0e
{
 EXITCODE=$?
}
      

Ez minden 250 kB-nál kisebb beérkező levelet átad a spamc-nek, amely nem privilegizált módban (nem rootként) fog lefutni.

Ez a beállítás csak ellenőrzést végez, szűrést nem (a fentebb leírtak miatt). Amelyik felhasználó szeretné bekapcsolni magának a szűrés funkciót, a könyvárában hozzon létre egy .procmailrc fájlt a következő tartalommal:

MAILDIR=$HOME/mail
DEFAULT=/var/spool/mail/user
LOGFILE=$HOME/.procmail_log

# 15 ponttól már biztosan spam
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam-biztos

# 5-15 pont között talán spam
:0:
* ^X-Spam-Status: Yes
spam-talan

Természetesen user helyére a felhasználó neve írandó, egyebeket lásd az előző pontnál.

A spamszűrés ellenőrzése

Ez kicsit nehezebb, mint a vírusirtó ellenőrzése, mivel a SpamAssassin nemcsak a levél tartalmát, hanem a fejléceket is figyelembe veszi, így azokat is pontosan ugyanúgy kell reprodukálni. Magyarul szólva: nem működik a vírusirtásnál leírt továbbításos módszer.

Pozitív teszt

A következő szöveget (pontosan úgy, ahogy van: szóközök és egyéb tördelés nélkül, nagybetűket is úgy, ahogy vannak) küldjük el egy egyébként tetszőleges tartalmú levélben a tesztelendő címre egy másik gépről:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Erre a szövegre a SpamAssassin 1000 pontot ad, akárhol is szerepel a levélben, így ha ezt spamnek jelzi, akkor már biztosak lehetünk benne, hogy működik. :-)

Negatív teszt

Egy másik gépről nyissuk meg a tesztelendő gép 25-ös portját:

telnet celgep 25

Csatlakoztunk a gépünkön futó Postfixhez. Írjuk be a következőket:

HELO celgep
MAIL FROM: akarki@akarhonnan.hu
RCPT TO: user@celgep
DATA

Ezután másoljuk be az /usr/share/doc/spamassassin/examples/sample-nonspam.txt fájl tartalmát pontosan úgy, ahogy van, gondosan ügyelve az üres sorokra: se több, se kevesebb ne legyen belőlük.

Erre a szövegre a SpamAssassin alapbeállításoknál 0.1 pontot ad, tehát nem minősíti spamnek.

Kérdések

A több helyen, például a www.yrex.com oldalon fellelhető SpamAssassin config készítő programmal be lehet-e állítani a rendszerüzenetek nyelvét?

Nem. A fenti programmal csak a SpamAssassin által elfogadott nyelveket lehet beállítani (kínai nyelvterületen élőknek például kifejezetten javasolt a kínai nyelv engedélyezése).

Telepíthető-e exim v3 mellé a védelmi rendszer?

Biztosan; jómagam nem foglalkoztam vele, de állítólag a következő cím segíthet ebben: ente.limmat.ch (bár ez a leírás nem említi a ClamAV-t, tehát valószínűleg csak spamszűrésre használható).

Hogyan szűrhetők ki bizonyos kiterjesztésű csatolt fájlokat tartalmazó levelek?

Az /etc/amavis/amavisd.conf fájlban a 690. sor környékén a banned_filename_re szabály pontosan erre való. Ott van jónéhány, alapbeállításban kikapcsolt példa, érdemes ott körülnézni -- vegyük figyelembe azonban azt is, hogy küldő rendszergazdája is kap figyelmeztetést, hacsak ezt ki nem kapcsoljuk a 485. sor környékén a virus_admin változó átállításával:
$virus_admin = undef;
Ha be akarjuk kapcsolni a címzett értesítését, akkor a 441. sor környékén szedjük ki a kettőskeresztet a következő sor elől:
$warnbannedrecip = 1; # (defaults to false (undef))

A kifelé menő leveleket szűri-e a fenti rendszer?

Nem, az ismertetett beállítások csak a helyi címekre érkező levelekre vonatkoznak (viszont azokra is, amelyeket helyben adtak fel).

Zárszó

Ha mindenben a fentieknek megfelelően jártunk el, akkor egy kielégítően működő, szabad és ingyenes vírusirtó és spamszűrő megoldást telepítettünk a Debian Woodyra. Már csak egy dolog hiányzik: az amavisd-new és a SpamAssassin üzeneteinek lefordítása.

Személyes eszközök