ClamAV Logo ARTYKUŁ Z SERII
Ochrona antywirusowa z wykorzystaniem ClamAV

   Jak zmusić Sambę do pracy z ClamAV
 

Spis treści
1. Wprowadzenie
2. Jak to działa?
3. Zapotrzebowanie na oprogramowanie
4. Konfiguracja serwera Samba
5. Kompilacja ClamAV
6. Uruchamianie
7. Obserwacje i analiza logów


Najnowsza wersja tego dokumentu jest zawsze dostępna pod tym adresem.

Artykuł ten jest drugim z serii poświęconej ochronie antywirusowej w systemach *nixowych z wykorzystaniem programu antywirusowego ClamAV. Ponieważ każdy z nich traktuje o innych aspektach tej ochrony i artykuły nie stanowią jednej spójnej całości, część opisów w każdym z nich będzie się powtarzać. Nie chcę bowiem żeby czytelnicy musieli się przekopywać przez wszystkie z artykułów aby znaleźć dodatkowe informacje. Najistotniejsze zagadnienia tj. krótkie opisy ClamAV i jego środowiska, aktualizację baz danych wirusów, itp. omawiam w każdym z moich tekstów. Strukturę dokumentów również postaram się zachować w miarę ujednoliconą.
Chrońmy więc biedne windowsy naszych użytkowników przed złowrogimi, imperialistycznymi wirusami. Niech moc będzie z Wami :-)


1.   Wprowadzenie

Jak już w tytule mogliście przeczytać, opiszę sposób w jaki można połączyć Sambę z tworzonym na licencji GPL, programem antywirusowym ClamAV. Projekt zapoczątkowany został przez Tomasza Kojma a obecnie rozwijany jest przez międzynarodowy zespół programistów.
W chwili powstawania tego HOWTO, ostatnią stabilną wersją ClamAV był 0.67.1 tak więc wszelkie pliki konfiguracyjne i rozwiązania będą omawiane w oparciu o tę wersję. Zachęcam Was również do prób ze snapshotami. Można tam znaleźć naprawdę wiele nowych i przydatnych funkcji.
Połączenie Samby z ClamAV w porównaniu z połączeniem Sendmaila z ClamAV jest dziecinnie proste. Konfiguracja ogranicza się w zasadzie do kilku podstawowych kroków. Znajomość serwera Samba przyda się jednak bardzo i osoby dobrze poruszające się w pliku konfiguracyjnym tego pakietu będą miały ułatwione zadanie.


2.   Jak to działa?

Pomostem pomiędzy Sambą a ClamAV będzie samba-vscan. Autorem programu jest Rainer Link a prace nad projektem zapoczątkowane zostały w połowie maja 2001.

samba-vscan jest rodzajem filtra, który operuje na wirtualnym systemie plików Samby - VFS (ang. Virtual File System). VFS to nic innego jak zbiór udogodnień dodanych do już istniejącego systemu plików. Wprowadza między innymi dodatkowe wywołania; operacje na katalogach (opendir, readdir, mkdir, itd) i plikach (open, read, close, write, itd).
Wywołania te pozwalają programowi samba-vscan na podczepienie się pod nie i wykonanie pewnego kodu a dokładniej sprawdzenia pliku pod kątem występowania w nim wirusów. Więcej na temat VFS dowiecie się tutaj lub w dokumentacji Samby.

Co to oznacza w praktyce? Otóż każde żądanie otwarcia katalogu/pliku stworzenie nowego lub jakakolwiek operacja na katalogach lub plikach, może być filtrowana a następnie może zostać podjęta decyzja co zrobić z danym obiektem.

samba-vscan łączy się z demonem ClamAV - clamd poprzez local socket. W tym celu w pliku konfiguracyjnym clamav.conf musimy określić ścieżkę do socketu, np:
LocalSocket /var/run/clamav/clamd.sock		# Określenie pliku dla lokalnego socketu
Po połączeniu z clamd, samba-vscan sprawdza plik pod kątem występowania w nim wirusów.


