Postfix UCE HOWTO

      


Kovetelmeny

Ez a HOWTO Postfix 20031026 snapshotra keszult. Az 1.x -es Postfix verziok mar mondhatni "regi"-nek tekinthetok, javaslom mindenkinek, hogy upgradeljen 2.x-es verziora, mivel sok uj anti-UCE funkciok talalhatok benne, amivel jobban es precizebben tudjuk szurni a nem kivant emaileket.
Postfixnak telepites utan alapbol nincsenek anti-UCE beallitasai, ezt az admin majd a sikeres konfiguralas utan beallithatja az adott korulmenyekhez illetoen.
Ez a HOWTO nem a Postfix telepiteserol szol, igy abbol indulok ki, hogy van egy mukodo Postfix MTA a gepen.

Fontos megjegyzes

A kovetkezo irasban reszben a sajat konfiguraciomat adom kozze, ami NEM feltetlenul azt jelenti, hogy azok a megfelelo beallitasok az olvasonak is, ezert: NEM VALLALOK SEMMILYEN FELELOSSEGET!

Mi is a Postfix?

Postfix egy MTA (Mail Transfer Agent), ami a kozismert sendmail levelezo szerver helyett keszult el. Postfix gyors, konnyen kezelheto es biztonsagos, mikozben kompatibilis a sendmailhez. Igy a kulseje sendmail-hez hasonlo, de a belseje teljesen mas.

Mi az UCE?

Az UCE jelentese angolul: Unsolicited Commercial Email. Manapsag inkabb spam-nek ismerjuk es sajnos mar (majdnem) mindenhol talalkozunk ilyen fajta reklamot hiresztelo emailekkel. Tehetunk ez ellen valamit? Igen! Nem biztos, hogy minden spam levelet el tudunk kapni, de nagyobb reszet ki lehet szurni mar az SMTP szervernel, majd az utana kovetkezo kulonbozo szuroknel (pl. spamassassin). Ezeket az smtp kapcsolat utan kovetkezo szuroket "content filter"-nek hivjak. Mivel ezek elegge eroforras igenyesek celszeru az smtp kapcsolatot is szurni kulonbozo eljarasokkal. Ezeket az eljarasokat Postfixban "restriction"-nek nevezik (magyarul korlatozas).

Konfiguralas

Mint mar emlitett, az alap Postfix konfiguracio nem tartalmaz semmilyen fajta spam-szurest, de azt hiszem nem is lenne celszeru, mivel nem lehet tudni, hogy telepites utan Postfix-ot mire fogjak hasznalni (intranet, mail-hub, relay, stb...). Ezert az adminnak a korulmenyekre valo tekintettel kell konfiguralnia az anti-UCE szabalyait.

Postfixban harom fajta korlatozas van:

Postfix a korlatozasi szakaszokat kovetkezo sorrendben dolgozza fel:

smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
smtpd_data_restrictions

Ezeket roviden elmagyaraznam:

smtpd_client_restricions

Az MTA-k egymas kozott szoktak egyfajta "beszelgetes"-t folytatni, ekozben az egyik a kliens a masik a szerver. Mindketto ismeri az SMTP protokollt. Ez a fajta korlatozasi szakasz az SMTP kliens cimet es hostname-jet korlatozza. A kliens ebben az esetben az MTA-hoz kapcsolodo tcp/ip klienst jelenti.

smtpd_helo_restrictions

Altalaban az smtp kliensek kuldenek az smtp szerverhez egy HELO/EHLO -t, amivel elaruljak, hogy ok milyen host-rol kapcsolodnak a szerverhez. Ezzel a szakasszal megadhatjuk, hogy milyen hostname-et kuldhetnek az smtp kliensek (pl nem lenne celszeru sajat hostname-unket kuldeniuk, azzal kiadva, hogy az smtp-kliens=smtp-szerver). Celszeru beallitani, hogy egy smtp kliensnek kuldenie kell a HELO/EHLO-t, ezennel sok UCE-progit ki lehet szurni. Ezt igy tehetjuk meg: smtpd_helo_required=yes

