Archiwa tagu: hermes

Hermes

Wśród wielu sposobów walki ze spamem, oprócz typowych systemów antyspamowych (spamassassin, dspam), dużą popularność zyskały systemy oparte na tzw greylistingu. Program Hermes jest jednym z nich.
Zalety programu to niewielkie obciążenie systemu i duża niezawodność, nie są to bowiem skrypty w językach wysokiego poziomu i oprócz sqlite3 nie wymaga żadnych innych skryptów i programów dodatkowych. Przygotowanie go do pracy jest również bardzo proste. Współpracuje też z każdym MTA, który potrafimy przestawić ze standardowego portu na inny.

Pakiet instalujemy poleceniem pacman -S hermes (od 13.08.2007 jest w repozytorium testing). Po instalacji należy przejść do katalogu /etc/hermes i poddać edycji plik hermes.conf. Należy tam wpisać swoją domenę w dwóch liniach:
server_host = „twoja.domena.pl lub localhost” (jeśli po wpisaniu localhost, będą problemy, wpisac domenę)
hostname = „twoja.domena.pl”

Następnie należy zmienić sposób uruchamiania swojego MTA. W NND będzie to w 99,99% exim.
Jeśli mamy nieco starsza wersję, zmieniamy w /etc/rc.d/exim port z 25 na 2525.
Będzie wyglądać to tak:
/usr/sbin/exim -bd -q15m -oX 2525
Jest też możliwy inny sposób – bardziej elegancki.
W pliku startowym zostawiamy wyłącznie wpis /usr/sbin/exim -bd -q15m i resztę ustawiamy w pliku exim.conf, dodając w sekcji MAIN CONFIGURATION (można na samym początku):
daemon_smtp_ports = 2525 : 465
tls_on_connect_ports = 465

W przypadku NND, exima i hermesa to jest już koniec czynności konfiguracyjnych. Jeśli mamy inny MTA, to należy się dobrze przyjrzeć plikowi konfiguracyjnemu. Trzeba będzie jeszcze zmienić ścieżkę do plików klucza i certyfikatu, no i zastanowić się w jaki sposób demona smtp uruchomić na innym porcie.
Teraz wystarczy wykonać dwie czynności:
/etc/rc.d/exim restart
/etc/rc.d/hermes start (należy hermes dopisać do sekcji DAEMONS w rc.conf)
Możemy z jakiegoś innego hosta sprawdzić działanie programu, używając komendy telnet nasza.domena 25. Poniżej listing tego polecenia:

[maciek@klaptop ~]$ telnet domena.org 25
Trying 83.21.201.21…
Connected to domena.org.
Escape character is ‚^]’.
220 domena.org ESMTP

EHLO [127.0.0.1]
250-domena.org
250-AUTH CRAM-MD5
250-AUTH=CRAM-MD5
250-STARTTLS
250-SIZE 8388608
250 8BITMIME

MAIL FROM: maciek@domena
250 ok
RCPT TO: maciek@inna.domena
421 Greylisted!! Please try again in a few minutes.

