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
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ű! 🙂