smtpd_sender_restrictions

Ezzel a szakasszal beallithatjuk, hogy milyen kuldot fogadjon el a Postfix MTA a "MAIL FROM:" parancsban. Mivel sok spammer a "MAIL FROM:"-hoz nem letezo vagy ervenytelen email cimet ir (mint pl. peter@foobar.hu vagy peter@foo@bar.hu). Itt persze feltetelezzuk, hogy a foobar.hu domain nem letezik.

smtpd_recipient_restrictions

Ez a korlatozasi szakasz szabalyozza, hogy az smtp kliens mit kuldhet a "RCPT TO:" parancsnak parameterkent. Az un. spammerek termeszetesen itt is hasznalhatnak ervenytelen email cimet, amiket kulonbozo opciokkal kiszurhetunk.

smtpd_data_restrictions

Mielott rosszra gondolnatok... ez NEM a "DATA" parancs tartalmat korlatozza, hanem magat a parancsot. Ez kiszuri azt a fajta smtp klienst, mely nem az SMTP szabalyai szerint cselekedik.

Biztos eszrevettetek, hogy nalam az osszes korlatozas az smtpd_recipient_restrictions -ben van. Ennek van egy oka. Postfix alapbol csak az "RCPT TO:" parancs utan hajtja vegre az UCE vizsgalatokat, mivel alapbol a smtpd_delay_reject=yes -re van allitva. Nem javasolom, hogy ezt a beallitast modositsatok, mivel nem biztos, hogy minden smtp kliens ezt szeretni fogja (ezzel semmifelekepp nem akarok az MS fajta kliensekre celozni ;-)

Ez az oka annak, hogy igy implementaltak Postfix-ba. Van sajnos nehany MS fajta smtp kliens (MUA), melyek hiaba kapnak mar a HELO/EHLO -nal REJECT-et, mert nem ertik meg es megis elkuldik az egesz emailt. Igy hiaba utasitjuk vissza, mert megis elkuldi az adatokat, persze nem jonnek be a Postfix-ba, de ezek altalaban sok adatot jelentenek. Ha valaki kuldene egy ilyen MS klienssel egy 3 MB-os attachment-ot, akkor hiaba kap REJECT-et a HELO/EHLO-nal, mert megis elkuldi az egeszet. Ezert alapbol Postfixban az smtpd_delay_reject=yes opcio be van kapcsolva.

Nagyon fontos, hogy a kulonbozo korlatozasokat jo sorrendbe rakjuk, mert aszerint donti el Postfix, hogy tovabbadja-e a process-t vagy megallitja.

Miutan megneztuk a korlatozasi szakaszokat, nezzuk milyen korlatozasok es engedelyezesek leteznek a kulonbozo szakaszokban:

smtpd_client_restrictions

reject_unknown_client

Visszautasitja a kerest, ha az smtp kliens hostname-je ismeretlen.

reject_rbl_client domain.tld

Visszautasitja a kerest, ha az adott smtp kliens listazva van mint DNS A rekord a domain.tld alatt.

reject_rhsbl_client domain.tld

Visszautasitja a kerest, ha az adott smtp kliens listazva van mint DNS A rekord a domain.tld alatt.

warn_if_reject

Loggol, visszautasitas helyett.

check_client_access maptype:mapname

Feloldja a kliens neveket, kliens cimeket, parent domaineket vagy halozatok.

permit_mynetworks

Engedelyezi, ha a kliens matchel a $mynetworks -el.

smtpd_helo_restrictions

reject_invalid_hostname

Visszautasitja a HELO -ban megadott rossz szintakszisu hostname-et. Figyeljunk arra, hogy ha a halozatban levo gepek is akarnak kuldeni emailt a Postfix MTA-n keresztul, akkor ez a korlatozas nem mindig celszeru, mivel azoknak a gepeknek nem FQDN -juk van. Ezert erdemes ELOSZOR a permit_my_networks -t engedelyezni, mielott az MTA visszautasitja a halozatban levo gepektol kapott leveleket (mint mar emlitettem nagyon fontos a sorrend).

