Integracja Squida z systemem antywirusowym ClamAV w Debianie

Squid to bardzo popularne na całym świecie open source’owe (GPL) oprogramowanie proxy obsługujące m.in. najpopularniejsze w Internecie protokoły HTTP, HTTPS czy FTP. Co ciekawe, popularność zdobyło zarówno wśród użytkowników indywidualnych, jak i wśród dużych firm oraz instytucji. Wśród głownych zalet Squida zawsze wymienia się wydajność oraz rozbudowane możliwości konfiguracyjne, w szczególności jeśli chodzi o konfigurację związaną z dostępem użytkowników. ClamAV to z kolei znany pakiet open source’owych (GPL) narzędzi antywirusowych. W pakiecie tym znalazły miejsce zarówno tak podstawowe programy jak skaner antywirusowy czy narzędzie do automatycznej i darmowej aktualizacji bazy wirusów, ale również narzędzia bardziej zaawansowane, głównie przydatne w momencie rozbudowy ClamAV lub przy integracji z innym oprogramowaniem.

Najczęściej spotykane integracje ClamAV dotyczą programów pocztowych - przykładem niech będzie opisana przez Marcina Kądziołkę integracja ClamAV z serwerem pocztowym Qmail. Na groźnego wirusa można jednak natknąć się nie tylko w mailu, ale także ściągając (i uruchamiając) niewinnie wyglądający program, często z teoretycznie bezpiecznego i uznanego źródła. Więcej - używając kombinacji słabo zabezpieczonych systemów i przeglądarek internetowych wirusem można zarazić sobie system nawet poprzez samo wejście na roznoszącą wirusa stronę. Edukacja użytkowników i instalacja typowych rezydentnych skanerów antywirusowych na poszczególnych komputerach często jest rozwiązaniem mocno kłopotliwym, szczególnie w przypadku większych sieci. Administrator chcąć uniknąć ciągłego biegania od użytkownika do użytkownika powinien raczej zainteresować się rozwiązaniem ogólniejszym. I tutaj właśnie z pomocą przychodzi koncepcja integracji Squida z ClamAV, a w efekcie ochrony wszystkich użytkowników beztrosko surfujących po sieci.

Jedną z możliwości integracji tych dwóch narzędzi jest wykorzystanie tzw. redirectorów, czyli programów stanowiących de facto pomost pomiędzy serwerem proxy, a programem antywirusowym. Program redirector wskazywany jest Squidowi w jego pliku konfiguracyjnym, a dalsze działanie zależy już wyłącznie od samego redirectora. Ten z kolei najczęściej posiada własny plik konfiguracyjny umożliwiający integrację z wybranym programem antywirusowym i ustawienie adekwatnej reakcji w przypadku wykrycia zagrożenia (np. blokady dostępu do pliku i wyświetlenie strony ostrzegawczej). Dostępnych redirectorów jest co najmniej kilka. Ich zasada działania jest zazwyczaj podobna. Największym problemem jest niestety brak aktualizacji części z nich, tak aby współpracowały poprawnie z najnowszymi wersjami Squida. Co nam bowiem po wydajnie działającym redirectorze, jeśli współpracuje on poprawnie tylko z jakąś mało aktualną wersją serwera proxy.

Na potrzeby niniejszego artykułu wykorzystany został Squid ClamAV Redirector 1.8.2, do którego przygotowaliśmy łatkę, umożliwiającą mu współpracę z najnowszą obecnie stabilną wersją Squida 2.6 dostępną w repozytoriach Debiana Etch, usuwającą także jeden dodatkowy błąd, pojawiający się czasem na niektórych systemach (w tym na Debianie). Squid ClamAV Redirector napisany został w Pythonie. Poniższy opis przeznaczony jest dla Debiana Etch (4.0). Wykorzystane wersje oprogramowania - Squid 2.6.STABLE5, ClamAV 0.90.1, Python 2.4.4 (oraz dodatkowy test na najnowszej 2.5.1), czyli wersje dostępne w repozytorium Debiana w chwili pisania artykułu (apt-get install squid clamav python). Dla potrzeb artykułu założono, że użytkownik posiada już zainstalowanego oraz skonfigurowanego Squida oraz ClamAV.

Jeśli jeszcze nie mamy bibliotek i narzędzi, dzięki którym ClamAV potrafi współpracować z Pythonem - instalujemy je:

apt-get install python-clamav

Pobieramy program Squid ClamAV Redirector i rozpakowywujemy archiwum (uwaga - w chwili pisania tego artykułu strona Michaela Langa, autora tego programu, niestety nie działała, dlatego program wraz z łatką można również pobrać bezpośrednio z naszego serwera).

wget http://linux.netina.com.pl/files/SCRp.tar.gz
tar -zxf SCRp.tar.gz

Kopiujemy rozpakowane pliki do odpowiednich katalogów i aplikujemy patcha:

cp SquidClamAV_Redirector.py /usr/local/bin/
chmod +x /usr/local/bin/SquidClamAV_Redirector.py
cp SquidClamAV_Redirector.conf /etc/
patch /usr/local/bin/SquidClamAV_Redirector.py SquidClamAV_Redirector.patch

Edytujemy plik konfiguracyjny /etc/SquidClamAV_Redirector.conf:

virusurl = http://virus.jackal-net.at/infected.php

Ta zmienna odpowiada za adres, na który będzie wysyłane przekierowanie gdy skaner antywirusowy wykryje wirusa. Można wykorzystać stronę autora lub napisać własny prosty skrypt (w archiwum SCRp.tar.gz znajduje się przykładowy plik information.php).

[Proxy]
http = http://localhost:3128

Tutaj podajemy adres naszego proxy w formacie IP:port lub nazwa:port. Nasz przykładowy Squid działa na domyślnym porcie 3128 i lokalnym hoście, stąd localhost:3128.

[Whitelist]
www.jackal-net.at       = 0

W tej sekcji można podać witryny, które są zaufane i tym samym będą wyłączone z procesu skanowania.

[Extensions]
pattern = .jpg .exe .zip .rar .ar .com .bzip .gz .txt

W tej sekcji podajemy rozszerzenia plików, które mają być skanowane obowiązkowo. Wpisanie “all” sprawi, że skaner będzie skanował praktycznie wszystko. Jeśli ze Squida ma korzystać większa ilość użytkowników to być może warto skanowanie ograniczyć tylko do wybranych typów. Reszta opcji konfiguracyjnych jest mniej istotna i domyślne ustawienia są akceptowalne w większości przypadków. Następnie edytujemy plik konfiguracyjny Squida /etc/squid/squid.conf i dodajemy poniższe dwie linijki:

redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c /etc/SquidClamAV_Redirector.conf
redirect_children 2

Pierwsze to ustawienie programu redirectora wraz z parametrem, którym jest adres do pliku konfiguracyjnego. W naszym przypadku skrypt .py umieściliśmy w /usr/local/bin, a plik konfiguracyjny w /etc. Drugie polecenie będzie powodowało uruchomienie określonej ilości procesów potomnych redirectora, które będzie wykorzystywał Squid. W zależności od ilości użytkowników danego proxy oraz zasobów danego serwera można tych rezydentnych procesów uruchomić więcej lub mniej. Squid w razie potrzeby i możliwości sam uruchomi kolejne co jednak może każdorazowo dłuższą chwilę potrwać.

Po restarcie squida (/etc/init.d/squid restart) możemy sprawdzić, czy procesy potomne są uruchomione:

# ps aux | grep SquidClamAV
(..) /usr/bin/python -u /usr/local/bin/SquidClamAV_Redirector.py -c /etc/SquidClamAV_Redirector.conf
(..) /usr/bin/python -u /usr/local/bin/SquidClamAV_Redirector.py -c /etc/SquidClamAV_Redirector.conf

