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