reject_unknown_hostname

Visszautasitja a HELO -ban megadott hostname-et, melynek nincs A vagy MX tipusu DNS rekordja. Itt is erdemes eloszor a permit_my_networks -ot engedelyezni, ha halozatban levo gepek is kuldenek az MTA-n keresztul leveleket.

reject_non_fqdn_hostname

Visszautasitja a HELO -ban megadott hostname, ha az nem FQDN alakban van. Mit jelent az FQDN? Full Qualified Domain Name. Erre egy pelda: www.chains.ch egy FQDN.

warn_if_reject

Loggol, visszautasitas helyett.

check_helo_access

Feloldja a HELO -ban megadott hostname -et vagy parent domain -t.

permit_mynetworks

Engedelyezi, ha a kliens matchel a $mynetworks -el.

smtpd_sender_restrictions

reject_unknown_sender_domain

Visszautasitja a kuldo domain -t, ha annak nincs A vagy MX tipusu DNS rekordja.

reject_non_fqdn_sender

Visszautasitja a kuldo cimet, ha az nem FQDN alakban van.

reject_rhsbl_sender domain.tld

Visszautasitja a kerest, ha az adott kuldo domain listazva van mint A tipusu DNS rekord a domain.tld alatt.

reject_sender_login_mismatch

Visszautasitja a kerest, ha $smtpd_sender_login_maps kikot egy MAIL FROM cim tulajdonost, de a kliens nem authentikalta magat SASL-en keresztul mint a MAIL FROM tulajdonos; Visszautasitja a kerest, ha authentikalta magat a kuldo, de nem a tulajdonos a MAIL FROM cimenek $smtpd_sender_login_maps szerint.

warn_if_reject

Loggol, visszautasitas helyett.

check_sender_access maptype:mapname

Feloldja a kuldo cimet, parent domain-t vagy localpart@ -ot.

check_sender_mx_access maptype:mapname

Feloldja a kuldo MX tipusu DNS rekordjat.

permit_mynetworks

Engedelyezi, ha a kliens matchel a $mynetworks -el.

smtpd_recipient_restrictions

reject_unknown_recipient_domain

Visszautasitja a kerest, ha a RCPT TO -ban levo cimzett domain-nek nincs A vagy MX tipusu DNS rekordja.

reject_non_fqdn_recipient

Visszautasitja a kerest, ha a RCPT TO -ban levo cimzett domain-nek nincs FQDN alakja.

reject_rhsbl_recipient domain.tld

Visszautasitja a kerest, ha az adott cimzett domain listazva van mint DNS A rekord a domain.tld alatt.

reject_unauth_destination

Visszautasitja kovetkezo level-kuldeseket:
- celallomasokhoz, melyek listazottak $inet_interfaces, $mydestination, $virtual_alias_domains vagy $virtual_mailbox_domains -ban.
- celallomasokhoz, melyek listazottak $relay_domains -ben vagy azon subdomaineiben, kiveve a cimeket kuldo-specifikus routolassal.

warn_if_reject

Loggol, visszautasitas helyett.

check_recipient_access maptype:mapname

Feloldja a fogado cimet, parent domain-t vagy localpart@ -ot.

check_recipient_mx_access maptype:mapname

Feloldja a fogado MX tipusu DNS rekordjat.

permit_auth_destination

Engedelyezi kovetkezo level-kuldeseket:
- celallomasokhoz, melyek listazottak $inet_interfaces, $mydestination, $virtual_alias_domains vagy $virtual_mailbox_domains -ban.
- celallomasokhoz, melyek listazottak $relay_domains -ben vagy azon subdomaineiben, kiveve a cimeket kuldo-specifikus routolassal.

permit_mx_backup

Engedelyezi, hogy azok szamara fogadjon el levelet, mely MX tipusu DNS rekordja minket feltuntet.

permit_mynetworks