Czasami niestety pojawia się problem związany bezpośrednio z Pythonem i pyClamAV, mianowicie na niektórych systemach występujące zaraz na samym początku SquidClamAV_Redirector.py polecenie “import pyclamav” potrafi na dłuższą chwilę zająć 100% CPU (na słabszych maszynach nawet na kilka minut!). Należy to mieć na uwadze i najlepiej w ramach testu wywołać samodzielnie (ręcznie) program SquidClamAV_Redirector.py, żeby sprawdzić, czy w danym systemie problem występuje. Problem nie przekreśla możliwości korzystania z opisanego rozwiązania, ale sprawia, że trzeba z góry zadbać o dostatecznie dużą ilość procesów potomnych, tak aby żadne dodatkowe nie uruchamiały się już w trakcie pracy Squida. Jest to też niewątpliwie pewna uciążliwość przy restartach Squida.

Jeśli w logu (np. /var/log/messages) po uruchomieniu Squida nie pojawiają się żadne błędy to możemy przystąpić do testów. Na próbę wejdźmy na http://linux.netina.com.pl i obserwujmy co pojawia się w logu:

SquidClamAV: Url: http://linux.netina.com.pl/wp-content/plugins/cforms.css Status OKAY
SquidClamAV: Url: http://linux.netina.com.pl/wp-content/plugins/contactforms/js/cforms.js Status OKAY
SquidClamAV: Url: http://linux.netina.com.pl/wp-content/themes/flex/images/logo.png Status OKAY
SquidClamAV: Url: http://linux.netina.com.pl/favicon.ico Status OKAY

Jak widać pzeskanowane zostało praktycznie wszystko - css, js, png, a nawet ikonka favico. Żaden wirus nie został zidentyfikowany. Aby sprawdzić, czy skanowanie na pewno działa poprawnie możemy wejść na specjalną stronę z przygotowanymi plikami zawierającymi sygnatury wirusów. Już kliknięcie na pierwszy dostępny link powinno zaowocować przekierowaniem na stronę z informacją o wykrytym wirusie, a w logu pojawi się podobny do poniższego wpis:

SquidClamAV: Url: http://www.eicar.org/download/eicar.com Status Infected Eicar-Test-Signature

Dla pewności proponuję przetestować również pozostałe dostępne na powyższej stronie przypadki.

Podsumujmy - wykorzystaliśmy Squida jako proxy, ClamAV jako program antywirusowy i Squid ClamAV Redirector jako pomost pomiędzy nimi. Mamy skuteczną i sprawdzoną ochronę antywirusową przy korzystaniu z protokołu http. Ewentualna dalsza konfiguracja nie powinna już nastręczać kłopotów.

Kolejnym krokiem może być przykładowo integracja Squida z oprogramowaniem potrafiącym filtrować reklamy.



4 Responses to “Integracja Squida z systemem antywirusowym ClamAV w Debianie”

  1. marek
    June 10th, 2008 | 8:50 pm

    fajny opis, u mnie działa, ale jednocześnie występuje problem związany z Pythonem i pyClamAV, co mogę z tym zrobic ??

  2. Kamil
    November 26th, 2008 | 9:34 am

    Mam pytanie odnosnie tego redirectora. Czy w momencie checi pobrania pliku program siaga go na proxy i skanuje a tym samym blokuje sciaganie dla uzytkownika i pozwala sciagnac mu plik w momencie sprawdzenia go calego?? Czy moze jest sciagany wolniej dla uzytkownika a szybciej dla proxy, aby proxy go szybciej sprawdzilo.

  3. January 5th, 2010 | 12:40 am
  4. September 15th, 2010 | 8:22 pm

    katalogi stron…

    Masz rację. Profesjonalnie wykonany sklep internetowy kosztuje. Większość sklepów internetowych, zwłaszcza tych mniejszych, jest tworzona na darmowych OsCommerce, VirtueMart, ZenCart i QuickCart, których kod jest ogólnie dostępny. Nieczęsto p…

Skomentuj...

You must be logged in to post a comment.

The accumulation of points and extra discounts makes favorable re-order in Canadian drug pharmacy "'&$ drug list and permanent system of discounts for buyers.