Instalacja skanera AV/AS do poczty
Instalacja skanowania Antywirusowego (AV) i Antyspamowego (AS) do systemu poczty
Przełączamy się na roota i insalujemy potrzebne oprogramowanie:
sudo -i
aptitude update
aptitude install amavisd-new
aptitude install clamav-daemon
aptitude install spamassassin
SpamAssassin jest domyślnie wyłączony, o czym nas informuje przy instalacji, aby go włączyć należy wyedytować plik /etc/default/spamassassin
i ustawić:
vi /etc/default/spamassassin
ENABLED=1
CRON=1
Uruchamiamy serwisy SpamAssassin i ClamAV daemon, w przypadku ClamAV należy zaczekać aż freshclam skończy ściągać aktualne bazy wirusów, to trochę trwa za pierwszym razem:
service spamassassin start
service clamav-daemon start
Pora zajrzeć do konfiguracji Amavisa i trochę go poustawiać, na początek sprawdźcie czy zawartość plików 05-domain_id
i 05-node_id
jest właściwa. Później włączymy skanowanie AV/AS, bo domyślnie jest wyłączone w konfiguracji:
cd /etc/amavis/conf.d
vi 15-content_filter_mode
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:
#@bypass_virus_checks_maps = (
# \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
Zgodnie z zaleceniem wyrzucamy komentarze i tym samym włączamy skanowanie AV/AS:
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Tyle na razie wystarczy, jeśli nie znacie Amavisa, to proponuję zostawić na razie wartości domyślne, zrestartować go i prześledzić logi:
service amavis restart
tail -n 100 -f /var/log/mail.log
Proszę zwrócić szczególną uwagę na to czy został załadowany kod AV i AS oraz czy zostały znalezione programy antywirusowe:
...
Dec 28 XX:XX:00 hostname amavis[7287]: ANTI-VIRUS code loaded
Dec 28 XX:XX:00 hostname amavis[7287]: ANTI-SPAM code loaded
Dec 28 XX:XX:00 hostname amavis[7287]: ANTI-SPAM-EXT code NOT loaded
Dec 28 XX:XX:00 hostname amavis[7287]: ANTI-SPAM-C code NOT loaded
Dec 28 XX:XX:00 hostname amavis[7287]: ANTI-SPAM-SA code loaded
...
Dec 28 XX:XX:00 hostname amavis[7287]: Using primary internal av scanner code for ClamAV-clamd
Dec 28 XX:XX:00 hostname amavis[7287]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
...
Zwrócicie też pewnie uwagę na kilka linii powyżej, gdzie amavis zeznaje, że nie może znaleźć dekoderów dla dość popularnych rozszerzeń plików, np. arj, rar, cab itp.
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .7z tried: 7zr, 7za, 7z
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .rar tried: unrar-free
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .arj tried: arj, unarj
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .arc tried: nomarch, arc
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .zoo tried: zoo
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .lha
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .doc tried: ripole
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .cab tried: cabextract
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .tnef
Dec 28 XX:XX:00 hostname amavis[7287]: Internal decoder for .tnef
Dec 28 XX:XX:00 hostname amavis[7287]: No decoder for .exe tried: unrar-free; arj, unarj
Najlepiej będzie zainstalować te najbardziej popularne:
aptitude install arj unrar-free ripole cabextract arc zoo
service amavis restart
I już powinno być lepiej. Sprawdźmy jeszcze czy amavis działa i słucha na odpowiednim porcie:
netstat -an|grep 10024
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN
Skoro słucha, to możemy przejść do konfiguracji MTA, żeby z niego skorzystał, ja oczywiście użyję postfixa, sugeruję się wspomóc dokumentacją, którą znajdziecie w /usr/share/doc/amavisd-new
:
zless /usr/share/doc/amavisd-new/README.postfix.gz
Tam znajdujemy sobie sekcję dotyczącą konfiguracji transportu, czytamy uważnie, po czym wchodzimy do katalogu konfiguracyjnego postfixa i edytujemy master.cf
:
cd /etc/postfix
vi master.cf
Dodajemy odpowiednie wpisy:
#
# Feed and server for amavisd-new
#
amavisfeed unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o lmtp_tls_note_starttls_offer=no
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
-o local_header_rewrite_clients=
-o smtpd_milters=
-o local_recipient_maps=
-o relay_recipient_maps=
Restartujemy postfixa i sprawdzamy logi:
service postfix restart
tail /var/log/mail.log
Jeśli postfix wystartował, to sprawdzamy czy nasz amavis odpowiada tak jak trzeba:
telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
ehlo test
250-[127.0.0.1]
250-VRFY
250-PIPELINING
250-SIZE
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 XFORWARD NAME ADDR PORT PROTO HELO SOURCE
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.
oraz czy postfix uruchomił serwer, na który amavis będzie zwracał pocztę po skanowaniu:
telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)
ehlo test
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
Tak to powinno wyglądać, jeśli coś nie działa to należy przejrzeć logi i usprawnić, instrukcję postępowania znajdziecie w wymienionej dokumentacji, ewentualnie proszę opisać problem w komentarzu i przytoczyć fragmenty logów to postaram się pomóc.
Jeśli wszystko działa, to dodajemy content_filter
do konfiguracji postfixa, restartujemy go i sprawdzamy logi:
postconf -e content_filter=amavisfeed:[127.0.0.1]:10024
service postfix restart
tail /var/log/mail.log
Pora na test empiryczny, czyli wysłanie poczty, najlepiej na własną skrzynkę. I tu zapewne okaże się, że sprawdza się dobrze znane prawo Murphy’ego: Jeśli natarcie posuwa się bez przeszkód – właśnie wchodzisz w pułapkę. 😉
W logach może pojawić się coś takiego:
Dec 28 XX:XX:59 hostname amavis[8253]: (08253-02) (!)run_av (ClamAV-clamd) FAILED - unexpected , output="/var/lib/amavis/tmp/amavis-20101228TXXXX59-08253/parts: lstat() failed: Permission denied. ERROR\n"
Dec 28 XX:XX:59 hostname amavis[8253]: (08253-02) (!)ClamAV-clamd av-scanner FAILED: CODE(0x2607068) unexpected , output="/var/lib/amavis/tmp/amavis-20101228TXXXX59-08253/parts: lstat() failed: Permission denied. ERROR\n" at (eval 115) line 594.
Dec 28 XX:XX:59 hostname amavis[8253]: (08253-02) (!!)WARN: all primary virus scanners failed, considering backups
Mając na uwadze moje wcześniejsze doświadczenia spodziewałem się tego, ale celowo nie zmieniłem wcześniej, gdyż w ten sposób łatwiej zapamiętać po co robi się pewne rzeczy niż wtedy gdy się je po prostu przeklepuje. Należy sprawdzić w konfiguracji clamava czy ma włączoną opcję AllowSupplementaryGroups
i dodać użytkownikowi clamav
grupę amavis
, po czym zrestartować usługi:
grep AllowSupp /etc/clamav/clamd.conf
AllowSupplementaryGroups true
usermod -G amavis clamav
service clamav-daemon restart
service amavis restart
tail -f /var/log/mail.log
Kolejna próba wysłania poczty powinna zakończyć się już bez błędów i ostrzeżeń, skaner AV/AS jest zainstalowany i podłączony do MTA.
W następnym odcinku mam zamiar opisać instalację Greylistingu w postaci oprogramowania Postgrey oraz uszczelnienie Postfixa przy użyciu wbudowanych restrykcji.