3.   Zapotrzebowanie na oprogramowanie

- ClamAV v0.67.1 - http://prdownloads.sourceforge.net/clamav/
- Samba 3.0.1 - ftp://giswitch.sggw.waw.pl/pub/unix/samba/
- samba-vscan 0.3.5-alpha2 - http://www.openantivirus.org/snapshots/
ClamAV posiada wbudowaną obsługę formatów RAR (2.0), Zip, Gzip, Bzip2.

 Skrypty startowe
- Skrypty startowe, które uruchamiają Sambę i clamd:
   rc.samba
   rc.clamd

Skrypty te zostały zrobione z myślą o dystrybucjach, które jako systemu startowego używają tego, który wywodzi się z systemów BSD. Ja używam dwóch dystrybucji, Slackware i shtOS i w tych dystrybucjach skrypty będą działać prawidłowo. Jeśli używacie systemu startowego System V, to musicie sami stworzyć sobie odpowiednie skrypty startowe.
Głównym skryptem startowym jest rc.samba. Po uruchomieniu go z opcją start zostanie również uruchomiony skrypt rc.clamd.


4.   Konfiguracja serwera Samba

Ja używam obecnie wersji 3.0.1 ale samba-vscan działa również z wcześniejszymi wersjami Samby.
W dokumentacji samba-vscan, znajdziecie opisy dla wersji Samby wczesniejszych niz 2.2.4. Od wersji >= 2.2.4 az do aktualnej serii 3.0.x sposób instalacji jest taki sam.

Do dzieła:
Proponuję na początek dokładne zapoznanie się z zawartością pliku INSTALL pakietu samba-vscan. Może wyjaśni Wam ewentualne wątpliwośći i pytania a na pewno ułatwi zrozumienie działania całego rozwiązania.
Musicie pamiętać jeszcze o tym, że potrzebne nam są źródła Samby, nie wystarczy zwykła instalacja pakietów binarnych dla Waszej dystrybucji. Źródeł Samby wymaga samba-vscan.

Zaczynamy od kompilacji Samby. Ja stosuję kilka standardowych opcji dla configure, oto one:
root@linux: cd samba_source/source

Następnie wydajemy polecenie configure wraz z jego parametrami;

CFLAGS="-march=i686 -mcpu=i686" \
./configure \
--enable-cups \
--with-fhs \
--prefix=/usr \
--localstatedir=/var \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--with-lockdir=/var/cache/samba \
--sysconfdir=/etc \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba/private \
--with-codepagedir=/etc/codepages \
--with-smbmount \
--with-syslog \
--with-utmp \
--with-sambabook=/usr/share/swat/using_samba \
--with-ssl \
--with-sslinc=/usr/include/openssl \
--with-ssllib=/usr \
--with-msdfs \
--with-vfs \
--with-libsmbclient \
i386-slackware-linux

Najważniejszą z opcji jest --with-vfs czyli kompilacja wirtualnego systemu plików, bez tego nici z naszej ochrony antywirusowej :)

root@linux: make proto
root@linux: make
root@linux: make install
Po tych czynnościach Samba jest już zainstalowana i gotowa do działania. Musicie jeszcze wykonać standarowe czynności tj, stworzenie pliku /etc/samba/smb.conf dodanie użytkowników i przydzielenie zasobów. Ale tego jak to zrobić dowiecie się z dokumentacji Samby :>.

Teraz zainstalujemy samba-vscan. Przed kompilacją musimy jescze określić nazwę dla socketu demona clamd z jakim będzie się łączył samba-vscan. W tym celu musimy wyedytować plik samba-vscan_source/clamav/vscan-clamav.h a w nim następującą linijkę:
#define VSCAN_CLAMD_SOCKET_NAME      "/var/run/clamd"
i zmienić ją na 
#define VSCAN_CLAMD_SOCKET_NAME      "/var/run/clamav/clamd.sock"
a następnie:
root@linux: cd samba-vscan_source/
root@linux: ./configure --prefix=/usr --with-samba-source=samba_source/source
configure wypisze nam jakie moduły są dostępne w pakiecie. Wybieramy clamav i tylko dla niego skompilujemy odpowiedni moduł.
root@linux: make clamav
UWAGA: Nie należy uruchamiać polecenia make install

Po zakończeniu poprawnej kompilacji, musimy skopiować bibliotekę vscan-clamav.so do katalogu vfs bibliotek Samby.
cp samba-vscan_source/vscan-clamav.so /usr/lib/samba/vfs/vscan-clamav.so
Teraz należy przekopiować plik samba-vscan_source/openantivirus/vscan-oav.conf do katalogu z plikiem konfiguracyjnym Samby, czyli do /etc/samba ale należy mu zmienić nazwę. Słowo oav w nazwie zamieniamy na nazwę naszego backendu, czyli na clamav.
root@linux: cp samba-vscan_source/openantivirus/vscan-oav.conf /etc/samba/vscan-clamav.conf

W pliku INSTALL pakietu samba-vscan opisane są wszystkie opcje pliku konfiguracyjnego, ale ja postaram się również opisać kilka z nich.
* max file size = [wartość w bajtach]
  To ustawienie pozwala na zdefiniowanie maksymalnego rozmiaru skanowanego pliku. 
  Ustawienie rozmiaru na 0 oznacza, że wszystkie pliki będą skanowane.
  Domyślnie - 0;
  
* verbose file logging = [True/False | yes/no | 1/0]
  Ustawienie tego parametru pozwoli na określenie jakie dane mają być zapisywane do 
  logu systemowego. Jeśli wybierzemy opcję True (yes, 1) wówczas wszystkie informacje
  o dostępie do plików, nawet do nie zainfekowanych, będą logowane.
  Wybranie opcji False, pozwoli na zapisywanie tylko operacji dostępu do zainfekowanych plików.
  Domyślnie - False;

* scan on open = [True/False | yes/no | 1/0]
  Ustala czy pliki mają być skanowane podczas ich otwierania. 
  Domyślnie - yes;

* scan on close = [True/False | yes/no | 1/0]
  Ustala czy pliki mają być skanowane podczas ich zamykania. 
  Domyślnie - yes;

* deny access on error = [True/False | yes/no | 1/0]
  Określa czy dostęp do pliku ma być zabroniony jeśli komunikacja z demonem
  antywirusowym zostanie utracona (nie będzie możliwe sprawdzenie pliku).
  Domyślnie - yes;
  
* deny access on minor error = [True/False | yes/no | 1/0]
  Tak samo jak przy "deny access on error" ale dla mniejszych błędów. 
  Domyślnie - yes.

* send warning message = [True/False | yes/no | 1/0]
  Określa czy wysłać do użytkownika komunikat o znalezionym wirusie poprzez Windows 
  Messenger Service (winpopup).
  Domyślnie - yes.
  UWAGA: W Windows 95/98 musi być uruchomiony klient "winpopup";

* infected file action = [quarantine | delete | nothing]
  Co samba-vscan ma zrobić z zainfekowanym plikiem:
  "quarantine" - plik zostanie przeniesiony do katalogu kwarantanny i zostanie mu 
  zmieniona nazwa. Jeśli ta operacja się nie powiedzie, plik zostanie usunięty;
  "delete" - zainfekowany plik zostanie usunięty;
  "nothing" - zainfekowane pliki pozostaną nietknięte.
  Domyślnie - quarantine;.

* quarantine directory = [scieżka do katalogu]
  Określa ścieżkę do katalogu kwarantanny. 
  Domyślnie /tmp;

* quarantine prefix = [przedrostek]
  Określa przedrostek dla plików kwarantanny. Domyślnie - vir-;

