Child pages
  • Mail spam
Skip to end of metadata
Go to start of metadata

Spam és vírus szűrés

A spam és a levélben érkező vírusok korunk rákfenéi... védekeznünk kell ellenük, klónozzuk a template fájlrendszer, legyen az új jail neve mailscanner, állítsuk be a megszokott módon, hozzunk létre neki adatokat hordozó fájlrendszer, amelyet csatoljunk fel a /data alá, adjuk hozzá a DNS-hez a címeit, majd indítsuk el.

Hasonlóan, mint a mail jail esetén tettük, tiltsuk le a Sendmail futását, és telepítsünk fel egy postfix programot, amelynek egyetlen feladat a levelek fogadása lesz. A konfiguráció is egyszerű lesz, mindössze annyit mondunk meg, hogy mi a neve a kiszolgálónak, s honnan fogadunk leveleket, illetve hova küldjük tovább:

/usr/local/etc/postfix/main.cf
myhostname = mailscanner.jails.javaforum.hu
mydomain = mailscanner.jails.javaforum.hu
myorigin = mailscanner.jails.javaforum.hu
mydestination = mailscanner.jails.javaforum.hu, spam.javaforum.hu
mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.2.0/24

alias_maps = hash:/etc/aliases
relayhost = [mail.jails.javaforum.hu]

queue_directory = /data/postfix

Ne feledjük a /etc/rc.conf fájlban felvenni a _postfix_indítását:

/etc/rc.conf
sendmail_enable="NONE"
postfix_enable="YES"

S másoljuk át a postfix könyvtárát a megadott helyre:

Parancssor
[root@mailscanner:~]$ mv /var/spool/postfix/ /data/

Ezek után már el is indíthatjuk a szolgáltatást.

Postgrey – a szürke zóna

A spam elleni védekezés első védelmi vonala már akkor hatásos, amikor a spam még be se érkezett. A postgrey program egyszerűen késlelteti a levelek beérkezését, feltételezve, hogy a legális levelező partnerek szervere kis idő után újra megpróbálja kézbesíteni a levelet. A postgrey ekkor már beengedi a levelet, amelyet a mögötte lévő spam szűrő még megvizsgál. Ha újra levelet kapunk egy olyan helyről, amelyet a postgrey már átengedett, akkor nincs késlekedés, ugyanis a postgrey letárolja a küldő gép IP címét, a küldő email címét és a helyi címzettet (ez a triplet). Telepítsük fel a programot, majd elindításához az /etc/rc.conf állományába fel kell vennünk az alábbit:

/etc/rc.conf
postgrey_enable="YES"
postgrey_enable="YES"
postgrey_pidfile="/var/run/postgrey.pid"
postgrey_flags="--greylist-text 'User disk quota has been exceeded' \
    --pidfile=/var/run/postgrey.pid \
    --whitelist-clients=/data/postgrey/whitelist_clients \
    --whitelist-recipients=/data/postgrey/whitelist_recipients \
    --inet=10023 -d --user=postgrey --group=postgrey --dbdir=/data/postgrey"

Mielőtt elindítanánk a programot, mozgassuk át az általunk megadott helyre az adatait:

Parancssor
[root@mailscanner:~]$ mv /var/db/postgrey/ /data/
[root@mailscanner:~]$ ln -s /data/postgrey/ /var/db/postgrey
[root@mailscanner:~]$ cp /usr/local/etc/postfix/postgrey_whitelist_clients /data/postgrey/whitelist_clients
[root@mailscanner:~]$ cp /usr/local/etc/postfix/postgrey_whitelist_recipients /data/postgrey/whitelist_recipients

A szolgáltatás indítása után a megfelelő logban az alábbit kell látnunk:

/bpool/jails/v7.1.0/logserver/data/192.168.2.9-2009-01/mail.2009-01-18
Jan 18 17:42:21 mailscanner postgrey[43104]: Process Backgrounded
Jan 18 17:42:21 mailscanner postgrey[43104]: 2009/01/18-17:42:21 postgrey (type Net::Server::Multiplex) starting! pid(43104)
Jan 18 17:42:21 mailscanner postgrey[43104]: Binding to TCP port 10023 on host localhost

Most már csak a mail jail-ben futó postfix-et kell erről értesítenünk, a meglévő smtpd_recipient_restrictions sort kell kiegészítenünk:

/usr/local/etc/postfix/main.cf
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,check_policy_service inet:mail.system.jails.javaforum.hu:10023

A jail újraindítása után próbáljunk meg levelet küldeni saját gépünkről a szerverre:

Parancssor
auth.gabor@laptop:~> telnet javaforum.hu 25
Trying 91.83.48.130...
Connected to javaforum.hu.
Escape character is '^]'.
220 mail.javaforum.hu ESMTP Postfix (2.5.5)
HELO localhost
250 mail.javaforum.hu
Mail from: auth.gabor@javaforum.hu
250 2.1.0 Ok
Rcpt to: valakinek@javaforum.hu
450 4.2.0 <valakinek@javaforum.hu>: Recipient address rejected: User disk quota has been exceeded
quit
221 2.0.0 Bye
Connection closed by foreign host.

Mint látható, meg se várja a levél törzsét a megoldás, már visszadobja, hogy greylisted. Mivel az alapértelmezett üzenet túlságosan árulkodó, ezért célszerű kicserélni valami olyanra, ami gyakori lehet, de mégis a levél üzemszerű újraküldésére ingerli a küldő szerverét (a 450-es hibakód átmeneti hibát jelez, ilyen esetben a küldő szervernek kötelessége többször is próbálkozni).

A postgrey 5 perc után engedi be a próbálkozókat, így ha eltelt ennyi idő, próbáljuk újra a levélküldést:

Parancssor
auth.gabor@laptop:~> telnet javaforum.hu 25
Trying 91.83.48.130...
Connected to javaforum.hu.
Escape character is '^]'.
220 javaforum.hu ESMTP Postfix (2.5.4)
HELO localhost
250 javaforum.hu
Mail from: auth.gabor@javaforum.hu
250 2.1.0 Ok
Rcpt to: valakinek@javaforum.hu
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test mail

Test mail
.
250 2.0.0 Ok: queued as 9DE973EED
quit
221 2.0.0 Bye
Connection closed by foreign host.

A spam szűrő

Az egyik legrugalmasabb spam (és vírus) szűrő az amavisd-new, bár kissé lassú, mivel az egész egy nagy halom perl scriptből áll, s rengeteg más programtól függ, és még víruskereső is kell neki. Telepítsük fel az amavisd-new és a clamav csomagot, majd lássunk neki a beállításnak.

Az amavisd-new részéről a beállítások nagyjából rendben vannak, pár dolgot kell máshova tenni, illetve az összes localhost vagy 127.0.0.1 hivatkozást cseréljük le a mailscanner jail nevére címére:

/usr/local/etc/amavisd.conf
$mydomain = 'javaforum.hu';
$MYHOME = '/data/amavis';
$QUARANTINEDIR = '/data/virusmails';
$syslog_priority = 'notice';
@inet_acl = qw( 127.0.0.1 ::1 192.168.1.0/24 192.168.2.0/24 );
$notify_method  = 'smtp:[mail.jails.javaforum.hu]:10025';
$forward_method = 'smtp:[mail.jails.javaforum.hu]:10025';

Keressük meg a ClamAV bejegyzését, és szedjük ki a komment jeleket:

/usr/local/etc/amavisd.conf
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

Ezek után a fenti beállításnak megfelelően mozgassuk át az általunk megadott helyre a virusmails könyvtárat, mivel ez a végtelenségig fog nőni, többször törölni kell majd belőle, s jobb ezt olyan fájlrendszeren tartani, amit erre a célra hoztunk létre:

Parancssor
[root@mail:~]$ mv /var/virusmails/ /data/
[root@mail:~]$ mv /var/amavis/ /data/
[root@mailscanner:~]$ ln -s /data/amavis/ /var/amavis

A clamd is mindent jól tud alapértelmezésben, de állítsuk be neki, hogy a syslog-ng-n át loggoljon, illetve adjuk meg neki is, hogy a /data alá hozza létre az állományait:

/usr/local/etc/clamd.conf
#LogFile /var/log/clamav/clamd.log
LogSyslog yes
LogFacility LOG_MAIL
DatabaseDirectory /data/clamav
LocalSocket /var/run/clamav/clamd

Ugyanezt tegyük meg a frissítést végző freshclam konfiggal is:

/usr/local/etc/freshclam.conf
DatabaseDirectory /data/clamav
#UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog yes
LogFacility LOG_MAIL

Adjuk hozzá a /etc/rc.conf fájlhoz az amavisd és a clamav indítását is:

/etc/rc.conf
amavisd_enable="YES"
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

Mozgassuk át az adatbázist az új helyre:

Parancssor
[root@mailscanner:~]$ mv /var/db/clamav/ /data/
[root@mailscanner:~]$ ln -s /data/clamav/ /var/db/clamav

Majd adjuk hozzá a clamav felhasználót a vscan csoporthoz.

Parancssor
vscan:*:110:clamav

Ezek után kissé módosítanunk kell a mail jail postifx master.cf állományát:

/usr/local/etc/postfix/master.cf
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=smtp:[mailscanner.jails.javaforum.hu]:10024
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
mail.jails.javaforum.hu:10025 inet  n       -       n       -       -       smtpd -o content_filter=

Az SMTPS protokollhoz nem teszünk szűrést, hiszen itt még nem valószínű, hogy spam jönne... még... (smile)

Az egész konfig sorozat után indítsuk újra a jail-t, majd nézzük meg, működik-e:

Parancssor
auth.gabor@laptop:/var/log> telnet javaforum.hu 2525
Trying 91.83.48.130...
Connected to javaforum.hu.
Escape character is '^]'.
220 mail.javaforum.hu ESMTP Postfix (2.5.5)
HELO localhost
250 mail.javaforum.hu
Mail from: auth.gabor@javaforum.hu
250 2.1.0 Ok
Rcpt to: valakinek@javaforum.hu
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Message-ID: <486DA3CD.2080607@lakecumberlandky.com>
Date: Fri, 4 Jul 2008 12:15:09 +0800
From: <kolaci@pw.utc.com>
User-Agent: Thunderbird 2.0.0.6 (Windows/20070728)
MIME-Version: 1.0
To: rendszergazda@javaforum.hu
Subject: Stars and Strips forever
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Well done 4th! http://24.130.139.182/

.
250 2.0.0 Ok: queued as 54F6BB9
quit
221 2.0.0 Bye
Connection closed by foreign host.

Nézzük meg, mi került a naplóba végére:

/bpool/jails/v7.1.0/logserver/data/192.168.2.4-2009-01/mail.2009-01-18
Jan 18 18:58:31 mail postfix/smtpd[84796]: connect from catv-80-98-243-212.catv.broadband.hu[80.98.243.212]
Jan 18 18:58:36 mail postfix/smtpd[84796]: B839ABD: client=catv-80-98-243-212.catv.broadband.hu[80.98.243.212]
Jan 18 18:58:41 mail postfix/cleanup[84800]: B839ABD: message-id=<486DA3CD.2080607@lakecumberlandky.com>
Jan 18 18:58:41 mail postfix/qmgr[83800]: B839ABD: from=<auth.gabor@javaforum.hu>, size=598, nrcpt=1 (queue active)
Jan 18 18:58:43 mail postfix/smtpd[84796]: disconnect from catv-80-98-243-212.catv.broadband.hu[80.98.243.212]
Jan 18 18:58:44 mail postfix/smtpd[83951]: timeout after END-OF-MESSAGE from mailscanner.jails.javaforum.hu[192.168.2.9]
Jan 18 18:58:44 mail postfix/smtpd[83951]: disconnect from mailscanner.jails.javaforum.hu[192.168.2.9]
Jan 18 18:58:44 mail postfix/smtpd[83951]: connect from mailscanner.jails.javaforum.hu[192.168.2.9]
Jan 18 18:58:44 mail postfix/smtpd[83951]: 62123BE: client=mailscanner.jails.javaforum.hu[192.168.2.9]
Jan 18 18:58:44 mail postfix/cleanup[84800]: 62123BE: message-id=<SSD531+6trS+c6@mailscanner.jails.javaforum.hu>
Jan 18 18:58:44 mail postfix/qmgr[83800]: 62123BE: from=<>, size=3527, nrcpt=1 (queue active)
Jan 18 18:58:44 mail postfix/smtp[84802]: B839ABD: to=<valakinek@javaforum.hu>, relay=mailscanner.jails.javaforum.hu[192.168.2.9]:10024, delay=9, delays=6/0.02/0.01/3, dsn=2.5.0, status=sent (250 2.5.0 Ok, id=82821-01, BOUNCE)
Jan 18 18:58:44 mail postfix/qmgr[83800]: B839ABD: removed
Jan 18 18:58:44 mail postfix/virtual[84804]: 62123BE: to=<auth.gabor@javaforum.hu>, relay=virtual, delay=0.13, delays=0.06/0.06/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Jan 18 18:58:44 mail postfix/qmgr[83800]: 62123BE: removed