Engedelyezi, ha a kliens matchel a $mynetworks -el.

smtpd_data_restrictions

reject_unauth_pipelining

Visszautasitja a kerest, ha helytelenul pipelineolnak.
smtpd_helo_required = yes
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
    permit_mynetworks,
    reject_unauth_destination,
    reject_invalid_hostname,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client proxies.relays.monkeys.com,
    reject_rbl_client proxies.blackholes.easynet.nl,
    reject_rbl_client zombie.dnsbl.sorbs.net,
    reject_rbl_client cbl.abuseat.org,

Ez itt fent egy konfiguracio, amit egy probahoz fogunk felhasznalni.

Hogyan mukodik pontosan a korlatozas Postfix alatt? Mivel dolgozik kozben Postfix es honnan tudja, hogy mikor milyen korlatozast nezzen? Ehhez nezzunk meg a fenti konfiguracioval egy peldat.

Az smtp kliens tegyuk fel kuld egy ilyen headert: MAIL FROM:<user@nemletezek.hu>

Es tegyuk fel, hogy a nemletezek.hu domain tenyleg nem is letezik, akkor Postfix a korlatozasokat abban a sorrendben nezi meg, ahogy fent lathatjatok.

Erre akkor a pelda:
Korlatozas Valasz
permit_mynetworks DUNNO
reject_unauth_destination DUNNO
reject_invalid_hostname DUNNO
reject_non_fqdn_sender DUNNO
reject_unknown_sender_domain REJECT

reject_non_fqdn_recipient  
[..]

Csatlakozik a kliens, ad egy EHLO -t a szervernek, ezzel azonositja magat. A fentiek szerint tobb korlatozas van, amit a szervernek ellenoriznie kell, tehat megteszi ezt sorrendben:

A permit_mynetworks -re nem matchel a tcp/ip kliens, tehat tovabbadja a kovetkezo korlatozasnak.

Ezutan jon a reject_invalid_hostname, mely megnezni az EHLO-ban hostname-t, hogy rossz szintakszisu-e. Mivel latja, hogy nem rossz szintakszisu, ezert ad egy DUNNO-t.

A reject_unauth_pipelining nem matchel, tehat tovabbadja.

A reject_non_fqdn_sender ugye nem matchel, mert FQDN formaju a user@nemletezek.hu es igy tovabbadja a kovetkezonek.

A kovetkezo korlatozas a reject_unknown_sender_domain. Megnezi tehat, hogy a MAIL FROM: -ban mit adott meg domainnek az smtp kliens es feloldja azt a nevet, hogy nezze meg van-e A tipusu DNS rekordja. Mivel nincs ilyen domain, igy ebben az esetben egy REJECT-tel valaszol. Az smtp szerver ezt a valaszt adna a kliensnek:

450 <user@nemletezek.hu>: Sender address rejected: Domain not found

Ezutan jon a reject_unknown_recipient_domain, de ezt ezesetben nem nezi mar meg, mert mar ugye REJECT-et kapott a kliens, ezennel visszautasitotta az egesz level-kuldesi folyamatot. A tobbi, ezutan kovetkezo korlatozas is kimarad, hisz mar eldontotte Postfix, hogy nem fogadja el a levelet.

Meg egy fontos dolog: A kulonbozo korlatozasi szakaszokon belul altalaban van mindig egy korlatozas, melynek parameterkent megadhatunk maptype:mapname -et. Ha felsorolunk tobb szabalyt, akkor azokban a kovetkezo muveletek lehetnek: OK, DUNNO vagy REJECT. Ez esetben ha valamelyik szabaly ervenyes es a target DUNNO, akkor az annyit jelent, hogy Postfix meg nem tudja eldonteni, hogy mit tegyen, ezert befejezi az ertelmezest es tovabbugrik a kovetkezo korlatozashoz.

Ehhez legyen egy pelda. Tegyuk fel a korlatozasok kozott van egy ilyen:

check_sender_access pcre:/etc/postfix/sender_check
A file tartalma pedig:
/domain\.hu$/                DUNNO
/^mail\.domain\.hu$/         DUNNO
/^spammer\.hu$/              REJECT