* max lru files entries = [wartość]
  Gdy Windows próbuje otwierać jednocześnie plik w krótkich odstępach czasu,
  samba-vscan używa ostatnio użytego mechanizmu dostępu do pliku aby uniknąć
  wielokrotnego skanowania danego pliku. Ustawienie to pozwala określić maksymalną
  ilość wpisów w liście ostatnio użytych dostępów do plików. 
  0 - wyłącza zupełnie ten mechanizm.
  Domyślne - 100;

* lru file entry lifetime = [wartość]
  Ustawia czas życia wpisów w liście lru (lista ostatnio użytych dostępów do plików).
  Czas podawany jest w sekundach.
  Domyślnie - 5;

* exclude file types = [lista]
  Wyłącza ze skanowania typy plików znajdujące się na liście. Opiera się na typach MIME
  tak jak opcja "file -i". Zobacz dokumentację: man file
  Domyślnie - pusta lista.
A tutaj możecie podejrzeć mój plik konfiguracyjny vscan-clamav.conf.

W pliku /etc/samba/smb.conf musimy jeszcze dodać odpowiednie wpisy dla poszczególnych udziałów, które chcemy chronić. Możemy chronić tylko wybrane udziały lub wszystkie zasoby Samby, to zależy tylko od miejsca w którym umieścimy odpowiednie wpisy w pliku smb.conf. Zasoby z naszymi "specjalnymi programami" możemy pozostawić poza oddziaływaniem programów antywirusowych :)
[vscan]
   comment = virus-protected /samba directory
   path = /samba
   vfs object = vscan-clamav
   vscan-clamav: config-file = /etc/samba/vscan-clamav.conf
   writeable = yes
   browseable = yes
   guest ok = yes
To by było na tyle odnośnie konfiguracji samba-vscan.


5.   Kompilacja ClamAV

Przed rozpoczęciem kompilacji należy dodać nowego użytkownika - clamav
root@linux: groupadd clamav
root@linux: useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
Aby ClamAV skompilował się wraz z clamav-milter, należy uruchomić configure z opcją --enable-milter + jakieś nasze dodatkowe opcje, np:
user@linux: cd clamav_source
user@linux: make clean
user@linux: ./configure --prefix=/usr --sysconfdir=/etc/clamav --datadir=/etc/clamav --with-dbdir=/etc/clamav
user@linux: make
user@linux: make check
user@linux: su
root@linux: make install
Należy jeszcze dokonać edycji pliku /etc/clamav/clamav.conf, czyli pliku konfiguracyjnego ClamAV. Tutaj dostępny jest mój plik clamav.conf

Na koniec należy skopiować najnowsze bazy sygnatur wirusów do katalogu /etc/clamav
Możesz je ściągnąć ze strony http://database.clamav.net/ lub z któregoś z mirrorów.

Polecam stosowanie baz sygnatur w formacie CVD. Poprzednie bazy były w formacie tekstowym, ale w przyszłości nie będą już obsługiwane przez ClamAV.

Pliki baz danych to main.cvd i daily.cvd. Do main.cvd trafiają już sprawdzone sygnaturki, w których sporadycznie pojawiają się jakieś błędy lub niedociągnięcia. W pliku daily.cvd znajdują się ostatnio dodane sygnaturki najnowszych wirusów.
W dniu tworzenia tego dokumentu, ClamAV rozpoznawał ponad 20400 różnych wirusów, robaków i koni trojańskich.

Liczba rozpoznawanych wirusów rośnie bardzo szybko i tylko patrzeć jak doścignie komercyjną konkurencję :-)

Do pobrania najnowszych baz sygnatur można użyć programu freshclam, który potrafi działać jako demon. To rozwiązanie jest o tyle wygodne, że program sam sprawdza, określoną przez nas ilość razy dziennie, czy dostępne są nowe sygnaturki. Jeśli tak to je pobiera a następnie dokonuje przeładowania clamd aby ten rozpoznawał najnowsze wirusy.

