Tym razem zadbamy o ochronę anty-wirusową naszego serwera. Konfiguracja finalna będzie wyglądała w ten sposób, że wszystkie wiadomości będą automatycznie poddawane skanowaniu pod kątem niebezpiecznych zawartości.
1) Instalacja: zypper install -y clamav (w Open Suse polecenie to zainstaluje również demona / usługę clamd, w innych dystrybucjach zainstaluj dodatkowo pakiet clamav-daemon).
2) Pobieramy najnowsze bazy sygnatur wirusów poleceniem: freshclam
DatabaseMirror db.pl.clamav.net
DatabaseMirror database.clamav.net
ClamAV update process started at Thu Aug 13 12:37:16 2015
Downloading main.cvd [100%]
main.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Downloading daily.cvd [100%]
daily.cvd updated (version: 20782, sigs: 1523540, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 266, sigs: 47, f-level: 63, builder: anvilleg)
Database updated (3947812 signatures) from database.clamav.net (IP: 168.143.19.95)
Konfiguracja freshclam-a znajduje się w pliku /etc/freshclam.conf. Zazwyczaj dodatkowa konfiguracja nie jest wymagana, ale można np. zoptymalizować czas pobierania sygnatur dodając dodatkowy mirror ze znakiem kraju w którym jest on używany. U nas wpis może mieć następującą postać:
DatabaseMirror db.pl.clamav.net
DatabaseMirror database.clamav.net
W tym przypadku domyślnym mirrorem jest mirror PL, natomiast jeśli z jakiegoś powodu nie będzie dostępny zostanie zastosowany mirror główny (database.clamav.net).
Jeżeli chcemy, aby bazy aktualizowały się automatycznie (co jakiś czas np. co 2 godziny) ustawiamy następujące zadanie w cronie:
crontab -e
0 */2 * * * /usr/bin/freshclam
Zapisz plik i zweryfikuj, czy nasze zadanie się dodało: crontab -l Sprawdź również, czy o określonym czasie pojawią się odpowiednie wpisy w logu /var/log/mail:
2015-08-25T07:42:55.772180+02:00 mail freshclam[1340]: ClamAV update process started at Tue Aug 25 07:42:55 2015
3) Zeskanujmy teraz (na próbę) katalog /home. Do podstawowego skanowania używamy programu clamscan.
clamscan –infected –remove –recursive /home
———– SCAN SUMMARY ———–
Known viruses: 3942273
Engine version: 0.98.7
Scanned directories: 139
Scanned files: 111
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 11.190 sec (0 m 11 s)
Należy jednak pamiętać, że program clamscan za każdym razem ładuje pełne biblioteki sygnatur do pamięci więc może to wpływać na wydajność systemu przy uruchomieniu wielu procesów w jednym czasie. Alternatywą jest clamdscan, który używa procesów demona clamd, ale w tym przypadku demon ten potrafi tylko zeskanować pliki / katalogi, do których ma uprawnienia. Więcej informacji dot. narzędzi instalowanych z clamav, zasadę ich działania itd. znajdziesz w następującym artykule: http://nfsec.pl/hakin9/clamav.pdf
4) A teraz pobieramy wirusa (spokojnie, to tylko kod testowy 😉
cd /home
wget http://www.eicar.org/download/eicar.com
Ponawiamy skanowanie:
clamscan –infected –remove –recursive /home
Teraz w scan summary widzimy:
Infected files: 1, to oznacza, że nasz antywirus działa.
5) Instalujemy teraz amavisd-new [a mail virus daemon], który posłuży do integracji zainstalowanego wcześniej programu antywirusowego ClamAV z Postfixem. Jeżeli nie zrobiłeś tego wcześniej w tym miejscu powinieneś również zainstalować narzędzia służące do dekompresji plików np. zoo unzip unrar bzip2 itp. (narzędzia te są niezbędne, aby umożliwić amavis-owi "zaglądanie" do spakowanych załączników maila).
zypper in -y amavisd-new
opcjonalnie (jeżeli brak tych pakietów w systemie):
zypper in -y zoo unzip unrar bzip2 p7zip
6) Konfiguracja amavisd:
vi /etc/amavisd.conf
# linia 20: nazwa obsługiwanej domeny
$mydomain = 'moja-domena.com';
# linia 149: pełna nazwa hosta FQDN
$myhostname = 'mail.moja-domena.com'; #można też tak: mail.$mydomain;
# linia 151: odkomentuj
$notify_method = 'smtp:[127.0.0.1]:10025';
$forward_method = 'smtp:[127.0.0.1]:10025';
# linia 154: odkomentuj
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_BOUNCE;
$final_spam_destiny = D_BOUNCE;
$final_bad_header_destiny = D_PASS;
$bad_header_quarantine_method = undef;
# linia 379: odkomentuj (jeżeli zakomentowane):
['ClamAV-clamd',
&ask_daemon, ["CONTSCAN {} ", "/var/lib/clamav/clamd-socket-socket"],
qr/OK$/, qr/FOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
Dodatkowo zamień wpis /var/lib/clamav/clamd-socket-socket na /var/run/clamav/clamd-socket (dla OpenSuse). W przeciwnym wypadku w logach dostrzeżesz następujące ostrzeżenia: amavis[1277]: (01277-05) (!)connect to /var/lib/clamav/clamd-socket-socket failed, attempt #1: Can't connect to a UNIX socket /var/lib/clamav/clamd-socket-socket: No such file or directory. Ostateczna postać tego wpisu:
['ClamAV-clamd',
&ask_daemon, ["CONTSCAN {} ", "/var/run/clamav/clamd-socket"],
qr/OK$/, qr/FOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
Zwróć też uwagę na linię 225 i wpis:
# block certain double extensions in filenames
qr'^(?!cid:).*.[^./]*[A-Za-z][^./]*.s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.s]*$'i,
Wpis ten zablokuje wszystkie maile z załącznikami o podanym rozszerzeniu np. exe lub dll. Jeżeli chcesz blokować pliki o innych rozszerzeniach po prostu je tu zdefiniuj.
7) Dodaj poniższy wpis do pliku /etc/postfix/main.cf
vi /etc/postfix/main.cf
content_filter=smtp-amavis:[127.0.0.1]:10024 #10024 standardowy port na którym nasłuchuje amavis. Postfix będzie przesyłał otrzymaną pocztę do procesu Amavis-a (na port 10024). Wiadomość ta jest następnie rozdzielana na "czynniki pierwsze", Amavis ją analizuje (skanuje) i przesyła z powrotem do kolejki Postfixa portem 10025 (decyduje o tym konfiguracja w plikach /etc/postfix/main.cf oraz /etc/postfix/master.cf, patrz punkt 7 oraz 8).
8) Dodaj poniższe wpisy do pliku /etc/postfix/master.cf, lub je odszukaj i odkomentuj.
vi /etc/postfix/master.cf
smtp-amavis unix – – n – 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
localhost: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_unknown_recipient_checks, no_header_body_checks, no_address_mappings
9) Uruchomienie amavis-a (+ dodanie do autostartu) oraz restart postfixa
/etc/init.d/amavis start
chkconfig amavis on
service postfix restart
10) Test poprawności działania:
Wyślij / odbierz dowolną wiadomość e-mail. Jeżeli konfiguracja została wykonana prawidłowo w nagłówku wiadomości powinien pojawić się następujący wpis:
X-Virus-Scanned: amavisd-new at mail.moja-domena.pl
Również w logu /var/log/mail zobaczysz:
2015-08-18T12:28:18.358612+02:00 mail amavis[2703]: (02703-01) Passed CLEAN {RelayedInternal}, MYNETS LOCAL [127.0.0.1]:44041 -> , Queue-ID: 0D7661C0FC8, Message-ID: <20150818102755.0D7661C0FC8@mail.moja-domena.pl>, mail_id: Mk4oe5hBv6SS, Hits: 0.207, size: 357, queued_as: 53FFD1C0FCE, 5348 ms
Należy również sprawdzić logi (/var/log/mail) czy nie istnieją błędy / ostrzeżenia podczas uruchamiania / restartu Postfixa / Amavisa.
W przypadku wystąpienia różnych problemów możesz sprawdzić, czy usługi nasłuchują na zdefiniowanych portach:
mail:~ # netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:10024 *:* LISTEN 1164/amavisd (maste
tcp 0 0 localhost:10025 *:* LISTEN 1243/master
rn
Info o znalezieniu wirusa…
Zapewne po niedługim czasie w logach (/var/log/mail) pojawi się następujący wpis informujący o znalezieniu wirusa w załączniku maila:
2015-08-26T10:13:52.660353+02:00 mail amavis[4344]: (04344-05) Blocked INFECTED (Suspect.DoubleExtension- zippwd- 15) {DiscardedInbound, Quarantined}, [124.194.37.66]:4035 [22.25.42.90] -> , quarantine: virus-PMqCzgm3VqNz, Queue-ID: 584E7C0489, Message-ID: , mail_id: PMqCzgm3VqNz, Hits: -, size: 182008, 191 ms
2015-08-26T10:13:52.663400+02:00 mail postfix/smtp[4720]: 584E7C0489: to=, relay=127.0.0.1[127.0.0.1]:10024, delay=1.4, delays=1.2/0/0/0.19, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=04344-05 – INFECTED: Suspect.DoubleExtension-zippwd-15)
Możesz również otrzymywać odpowiednią informację na maila, domyślnie wiadomości te są wysyłane do użytkownika "virusalert", ale możesz odpowiednio skonfigurować alias dla Twojego użytkownika (przykład definicji z pliku /etc/aliases):
# amavis
virusalert: pkania
Więcej na temat definiowania aliasów znajdziesz [ tutaj ].
Przykład otrzymywanej wiadomości:
A virus was found: Suspect.DoubleExtension-zippwd-15
Banned name: .exe,.exe-ms,Uzupelnienie dokumentu_doc.pdf.exe Scanner detecting a virus: ClamAV-clamd
Content type: Virus
Internal reference code for the message is 04339-05/7fTmegUrf1e7
First upstream SMTP client IP address: [124.194.37.66]:4035 Received from: 124.194.37.66 < 199.21.7.32 < 130.95.80.23
Virus scanner output: p007: Suspect.DoubleExtension-zippwd-15 FOUND