Ha jon egy email a mail.domain.hu-tol, akkor matchel az elso ket sorra, de a masodik sort mar nem nezi meg Postfix, mivel az elsonel kapott egy DUNNO muveletet, miszerint Postfix befejezi az adott file ertelmezeset es tovabbugrik az ezt kovetkezo korlatozashoz. Mindig ajanlott Regularis kifejezesek hasznalatakor egy "^" -vel kezdeni es egy "$" -vel befejezni a kifejezest, nehogy hibak tortenjenek. Mert ugye ebben az esetben a foodomain.hu es a bardomain.hu is matchel a /domain\.hu$/ -ra, ezt a fajta hibat pedig erdemes elkerulni. A fenti peldat ezert csak azert irtam le, hogy tudjuk megerteni a DUNNO lenyeget.

Nezzuk akkor hogy nezne ez ki smtp nyelven. Eloszor a parameterek:

SMTP Client:
Address: 111.111.111.111
Hostname: nemletezek.hu
Prefix: >>

SMTP Server:
Address: 111.111.111.112
Hostname: domain.tld
Prefix: <<

Most kovetkezzek az smtp kapcsolat:

<< 220 mail.domain.tld ESMTP
>> EHLO localhost                   -----
<< 250-domain.tld                        |
<< 250-PIPELINING                        | -> smtpd_delay_reject=yes
<< 250-SIZE 10240000                     | 
<< 250-ETRN                              | Itt meg semmi ellenorzes nem
<< 250 8BITMIME                          | hajtodik vegre, mivel a fenti
>> MAIL FROM:<user@nemletezek.hu>        | opcio ervenyes.
<< 250 Ok                                |
>> RCPT TO:<user@domain.tld>        -----  -> Itt jon az osszes ellenorzes
                                         |
                                 permit_mynetworks             -> DUNNO
                                         |
                                       [...]
                                         |
                                 reject_non_fqdn_sender        -> DUNNO
                                 reject_unknown_sender_domain  -> REJECT
                                         |
                                    -----
<< 450 <user@nemletezek.hu>: Sender address rejected: Domain not found
>> DATA
<< 554 Error: no valid recipients
>> QUIT
<< 221 Bye

Ha nem ertitek ezt a peldat, akkor olvassatok el a 821-es szamu RFC-t (Request for comments). Abban leirtak, hogy kell kinezzen egy smtp kapcsolat.

Amit meg tudni kell... Miutan az email atfutott az ellenorzeseken kap egy permit-et a vegen. Ez az alap, tehat ha nincs ott egy permit a korlatozasi lista vegen, akkor magatol "odarak" egyet, persze ezt a konfiguracioban nem lehet latni. Ha nem kivanjuk elfogadni az emailt miutan atfutott a korlatozasokon, akkor rakjunk egy reject-et a vegere. De ezt altalaban nem szoktak csinalni. Tehat a kliens vegig DUNNO-t kap, majd a vegere er a korlatozasok listajaban, aztan Postfix odarak egy permit-et es igy kapja meg az OK-t (ha elotte nem REJECT-elte semmi).

Most tehat jon az smtp kapcsolat DATA resze. Eddig csak a HELO/EHLO, MAIL FROM:, RCPT TO: -t neztuk.

Egyeb ellenorzesek

Ha egyszer a korlatozasokon atfutott az email es egy OK -val zarodott le, akkor mar nem allithatja meg semmi hogy spammeljen? Dehogynem. Ezert vannak meg kulonb ellenorzesek mint peldaul header_checks es body_checks. Persze ezek az utolso ellenorzesek Postfixban. Ha az email atmegy a header_ es body_checks-en is, akkor Postfix jol vegezte a munkajat. Ezentul persze meg lehet ellenorizni egyeb programokkal, az un. content filterekkel.

A header_checks es body_checks a DATA utan kovetkezik, miutan megkapta Postfix a zaro "." -ot. A header_ es body_checks nem az smtpd_*_restrictions -hez tartozik, hanem maga egy korlatozasi szakasz. Altalaban ket modot szoktak hasznalni ezekre: pcre es regexp.

header_checks, mime_header_checks es body_checks

A header_checks-nek kell adni parametert, megpedig maptype:mapname. Ez igy nezhet ki:

header_checks regexp:/etc/postfix/maps/header_checks.regexp

A header_checks.regexp file-ban elmeletileg igy nezne ki egy sor:

/^<HEADER>:.*tartalom_a_muvelethez/             MUVELET

Gyakorlatilag pedig:

/^From:.*abuser@domain.tld$/                    REJECT

Azt, hogy milyen headerek vannak, meg lehet nezni egy email forrasaban, ott meg lehet talalni a kulonbozo headereket (fejleceket). A tartalmat is persze meg lehet adni kivansag szerint, a muveleteknek viszont van fix ertekuk:

REJECT:  Ez a megszokott muvelet, ha el akarunk utasitani egy header-t.
         Az email nem jon be a szerverre. A REJECT utan szoveget is meg
         lehet adni, amit majd a logban lathatunk, illetve amit a kuldo
         is megkap.
pelda:   /^Subject:.*ingyen/            REJECT Inkabb fizetek erte.
         Ez kiszuri minden emailt, melynek a Subject-ben az "ingyen" szo
         szerepel es visszaadja a "Inkabb fizetek erte." mondatot.

IGNORE:  Ez csak annyit csinal, hogy a megadott header-t kiveszi az
         emailbol es folytatja a level tovabbitasat.
pelda:   /^X-Mailer:/                   IGNORE
         Kivesszuk az "X-Mailer" headert az emailbol, mert nem erdekel
         minket, hogy milyen MUA (=Mail User Agent) -el kuldtek az
         emailt.

WARN:    Nagyon hasznos lehet ha ki akarunk probalni uj
         korlatozast/filtert. A mail log-ban kapunk egy sort, melyben
         irja, hogy mit szurt volna ki. De mivel csak WARN, ezert
         tovabbitja az emailt.
pelda:   /^Subject:.*penz/              WARN
         Megnezzuk hasznos-e ez a filter. Kapjuk a log file-ban a
         figyelmezteteseket. De az emailt is egyarant megkapjuk.

HOLD:    Bent tartja az emailt a queue-ban, majd az admin megmondhatja,
         hogy mi tortenik azzal az emaillel. Hasznos lehet, ha nem
         akarjuk visszautasitani az emailt, de azt sem, hogy rogton
         megkapjak a felhasznalok, hanem majd mi eldontjuk.
pelda:   /^Subject:.*felmondas/         HOLD
         Minden email, melynek Subject-ja "felmondas"-t tartalmaz HOLD-ra
         kerul, nem kapja meg senki, amig mi el nem dontjuk, hogy mi lesz
         az emaillel.

DISCARD: Ez annyit csinal, hogy a kuldo szervernek szimulalja, hogy
         elkuldte az emailt, mikozben torli. Ezt akkor erdemes
         beallitani, ha nem akarjuk, hogy a szerver vagy a kuldo tudja,
         hogy mi tortent az adott email-el.
pelda:   /^Subject:.*szamla/            DISCARD
         Minden emailt torol, melynek Subject-je tartalmazza a "szamla"
                 szot.

FILTER:  Engedi, hogy megadjunk egy masik servert vagy filtert, melyet
         ugy adunk meg mint a transport map-ben. Ez akkor hasznos, hogy
         ha csak bizonyos emaileket akarunk filterezni kulso filterrel.
pelda:   /^Subject:.*virus/             FILTER smtp:10025
         Minden emailt, mely "virus" -t tartalmaz a Subject-ben atadja a
         10025-os porton levo kulso filternek. Altalaban amavis szokott
         azon a porton futni.

A header_checks-hez parameter:
header_checks = pcre:/etc/postfix/maps/header_check.pcre