Pochyłą czcionką zaznaczono te fragmenty, które są odpowiedziami serwera.
Łatwo zauważyć, że hermes wprowadza krótkie opóźnienia w komunikacji. Większość automatów spamerskich nie czeka na odpowiedzi serwera, tylko od razu wysyłają ciąg komend (MAIL FROM, RCPT TO, DATA), w tym wypadku brak komunikacji dwustronej spowoduje, że kolejne po pierwszej komendzie pójdą w niebyt, bowiem hermes wymaga komunikacji dwustronnej. Jeśli jednak automat jest doskonalszy i ma możliwość dwustronnej komunikacji, i zgadza się na opóźnienia, to dostaje komunikat o błędzie tymczasowym 421 z komentarzem „Greylisted! Please try again in a few minutes.” Spamerzy nie mają czasu na takie zabawy, więc nie spróbują tego maila wysłać ponownie za kilka minut. Zapewne spróbują później, ale najczęściej z innym losowo wybranym nadawcą i być moze z innego IP, a to uruchomi ponownie całą procedurę.
Normalny serwer smtp połaczy się po kilku minutach i wtedy poczta zostanie przyjęta bez problemu. Z doświadczeń wynika, że serwery na eximie, postfixie i qmailu radza sobie z tym bez problemu, jedynie na eximie 3.36 można było zaobserwowac czasami opóźnienie większe niż kilka minut.
Dodatkową zaletą programu jest to, że tworzy on sobie białą listę nadawców, którzy są przetrzymywani przez 36 dni. W ten sposób nasz stały korespondent zostanie opóźniony tylko przy pierwszym połączeniu. Apetyt na zasoby systemowe hermes ma naprawdę niewielki, bowiem nie analizuje listów, a jedynie na moment odwołuje się do swojej bazy w celu sprawdzenia serwera i nadawcy.
Na koniec jeszcze mała uwaga o pewnej wadzie hermesa. Należy zmienić ustawienia w programach pocztowych naszych użytkowników, o ile nadal korzystają z mało bezpiecznego portu 25. Ponieważ w wielu publikacjach podkreślano, że najlepiej używać smtps na porcie 465, więc mam nadzieję, że większość użytkowników konfiguruje bezpieczną pocztę z SSL. Jednak jeśli ktoś korzystał z portu 25, w swoim programie pocztowym musi go zmienić na 2525. Zaś administrator w ustawieniach firewalla powinien otworzyć ten port. W standardowym firewallu NND można dodać linijkę:
$i -A INPUT -p tcp -i $EXTIF –dport 2525 -j ACCEPT
w sekcji dotyczącej poczty.
Użytkownicy zaawansowani mogą skorzystać także z innych opcji hermesa – posiada on możliwość współpracowania z serwerami blacklist i whitelist, a także możliwość ustawienia procentu restrykcyjności korzystania z tych list. Obecnie wydaje się, że hermes jest najprostszym i jednocześnie bardzo skutecznym sposobem walki ze spamem.
Uzupełnienia
Do pakietu zostały dodane dwa skrypty hermes_black i hermes_white – skrypty pozwalają z konsoli w bardzo prosty sposób, bez zagłębiania się w niuanse działania sqlite3, ręcznie przeglądać czarną i białą listę, dodawać i usuwać wpisy. Jest to niezwykle przydatne np. gdy dostajemy pocztę z gmail.com, który co 15 minut ponawia wysyłanie poczty z innego numeru IP. Po dodaniu tych IP do białej listy nie ma już problemu z otrzymywaniem poczty od użytkowników gmaila.
Jako dodatek do hermesa powstał hermes-panel. Jest to zestaw skryptów www, które uruchomimy mając serwer www i php. Pierwszą czynnością po instalacji musi być założenie pliku .htaccess i ustawienie usera oraz hasła do panelu. Bez tego, będzie on dostępny dla każdego. Panel służy do dodawania IP do białej listy, przeglądanie szarej i dodawanie wpisów własnych do czarnej listy, wymaga apache i php.
Znane problemy
Niewiele osób na razie sprawdziło pakiet. W chwili uzupełniania artykułu znane mi są dwa problemy na sześc działających instalacji. Jeden z problemów to być może nieprawidłowo założona baza przy pierwszym starcie programu, należy wówczas bazę usunąc i uruchomić program na nowo – po sprawdzeniu praw katalogu /var/lib/hermes.
Drugi problem wynikał z nieprawidłowej identyfikacji sieciowej. Brakowało interfejsu lo i odpowiedniego wpisu w hosts dotyczącego 127.0.0.1. W razie problemów z resolwowaniem nazwy serwera należy w zmiennej „server_host” wpisac albo numer IP komputera w LAN,  albo IP zewnętrzne (w przypadku serwera forwardowanego raczej to pierwsze). Wpisanie localhost – jak to zostało podane w dyskusji na forum, owszem skutkuje, ale exim staje się open relay.

autor: W. Trąmpczyński (Maciek)