Gondolom nem kell leírnom, hogy mit jelent a spamszűrés, mindenki ismeri a spam fogalmát. A spam levelek ellen alapvetően kétféle módon védekezhetünk, az egyik az, amikor a szabályos SMTP működést követeljük meg, a másik esetben a levelek tartalma alapján dönti el a spamszűrő, hogy dobja-e a levelet, vagy kézbesítse. Az első megoldásra a postgrey kényelmes, a második megoldásra majd a későbbiekben visszatérünk, ha a postgrey nem válna be.
Postgrey
Csapjunk a közepébe:
# yum install postgrey # chkconfig postgrey on
Majd hozzuk létre a /etc/sysconfig/postgrey fájlt és írjuk bele az alábbit:
options="--unix=/var/spool/postfix/postgrey/socket --delay=60 --greylist-text 'User disk quota has been exceeded'"
Ennek a lényege az, hogy 60 másodperc után engedi be az ismeretlen feladótól és szerverről származó leveleket, és ennyi a működésének alapja. A normál SMTP szerver újraküldi a levelet, a spammer pedig nem fog azzal szórakozni, hogy újraküldje. Ha mégis elolvassa az üzenetet, akkor azt látja, hogy a felhasználó átmenetileg nem képes leveleket fogadni, mert betelt a neki szánt terület (az SMTP szerverek szoktak ilyen választ küldeni, ekkor a küldő szerver kicsit később újra megpróbálja a levelet átadni, hátha közben lett hely).
Indítsuk el a szolgáltatást:
# service postgrey start Starting postgrey: [ OK ]
Majd nézzük meg a naplót a /var/log/maillog állományban:
Jun 27 08:29:17 2619 postgrey[31851]: Process Backgrounded Jun 27 08:29:17 2619 postgrey[31851]: 2012/06/27-08:29:17 postgrey (type Net::Server::Multiplex) starting! pid(31851) Jun 27 08:29:17 2619 postgrey[31851]: Binding to UNIX socket file /var/spool/postfix/postgrey/socket using SOCK_STREAM#012 Jun 27 08:29:17 2619 postgrey[31851]: Setting gid to "496 496" Jun 27 08:29:17 2619 postgrey[31851]: Setting uid to "496"
Tökéletes, egy apróság van vissza, a Postfix-et megtanítani arra, hogy kérdezze meg a Postgrey-t a levél átvételének lehetőségéről, ehhez egy – már meglévő – sort kell módosítanunk a /etc/postfix/main.cf fájlban:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:postgrey/socket, permit
Majd újra kell indítanunk a Postfix szolgáltatást:
# service postfix restart Shutting down postfix: [ OK ] Starting postfix: [ OK ]
Próbáljuk ki, működik-e:
$ telnet 193.178.119.31 25 Trying 193.178.119.31... Connected to javaforum.hu. Escape character is '^]'. 220 mail.javaforum.hu ESMTP Postfix HELO javaforum.hu 250 mail.javaforum.hu mail from: auth.gabor@gmail.com 250 2.1.0 Ok Rcpt to: felhasznalo@javaforum.hu 450 4.2.0 <felhasznalo@javaforum.hu>: Recipient address rejected: User disk quota has been exceeded
Hát a leveleket már visszadobja:
Jun 27 08:32:40 2619 postgrey[324]: action=greylist, reason=new, client_name=ebo.hu, client_address=193.142.214.109, sender=auth.gabor@gmail.com, recipient=felhasznalo@javaforum.hu Jun 27 08:32:40 2619 postfix/smtpd[32674]: NOQUEUE: reject: RCPT from ebo.hu[193.142.214.109]: 450 4.2.0 <felhasznalo@javaforum.hu>: Recipient address rejected: User disk quota has been exceeded; from=<auth.gabor@gmail.com> to=<felhasznalo@javaforum.hu> proto=SMTP helo=<javaforum.hu>
Látjuk a naplórészletben, hogy új kliensnek gondolta az úgynevezett tripletet (client_name – sender – recipient), várjuk meg a megadott 60 másodpercet és próbáljuk újra:
$ telnet 193.178.119.31 25 Trying 193.178.119.31... Connected to javaforum.hu. Escape character is '^]'. 220 mail.javaforum.hu ESMTP Postfix HELO javaforum.hu 250 mail.javaforum.hu mail from: auth.gabor@gmail.com 250 2.1.0 Ok Rcpt to: felhasznalo@javaforum.hu 250 2.1.5 Ok quit 221 2.0.0 Bye Connection closed by foreign host.
Működik, nagyszerű!