Nezzuk meg a header_check.pcre file tartalmat:

/^Subject:.*100\% Free/               REJECT Woah! Free?
/^From:.*spammer@domain.hu/           REJECT Takarodj innen, spammer.
/^X-Mailer:.*Microsoft/               REJECT Get a _real_ MUA.
/^Reply-To:.*sajatmagam@domain.hu/   REJECT Nem vagyok skizofren.

Fontos: A fenti peldak nem biztos, hogy hasznalhatok, csak peldanak vannak itt, tehat csak akkor hasznaljatok, ha ertitek mit csinalnak. Maskepp akkor inkabb hasznaljatok a WARN-t, REJECT helyett.

Postfix bovult egy uj opcioval, a mime_header_checks -el. Ez ugyanazt csinalja mint a header_checks kiveve, hogy a csatolt file-okat ellenorzi. Ehhez parameter:
mime_header_checks pcre:/etc/postfix/maps/mime_header_check.pcre

Nezzuk a mime_header_check.pcre file tartalmat:

/name=[^>]*\.exe/                     REJECT Tartsd meg a .exe filet.
/name=[^>]*\.bat/                     REJECT Tartsd meg a .bat filet.
/name=[^>](screensaver|movie)\.zip/   REJECT Sobig virusod van.

A body_checks ugyanigy mukodik, csak nem kell neki megadni az elejen semmit, mint a header_checks-nel. A parameter: body_checks = pcre:/etc/postfix/maps/body_check.pcre

Nezzuk a body_check.pcre file tartalmat:

/See the attached file for details/   REJECT Sobig virusod van.
/Get your free/                       REJECT Free? No, thanks.

Vegyuk figyelembe, hogy a header_checks, mime_header_checks es a body_checks-ben fontos a sorrend. Erre nezzunk egy peldat.

A header_check.pcre fileban tegyuk fel a kovetkezo sorok vannak:

/^Subject:.*szia/                     REJECT Szia-szia.
/^From:.*fonok@domain.hu/             OK

Es akkor nezzuk az smtp kapcsolat hogy nezne ki, ha a fonokunk akarna nekunk irni egy emailt "szia" Subject-tel:

<< 220 mail.domain.hu ESMTP
>> EHLO masikhost.domain.hu
<< 250-domain.hu
<< 250-PIPELINING
<< 250-SIZE 10240000
<< 250-ETRN
<< 250 8BITMIME
>> MAIL FROM:<fonok@domain.hu>
<< 250 Ok
>> RCPT TO:<user@domain.hu>
<< 250 Ok
>> DATA
<< 354 End data with <CR><LF>.<CR><LF>
>> To:fonok@domain.hu
>> Subject:szia
>> Szia
>> .                                -----
                                         | Csak a vegzo "." utan ellenorzi
                                         | Postfix a header-t meg body-t.
                                         |
                                         | -> header_checks
                                         | -> mime_header_checks
                                         | -> body_checks
                                         |
                                    -----
<< 550 Error: Szia-szia.
>> QUIT
<< 221 Bye

Itt latjuk, hogy biza nem jott at a level. Miert is? Hiaba van a header_check.pcre fileban, hogy fonok@domain.hu -tol fogadhatunk levelet, mert elotte van egy olyan, hogy minden "szia" Subject-es levelet utasitson vissza egy "Szia-szia." hibauzenettel, amit lathatunk meg is tett.

Tehat celszeru elore rakni azt a sort, melyet engedelyezunk.

Linkek

http://www.securitysage.com/guides/postfix_uce.html
http://www.mengwong.com/misc/postfix-uce-guide.txt
http://jimsun.linxnet.com/misc/postfix-anti-UCE.txt
http://www.postfix.org/uce.html
http://www.postfix.org/docs.html

Copyright / License

Copyright (c) 2003 Istvan Sebestyen <istvan@chains.ch> All rights reserved.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Author.

Thanks

Special thanks to Gergely Nagy <algernon@bonehunter.rulez.org> on the #linux channel of the hungarian SIRC network.