Cz. 4. Ochrona antywirusowa

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

Przewijanie do góry