Ebből nem derül ki sokminden, nézzük meg a mailscanner logot is:

/bpool/jails/v7.1.0/logserver/data/192.168.2.9-2009-01/mail.2009-01-18
Jan 18 18:58:44 mailscanner amavis[82821]: (82821-01) Blocked SPAM, [80.98.243.212] [80.98.243.212] <auth.gabor@javaforum.hu> -> <valakinek@javaforum.hu>, quarantine: spam-D531+6trS+c6.gz, Message-ID: <486DA3CD.2080607@lakecumberlandky.com>, mail_id: D531+6trS+c6, Hits: 9.802, size: 598, 2996 ms

Hát... elkapta. (smile)

A vírus szűrő

A spamek szűrésével már működik is a vírusok szűrése is, ezt nehezebb kipróbálni, valószínűleg működik is, bár az ingyenes clamav teszi a dolgát, ha nem bízunk meg benne, akkor fel kell szerelkeznünk egy olyan víruskeresővel, amely fut FreeBSD alatt, az amavisd-new is ismeri, és mindezen túl meg is bízunk benne... nem is olyan rossz az a clamav... (smile)

A tanítás

A spam szűrőt érdemes tanítani, ennek legkényelmesebb módja az, ha erre rendszeresítünk kettő email címet:

  • spam@spam.javaforum.hu, amelyre az átcsúszott spam leveleket továbbíthatjuk
  • ham@spam.javaforum.hu, amelyre az elkapott, de nem spam leveleket továbbítjuk

A feladathoz kell írnunk egy rövid C programot, amely elindítja a SpamAssassin tanuló programját:

sa-wrapper.c
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main( int args, char *argv[], char *envp[] )
{
  char name[80]  = "/usr/local/bin/sa-learn";
  execve( name, argv, envp);
}

A hivatkozott fájl egy perl script, amelyre nem tudunk suid bitet tenni, de a sa-wrapper programra igen, mégpedig a tanulásnak vscan felhasználóként kell futnia, de a postfix fogja végrehajtani:

Parancssor
[root@mailscanner:~]$ gcc sa-wrapper.c -o sa-wrapper
[root@mailscanner:~]$ chmod 4755 sa-wrapper
[root@mailscanner:~]$ chown vscan:vscan sa-wrapper
[root@mailscanner:~]$ ls -l sa-wrapper
-rwsr-xr-x  1 vscan  vscan  6888 Jan 18 19:06 sa-wrapper
[root@mailscanner:~]$ mv sa-wrapper /usr/local/bin/

A végrehajtáshoz annyi kell, hogy a /etc/aliases végére írjuk:

/etc/aliases
## spamassassin learn
spam:                 "|/usr/local/bin/sa-wrapper --spam"
ham:                  "|/usr/local/bin/sa-wrapper --ham"

Ezek után generáljuk újra az adatbázist:

Parancssor
[root@mailscanner:~]$ newaliases
[root@mailscanner:~]$ ls -l /etc/aliases*
lrwxr-xr-x  1 root  wheel     12 Jan 14 14:42 /etc/aliases -> mail/aliases
-rw-r--r--  1 root  wheel  16384 Jan 18 19:10 /etc/aliases.db

Az átirányításhoz a mail jail-ben futó postfix is kell, hiszen ő kezeli az összes bejövő levelet. A main.cf végére vegyük fel:

/usr/local/etc/postfix/main.cf
relay_domains = spam.javaforum.hu
transport_maps = hash:/usr/local/etc/postfix/transport

Ezen után módosítanunk kell a transport fájlt is:

/usr/local/etc/postfix/main.cf
spam.javaforum.hu       relay:[mailscanner.jails.javaforum.hu]:25

Generáljunk egy adatbázist is, majd indítsuk újra a postfix szolgáltatást:

Parancssor
[root@mail:~]$ cd /usr/local/etc/postfix/
[root@mail:/usr/local/etc/postfix]$ postmap transport
[root@mail:/usr/local/etc/postfix]$ /usr/local/etc/rc.d/postfix restart
postfix/postfix-script: stopping the Postfix mail system
postfix/postfix-script: starting the Postfix mail system

 

 

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels