|
Key
This line was removed.
This word was removed. This word was added.
This line was added.
|
Comment:
Changes (2)
View Page History... h1. 5.2.8. 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: {code:title=/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 {code} Ne feledjük a _/etc/rc.conf_ fájlban felvenni a _postfix_indítását: {code:title=/etc/rc.conf} sendmail_enable="NONE" postfix_enable="YES" {code} S másoljuk át a _postfix_ könyvtárát a megadott helyre: {code:title=Parancssor} [root@mailscanner:~]$ mv /var/spool/postfix/ /data/ {code} Ezek után már el is indíthatjuk a szolgáltatást. h2. 5.2.8.1. _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: {code:title=/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" {code} Mielőtt elindítanánk a programot, mozgassuk át az általunk megadott helyre az adatait: {code:title=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 {code} A szolgáltatás indítása után a megfelelő logban az alábbit kell látnunk: {code:title=/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 {code} {info} 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: {code:title=/usr/local/etc/postfix/main.cf} smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,check_policy_service inet:mail.system.jails.javaforum.hu:10023 {code} {info} A _jail_ újraindítása után próbáljunk meg levelet küldeni saját gépünkről a szerverre: {code:title=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. {code} 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: {code:title=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. {code} h2. 5.2.8.2. 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: {code:title=/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'; {code} Keressük meg a ClamAV bejegyzését, és szedjük ki a komment jeleket: {code:title=/usr/local/etc/amavisd.conf} ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], {code} 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: {code:title=Parancssor} |
| [root@mail:~]$ mv /var/virusmails/ /data/ [root@mail:~]$ mv /var/amavis/ /data/ |
| [root@mailscanner:~]$ ln -s /data/amavis/ /var/amavis |
| {code} |
... 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: {code:title=/usr/local/etc/clamd.conf} #LogFile /var/log/clamav/clamd.log LogSyslog yes LogFacility LOG_MAIL DatabaseDirectory /data/clamav LocalSocket /var/run/clamav/clamd {code} Ugyanezt tegyük meg a frissítést végző _freshclam_ konfiggal is: {code:title=/usr/local/etc/freshclam.conf} DatabaseDirectory /data/clamav #UpdateLogFile /var/log/clamav/freshclam.log LogSyslog yes LogFacility LOG_MAIL {code} Adjuk hozzá a _/etc/rc.conf_ fájlhoz az _amavisd_ és a _clamav_ indítását is: {code:title=/etc/rc.conf} amavisd_enable="YES" clamav_clamd_enable="YES" clamav_freshclam_enable="YES" {code} Mozgassuk át az adatbázist az új helyre: {code:title=Parancssor} [root@mailscanner:~]$ mv /var/db/clamav/ /data/ [root@mailscanner:~]$ ln -s /data/clamav/ /var/db/clamav {code} Majd adjuk hozzá a _clamav_ felhasználót a _vscan_ csoporthoz. {code:title=Parancssor} vscan:*:110:clamav {code} {info} Ezek után kissé módosítanunk kell a *mail* _jail_ _postifx_ _master.cf_ állományát: {code:title=/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= {code} Az SMTPS protokollhoz nem teszünk szűrést, hiszen itt még nem valószínű, hogy spam jönne... még... :) {info} Az egész konfig sorozat után indítsuk újra a _jail_-t, majd nézzük meg, működik-e: {code:title=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. {code} Nézzük meg, mi került a naplóba végére: {code:title=/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 {code} Ebből nem derül ki sokminden, nézzük meg a *mailscanner* logot is: {code:title=/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 {code} Hát... elkapta. :) h2. 5.2.8.3. 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_... :) |
| |
| |
| h2. 5.2.8.4. 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: {code:title=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); } {code} 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: {code:title=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/ {code} A végrehajtáshoz annyi kell, hogy a _/etc/aliases_ végére írjuk: {code:title=/etc/aliases} ## spamassassin learn spam: "|/usr/local/bin/sa-wrapper --spam" ham: "|/usr/local/bin/sa-wrapper --ham" {code} Ezek után generáljuk újra az adatbázist: {code:title=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 {code} {info} 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: {code:title=/usr/local/etc/postfix/main.cf} relay_domains = spam.javaforum.hu transport_maps = hash:/usr/local/etc/postfix/transport {code} Ezen után módosítanunk kell a _transport_ fájlt is: {code:title=/usr/local/etc/postfix/main.cf} spam.javaforum.hu relay:[mailscanner.jails.javaforum.hu]:25 {code} Generáljunk egy adatbázist is, majd indítsuk újra a _postfix_ szolgáltatást: {code:title=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 {code} {info} ---- [Előző fejezet|FREEBSD:Mail over TLS] [Tartalomjegyzék|FREEBSD:FreeBSD in my server] [Következő fejezet|FREEBSD:Mailman] ---- Auth Gábor [auth.gabor@javaforum.hu|mailto:auth.gabor@javaforum.hu] ---- |