Uprawnienia
Jeszcze kilka słów na temat uprawnień. Demon clamd musi być uruchomiony jako root, ale do poprawnego działania wcale nie potrzebuje praw roota. Wystarczą mu ograniczone uprawnienia jakiegoś użytkownika (np. clamav). Poprzez opcję User w pliku clamav.conf, możemy określić na prawach jakiego użytkownika ma pracować clamd. Po uruchomieniu, clamd porzuci uprawnienia roota i przejdzie na niższy poziom z uprawnieniami określonego użytkownika.

Już niedługo dostępne będzie HOWTO, w którym postaram się opisać wszelkie zagadnienia związane z poprawną konfiguracją ClamAV oraz z używaniem innych narzędzi dostępnych w ramach projektu.


6.   Uruchamianie

Przed uruchomieniem skryptów musimy zadbać jeszcze o stworzenie odpowiednich katalogów i nadanie im odpowiednich uprawnień; i tak:
root@linux: chown -R clamav:clamav /etc/clamav
root@linux: mkdir /var/run/clamav; chown -R clamav:clamav /var/run/clamav
root@linux: mkdir /var/log/clamav; chown -R clamav:clamav /var/log/clamav
Teraz wystarczy uruchomić skrypt /etc/rc.d/rc.samba start i wszystko powinno ruszyć. Jako pierwszy uruchomi się demon clamd a po 1 sekundzie Samba. Te sztuczne opóźnienie wprowadzone jest po to aby program zdążył utworzyć swój socket.


7.   Obserwacje i analiza logów

Nie muszę chyba pisać jak ważne jest okresowe przeglądanie logów serwera. W przypadku ClamAV również należy zwrócić uwagę na kilka szczegółów. Wszystkiego możemy się dowiedzieć z plików /var/log/clamav/clamd.log i /var/log/messages
Oto przykładowy fragment logu, z którego możemy wyczytać informacje na temat znalezionych wirusów.
Informacje o zainicjowaniu samba-vscan oraz o dostępie użytkownika do zasobów Samby
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: samba-vscan (vscan-clamav 0.3.5alpha2) registered (Samba 3.0), (c) by 
Rainer Link, OpenAntiVirus.org
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: samba-vscan (vscan-clamav 0.3.5alpha2) connected (Samba 3.0), (c) by 
Rainer Link, OpenAntiVirus.org
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: INFO: connect to service vscan by user administrator
I kilka dodatkowych informacji, np o nie skanowaniu pliku z powodu jego wielkości
Mar  9 22:11:54 abuse smbd_vscan-clamav[23966]: INFO: File MozillaPL.org-MozillaPL-Windows-1.6.exe 
is larger than specified maximum file size! Not scanned!
Mar  9 22:11:54 abuse smbd_vscan-clamav[23966]: INFO: File SavageDemoInstaller.exe 
is larger than specified maximum file size! Not scanned!
A tutaj już informacje o znalezieniu przez clamd wirusa i o działaniach podjętych przez samba-vscan
Mar  9 22:13:02 abuse clamd[23977]: /samba/cygwin/src/clamav-devel-20040201/test/test3.rar: ClamAV-Test-Signature FOUND
Mar  9 22:13:02 abuse smbd_vscan-clamav[23966]: INFO: quarantining file 
'/samba/cygwin/src/clamav-devel-20040201/test/test3.rar' to '/tmp/vir-Atnd5n' was successful
Gdy samba-vscan znajdzie wirusa w otwieranym przez nas pliku, wówczas wysyła komunikat do klinta (oczywiście jeśli taka opcja jest ustawiona w pliku konfiguracyjnym). Taki komunikat wyglada mniej więcej tak.



Na koniec, życzę Wam owocnej kompilacji i wychwycenia jak największej ilości wirusów :-)
Wszelkie pytania i sugestie proszę wysyłać pocztą.


Autor: Przemysław Hołowczyc
e-mail: doozer (at) skc (dot) com (dot) pl

Wed Mar 10 00:16:38 CET 2004 Pierwsza wersja howto
# samba_clamav.html v1.0; Last modified: Sun, 11 Apr, 2004 22:14:13 by doozer #