ostatnia aktualizacja: 29.11.2002 Dokument ten jest dostępny pod adresem: http://mks.s-gen.pl poprzednia wersja tego dokumentu dostępna jest (była) pod adresem: http://mks.s-gen.pl/mks-stary.html Na wstępie pragnę podziękować firmie od MKS-a (http://linux.mks.com.pl) za darmowy (przynajmniej na razie) produkt. Opisałem tu instalację mks-vira dla Linuxa uruchomionego jako demon i współpracującego z systemem pocztowym postfix z podpiętym programem do odczytywania załączników Amavis. Instalacja była dokonywana na systemie Linux Mandrake 8.1. Wstęp: Dlaczego mks jako demon? Uruchamianie za każdym razem mks_vira gdy chcemy sprawdzić plik z wirusem zużywa dużo zasobów - przede wszystkim czasu procesora. Czas ten potrzebny jest do zainicjowania odpowiednich bibliotek, załadowania bazy wirusów i pewnie do jeszcze paru innych rzeczy. Dobrym pomysłem jest więc aby uruchomić mks-vira tylko raz, a potem podrzucać mu od czasu do czasu jakiś pliczek do przeskanowania. Właśnie do tego celu służy demon, który uruchamia proces (lub kilka procesów) mks-a w tle po czym sam przyjmuje zlecenia i przekazuje je uruchomionym wcześniej mks-om. Dzięki temu inicjacja mks-a(ów) następuje tylko raz i nie tracimy zbędnego czasu ani zasobów na każdorazowe uruchamianie mks-a. Gdy dojdziesz do pkt. 5 to przekonasz się sam jaka jest różnica w szybkości działania "mks-a standalone" i "mks-a demona" W tym dokumencie opisałem współpracę mks-a z "firmowym" mksd ze strony http://linux.mks.com.pl, a nie jak w poprzedniej wersji tego dokumentu z wersją mksd Krzysztofa Drewicza. Zdecydowałem się na zmianę mksd gdyż odnoszę wrażenie, że projekt kolegi Krzysztofa nie nadąża za stale zmieniającym się mks-em. Tak czy inaczej należą się duże podziękowania Krzysztofowi za włożoną pracę. Swojego czasu korzystanie z jego demona było jedynym sensownym rozwiązaniem. Poza tym firma mks obiecuje (co czytamy w licencji do mks-vira), że: "Program bedzie darmowy do polowy roku 2003, po tym czasie nie wykluczamy dalszego darmowego udostepniania. Jesli zostanie wprowadzona oplata licencyjna, to na pewno bedzie duzo tansza od konkurencji." Trzymam(y) firmę mks za słowo i liczę, iż je dotrzyma. A ja przesiadam się na ichniejszego mksd. Dlaczego amavisd? Amavis służy do wyekstrachowania zawartości z przesyłki (załączniki, treść listu), ew. rozpakowania archiwum, jeśli takowe jest załączone i podesłania już "nagich" pliczków do mks-a. W razie zwrócenia przez mks-a komunikatu o wirusie amavis wysyła list do nadawcy i admina o tym fakcie. Amavisd jest "demonową" wersją amavis-perl. Demona warto stosować z tych samych powodów co demona mks. Podobno mks potrafi już sprawdzać e-maile. Teoretycznie można by więc pominąć amavisa i bezpośrednio z serwera SMTP przesyłać listy do mks-a. Jednak nadal warto stosować amavisa gdyż: - mks nie obsługuje takiej ilości formatów archiwów co amavis - (o ile dobrze pamiętam) mks ma (miał) ograniczenia co do głębokości rekursywnego sprawdzania spakowanych załączników - amavis dodatkowo wysyła list z ostrzeżeniami o wirusie do nadawcy i administratora: bez amavisa musielibyśmy to oprogramować sami - na stronie mks-a wciąż zalecają stosowanie amavisa Uwagi: Większość z opisywanych tu programów to wersje rozwojowe, więc wiele informacji może stać się już wkrótce nieaktualnych. Komendy shell-a poprzedzone znakiem $ oznaczają że można (i nawet należy) wykonywać je jako zwykły użytkownik. Znak # oznacza, że musisz mieć prawa root. W razie problemów, wątpliwości, czytaj uważnie pliki readme i inne, dołączane do pakietów oraz wchodź na strony do których te pliki cię kierują; większość opisywanych tu rzeczy dowiedziałem się właśnie z nich. Nie pytaj mnie o dodatkowe szczegóły dotyczące instalacji poszczególnych składników, brakujących bibliotek itp. Czytaj pliki README lub zwróć się do "producenta oprogramowania" :). Wszelkie problemy, które sam napotkałem zostały opisane lub zasygnalizowane w tym dokumencie. Przydatne linki: Mks_vir: http://linux.mks.com.pl Testowy wirus: http://www.eicar.org/download/eicar.com Amavis: http://www.amavis.org Postfix: http://www.postfix.org/ Amavis-inne http://sdb.suse.de/en/sdb/html/kngu_slems3_amavis.html No to do dzieła!!! *********************************************************** 1. Pobrać najnowszego mks-a, mksd i bazy wirusów ze strony http://linux.mks.com.pl ********************************************************** u mnie były to: mksLinux-1-5-6.tgz mksd-Linux-1.09.tgz i oczywiście jakieś najnowsze bazy... uwaga: w trakcie pisania tego dokumentu były dostępne dwa rodzaje baz danych z wirusami: stary i nowy format; my pobieramy oczywiście bazy w nowszym formacie ********************************************************** 2. Zainstalować mks-a ********************************************************** rozpakuj archiwum mksLinux-1-5-6.tgz i skopiuj plik mks32 w rozsądne miejsce: # cp mks32 /usr/bin (oczywiście nadaj odpowiednie prawa i ustaw właściciela jako root.root) Kopiujemy mks32 nie tylko po to, żeby mieć go w ścieżce dostępu ale również dla amavisa, który podczas "configure" (patrz poniżej) będzie szukał pliku mks32; być może da się jawnie poinformować "configure" gdzie jest mks32 ale nie wiem jak... rozpakuj bazy danych wirusów w swoje ulubione miejsce (u mnie /moje/mks/bazy2) i nadaj prawa do odczytu jeśli wszyscy użytkownicy mają mieć możliwość korzystania z mksa utwórz w /etc plik konfiguracyjny mks_vir.cfg i podaj w nim ścieżkę dostępu do baz danych wirusów czyli taką linijkę: --mks-vir-dat-path=/moje/mks/bazy2/ uwaga ścieżka musi być podana do katalogu w którym znajdują się pliki *.dat a nie katalog bazy2 przeczytaj również inne pliki z archiwum: licencja, readme, zajrzyj do mksLinux-contrib.tgz... ********************************************************** 3. Przetestować mks-a ********************************************************** ściągnąć testowego wirusa z http://www.eicar.org/download/eicar.com, a następnie: $ mks32 eicar.com powinno się pojawić coś takiego: mks_vir: init... 1.5.6 for Linux i386, 2002.11.21 mks_vir: init OK, scan mode mks_vir: check file(s) mks_vir: file: eicar.com mks_vir: --heuristic for virus Eicar.Test mks_vir: --heuristic for virus Eicar.Test mks_vir: status: virus found: eicar.com mks_vir: exit code: 0x01 jeśli się pojawiło to gratulacje!!! na Twoim kompie działa już mks :) uwaga: podobno mks32 może nie działać na każdej maszynie - wtedy należy użyć mks32.static; u mnie działał :) więc nic nie eksperymentowałem z mks32.static ********************************************************** 4. Instalacja mksd ********************************************************** w archiwum są już (podobnie jak mks32) gotowe binarki; my będziemy potrzebowali tylko mksd i mkschk # cp mksd /usr/sbin # cp mkschk /usr/bin (podobnie jak z mks32 nadaj odpowiednie prawa i ustaw właściciela na root.root) przeczytaj uważnie plik README, żebyś widział jak to wszystko działa Ja w mojej instalacji uruchamiam wszystkie procesy związane z antywirem jako użytkownik amavis. Jest to bezpieczniejsze niż root szczególnie dlatego, że korzystamy z wersji mocno rozwojowych, mogących zawierać sporo błędów. Ty możesz zrobić oczywiście wszystko po swojemu ale jeśli chcesz zrobić to tak jak ja to: utwórz w systemie użytkownika amavis utwórz katalog /var/run/mksd, zmienń właściciela na amavis, nadaj mu pełne prawa do tego katalogu, a użytkownikom, którzy mają korzystać z demona nadaj prawa "rx" ***************************************************************** 5. Testowanie demona ******************************************************************* jako użytkownik amavis uruchom demona: $ /usr/sbin/mksd i przetestuj (jako dowolny uzytkownik) $ mkschk eicar.com jeśli wszystko zrobiłeś jak należy to powinienś dostać coś podobnego: VIR Eicar.Test /tmp/eicar.com jeśli dostałeś to kolejne gratulacje!!! a teraz uruchom jeszcze raz: $ mks32 eicar.com i zobacz różnicę w szybkości działania - teraz już wiesz dlaczego warto "powalczyć z demonem" :) wyłącz demona (jako amavis): $ kill `cat /var/run/mksd/mksd.pid` ********************************************************** 6. Ściągnąć i załatać amavisd z http://www.amavis.org ********************************************************** ( u mnie jest amavisd-snapshot-20020300.tar.gz) rozpakować amavisd $ tar xvfz amavisd-snapshot-20020300.tar.gz skopiować łatę do amavisa z: mksLinux-1-5-6.tgz/mksLinux-contrib.tgz/CONTRIB/AMAVIS.1/amavis-snapshot-2002030 0.patch.gz do tego samego folderu w którym rozpakowałeś archiwum amavisd i zastosować łatę: $ gunzip -cd amavisd-snapshot-20020300.patch.gz | patch -p0 uwaga: na sourceforge są nowsze wersje amavisa - jest np. amavis-ng - połączenie amavis-perl z amavisd, jest wsparcie dla mks (nie trzeba stosować łaty) i dodano parę wewnętrznych pakerów, demon amavisd nasłuchuje na porcie, obsługuje SMTP (nie trzeba używać klienta amavisa - można bezpośrednio z postfixa przesłać do amavisd e-maila) Ja jednak czekam aż oficjalnie pojawi się coś na www.amavis.org. Jak chcesz to się pobaw. ********************************************************** 7. Konfiguracja i kompilacja amavisd ********************************************************** najpierw musimy przystosować amavisd do współpracy z mksd a zamiast mks32 $ cd amavisd-snapshot-20020300 w pliku amavis/av/mksvir (ten plik pojawił się po zastosowaniu łaty) fragment kodu: if ($errval) { if ($errval == 1) { @virusname = ($output =~ /[yfnr-][ -]virus (.+)/g); do_virus($output); } else { do_log(0,"Virus scanner failure: $mks32 (error code: $errval)"); } } zamieniam na: if ($errval) { @virusname = ($output =~ /VIR(.+ )/g); do_virus($output); } bo mks32 zwraca 0 - nie ma wirusa, 1 - jest wirus , reszta - błąd a mkschk, którego będziemy używać zwraca 0 - nie ma wirusa , >0 ilość wykrytych wirusów lub błędów, poza tym na wyjściu zwraca co innego niż mks32 Tak na marginesie, to twórcy mks-a mogliby ujednolicić kody wyjścia zwracane przez ich programy, które są funkcjonalnie identyczne (mks32 i mkschk) Nie trzeba by było wtedy wprowadzać tych zmian. Pytanie: Czy ktoś wiek jakie wyrażenie regularne (zamiast "/VIR(.+ )/") wpisać, aby w liście o wirusach wysyłanych do nadawcy zamiast: "Eicar.Test S" otrzymywać "Eicar.Test" - czyli bez literki S, która nie należy przecieź do nazwy wirusa. Nie chciało mi się zagłębiś w dokumentację o wyrażeniach regularnych perla bo nie miałem na to czasu. Jesli ktoś tego dokona to prosze o info. Aby konfiguracja przeszła pomyślnie mks32 musi być np. w /usr/bin (patrz pkt 2. dlaczego) Teraz jeszcze, wypełniamy warunki licencji o reklamie strony http://mks.com.pl. W tym celu wchodzimy do pliku: amavis/notify/sender i zmieniamy jego treść tak, aby każdy użytkownik, który dostanie informacje iż znaleziono wirusa w jego poczcie dowiedział się, że w tej chwili nie pozostaje mu nic innego do roboty jak tylko odwiedzenie strony http://mks.com.pl i wykupienie abonamentu mks-vira dla Windows na najbliższe 10 lat albo i dłużej :) No i w ogóle warto ten plik spolszczyć (lub "polsko-zangielszczyć") :) Ja skonfigurowałem amavisd do współpracy z postfixem, oraz żeby był uruchamiany jako użytkownik amavis (Czy utworzyłeś już użytkownika amavis? Jeśli nie to zrób to teraz.) $ ./configure --enable-postfix --with-amavisuser=amavis ...i pewnie dostaniesz komunikaty o brakujących bibliotekach perla, brakujących pakerach itp. Czytaj uważnie co wyświetli Ci konfigurator. Jeśli nadal nie wiesz jakich bibliotek Ci brakuje to poszukaj informacji w README; użyteczne informacje i pakiety znajdziesz też na: http://sdb.suse.de/en/sdb/html/kngu_slems3_amavis.html Bardzo pomocny przy kompletowaniu brakujących modułów perla może Ci się okazać moduł CPAN (patrz README) ja tutaj straciłem najwięcej czasu, ale w końcu dostałem coś takiego: ** Configuration summary for amavisd snapshot-20020300 2002-03-00: Install amavis daemon as: /usr/sbin/amavisd Install amavis client as: /usr/sbin/amavis Daemon config file: /etc/amavisd.conf Path to socket: /var/amavis/amavisd.sock Configured for use with: postfix Configuration type: SMTP Use virus scanner(s): mks_vir for Linux/FreeBSD Scanner runs as: amavis Logging to syslog: yes Run-time directory: /var/amavis Warn sender: yes Warn recipient(s): no Notify admin: yes To accept the above, type "make" ... no to make $ make i jako root: # make install teraz trzeba jeszcze powiedzieć amavisowi, żeby uruchamiał mkschk a nie mks32: w pliku /etc/amavisd.conf ustaw: $mks32 = "/usr/bin/mkschk" ; uwaga: Podczas instalacji dodawany jest alias w /etc/postfix/aliases na końcu pliku: "virusalert: root" ale bez wiodącego znaku nowej linii więc jeśli ostatnia linia nie była pusta to ta doda się do poprzedniej i będzie kwas. Dla pewności zajrzyj do tego pliku i zobacz, czy wszystko jest OK. Alias virusalert jest potrzebny gdyż do niego będą leciały listy o odkrytych wirusach ********************************************************** 8. Uruchamianie i testowanie amavisd ********************************************************** uruchomić np. przy starcie systemu # su amavis -c "/usr/sbin/amavisd" testowanie: (uwaga - dopisane później - ale myślę że Wam zadziała) Utworzyć wiadomość pocztową z wirusem eicar.com jako załącznik np. w programie pocztowym Mozilla po czym zapisać wiadomość do pliku np. o nazwie "wirus.eml" jako użytkownik amavis wykonać: $ /usr/sbin/amavis twoj@email.pl twoj@email.pl < wirus.eml Jeśli masz poprawnie skonfiurowanego i działającego MTA w Twoim systemie to w skrzynkach pod tymi adresami: "virusalert@twojkomputer" oraz "twoj@email.pl" powinny się pojawić listy o wirusach. Jeśli się pojawią to "już jesteś w ogródku, już witasz się z gąską..." ********************************************************** 9. Konfiguracja postfixa ********************************************************** (u mnie jest postfix-20010228) posiłkowałem się: - /usr/share/doc/postfix...../FILTER_README - amavis-snapshot....../README.postfix - tu jest parę błędów w pliku konfiguracyjnym postfixa master.cf: smtp inet n - n - - smtpd -o content_filter=vscan: localhost:10025 inet n - n - - smtpd vscan unix - n n - 10 pipe user=amavis argv=/usr/sbin/amavis ${sender} ${recipient} pierwsza linijka (ta zaczynająca się od "smtp") zastępuje już istniejącą, pozostałe dopisujemy restartujemy postfixa i... powinno działać.... :) uwaga: przy takiej konfiguracji nie ma potrzeby dopisywać czegokolwiek w pliku main.cf jak jest to sugerowane w przykładzie z README.postfix ********************************************************** 10. Uruchamianie demonów podczas startu systemu ********************************************************** Jest parę przykładów skryptów uruchomieniowych w ściągniętych przez Ciebie archiwach. Mój skrypt dla Mandrake 8.1 możesz obejrzeć tutaj ********************************************************** 11. Automatyczna aktualizacja baz mks-a ********************************************************** Jeśli chcesz być zawsze szybszy od wirusów to zautomatyzuj uaktualnianie baz. Jest chyba jakiś przykład w archiwum mks-a obejrzyj, zastosuj. Warto poświęcić jeszcze dodatkowe 2 godziny i później mieć z głowy problem na dłuższy czas. No chyba, że znów dostaniesz list od Kamila Koniecznego iż pojawiła się nowa wersja mks-vira, bo ta poprzednia była walnięta, a poprzedni mksd nie będzie współpracował z najnowym mks32, który zastąpił teraz tego walniętego itp, itd... ***************************************************************************** ***************************************************************************** ***************************************************************************** I to by było na tyle. Życzę powodzenia w instalacji i nieprzepuszczenia żadnego wirusa. Oczywiście wszelkie prawa do tego dokumentu należą do mnie :) ale możesz go sobie kopiować i bezpłatnie udostępniać innym. ps. Tak jak na wstępie zaznaczyłem proszę nie pytać mnie jeśli Wam coś nie działa. Jak nie to trudno. Pomęczcie się sami, bo ja nie mam czasu za Was się męczyć :) Zresztą pomęczyłem już się dostatecznie długu pisząc ten dokument. U mnie wszystko działa i na razie (przynajmniej dopóki mksvir jest darmowy) jestem happy. Sergiusz Brzeziński Sergiusz.Brzezinski@s-gen.pl