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