ClamAV kasutamine

Allikas: Imre kasutab arvutit
Redaktsioon seisuga 22. juuli 2024, kell 13:04 kasutajalt Imre (arutelu | kaastöö) (→‎Kasulikud lisamaterjalid)
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

ClamAV töötab tasuta internetis jagatava viiruste andmebaasiga kusjuures lisaks kasutatakse ka C4S aadressil http://c4s.pikker.ee/ olevaid reegleid. Põhimõtteliselt sobib kasutada süsteemi, milles on üks clamd protsess, aga praktiliselt võivad sellisel juhul SMTP kasutajad vahel saada veateateid. Sellepärast kirjeldataks käesolevas tekstis koormusjaotatud clamd pidamist.

Lisaks käesolevale tekstile kirjeldatakse muudes tekstides spetsiifilisi kasutusjuhtumeid

Tööpõhimõte

Kuna ClamAV töötamisele on iseloomulik, et viiruste andmebaasi mällu lugemise ajal teenus hästi ei tööta, siis lahenduseks on kasutada mitut clamd deemoni eksemplari ja nad loavad oma andmestikku mällu erineval ajal. Ning clamd teenuse kasutamine on moel või teisel nö koormusjaotatud (nt clamav-milter oskab seda)

Mitme clamd eksemplari kasutamiseks on üldiselt sellised võimalused

  • sama operatsioonisüsteemi sees käivitada mitu clamd protsessi, mis kasutavad erinevaid käivitusskripte, pid faile, viiruste andmestikku sisald avaid katalooge jne - tundub, et seda ei olegi teha nii lihtne kuna suhteliselt tugevalt on hard-codetud, et andmestik asub /var/lib/clamav kataloogis
  • sama operatsioonisüsteemi sees käivitada chroot keskkondadest erinevad clamd protsessid - tundub, et nt schroot abil ei ole see nii mugav kuna käivitusskript tapab ära kõik töötavad clamd nimelised protsessid
  • kasutatakse mitut operatsioonisüstteemi, igas oma clamd protsess - kohmakas, aga toimib


    internet                                                   internet

       |                                                          |
     __|__                                                      __|__
    |     | postfix + clamav-milter                            |     | väljuv posti smtp relee
    |_____|                                                    |_____|
       |                                                          |
       |                                                          |
    ---|-------------|----------------|--------------|------------|----
                     |                |              |
                   __|__            __|__          __|__
                  |     |          |     |        |     |
                  |_____|          |_____|        |_____|

                 clamav-1         clamav-2        dovecot
               port 3310/tcp    port 3310/tcp

kus

  • postfix + clamav-milter arvuti võtab internetist saabuvad kirjad vastu
  • clamav-milter on seadistatud kasutama clamav-1 ja clamav-2 arvutitest töötavad clamd protsesse, kasutab seda, mis parasjagu töötab (sh annab vastuse enne timeout aega)
  • dovecot on postkasti arvuti kohalikule epostile
  • kui väljuva eposti jaoks peetakse vajalikuks pidada omaette releed, siis nii on

Tarkvara paigaldamine

Tarkvara paigaldamiseks sobib öelda

# apt-get install clamav-daemon

Paigaldamise tulemusena tekivad failisüsteemi

  • /etc/init.d/clamav-daemon - deemoni käivitusskript
  • /etc/init.d/clamav-freshclam - viiruste andmebaasi uuenduste kopeerimise deemoni käivitusskript
  • /etc/clamav/clamd.conf - deemoni seadistusfail
  • /etc/clamav/freshclam.conf - viiruste andmebaasi uuenduste deemoni seadistusfail
  • /usr/sbin/clamd - deemon
  • clamdscan, clamdtop, clamconf - utiliidid

Viiruste andmebaasi uuendamine

ClamAV sisaldab deemonit freshclam, mille ülesandeks on kopeerida võrgust viiruste andmebaasi uuendusi, freshclam seadistusfail on /etc/clamav/freshclam.conf. Antud juhtumil ei kasutata freshclam deemon režiimis, vaid käivitatakse käsitsi st cron tööna. Seejuures tuleb jälgida, et erinevatest clamd serverites toimuks see erineval ajal. Deemoni väljalülitamiseks on otsekohene kustutada vastavad init skriptid jms

systemd liidesega

# systemctl stop clamav-freshclam
# systemctl disable clamav-freshclam

sysv liidesega

# service clamav-freshclam stop
# update-rc.d -f clamav-freshclam remove

clamav-freshclam tööd juhib seadistusfail /etc/clamav/freshclam.conf, sobib default. Selleks, et viiruste andmebaas saaks uueneda, peab saama postimasin pöörduda avaliku võrku, vajadusel saab seadistusfailis näidata http proxy asukoha

HTTPProxyServer 192.168.9.39
HTTPProxyPort 3128

ClamAV andmebaasi uuendamise käsitsi käivitamine paistab sedasi (--config-file=/etc/clamav/freshclam.conf --datadir=/var/lib/clamav argumente võib, aga ei ole vajalik kasutada)

# freshclam
ClamAV update process started at Mon Jul 20 13:11:01 2015
Connecting via 10.0.9.39
Downloading main.cvd [100%]
main.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Connecting via 10.0.9.39
Downloading daily.cvd [100%]
daily.cvd updated (version: 20702, sigs: 1479223, f-level: 63, builder: anvilleg)
Connecting via 10.0.9.39
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 265, sigs: 47, f-level: 63, builder: neo)
Database updated (3903495 signatures) from db.local.clamav.net

Viiruste andmebaas asub kataloogis /var/lib/clamav

# find /var/lib/clamav -ls
639308     4  drwxr-xr-x   2 clamav   clamav       4096 May 22 16:16 /var/lib/clamav
221185   460  -rw-r--r--   1 clamav   clamav     464384 Apr 13 17:27 /var/lib/clamav/bytecode.cld
221188     4  -rw-------   1 clamav   clamav       2340 May 22 16:16 /var/lib/clamav/mirrors.dat
221187 63960  -rw-r--r--   1 clamav   clamav   65422336 Nov 14  2010 /var/lib/clamav/main.cld
679949  7468  -rw-r--r--   1 clamav   clamav    7631360 May 22 05:52 /var/lib/clamav/daily.cld

Logi tekib faili

 /var/log/clamav/freshclam.log

Cron tööga uuendamine võiks olla nt selline

# cat /etc/cron.d/freshclam
15 04 * * * root /usr/bin/freshclam 1>>/var/log/freshclam-cron.log 2>&1

Viiruste uuenduste olemasolu tehakse kindlaks nimepäringuga

$ dig +short current.cvd.clamav.net txt
"0.97:53:13101:1306068884:1:60:29568:143"

Lisaks nö ametlikele ClamAV signatuuride andmebaasidele peavad aktiivsed kasutajad samuti andmebaase, nt addressil http://c4s.pikker.ee/public.strings.txt.

clamd deemoni seadistamine

clamav-daemon tööd juhib seadistusfail /etc/clamav/clamd.conf, tõenäoliselt sobib vaikimisi sisu, antud juhul on oluline kirjeldada teenuse interneti soket, nt

SelfCheck 86400
TCPSocket 3310

systemd keskkonnas esineb tõenäoliselt selline viga clamd.log failis

Mon Jul  26 10:28:01 2015 -> TCP: No tcp AF_INET SOCK_STREAM socket received from systemd.

ja sobib teha sellised muudatused, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771911

# cat /etc/systemd/system/clamav-daemon.socket.d/extend.conf
[Socket]
ListenStream=10.0.6.26:3310

ja muudatuste kehtestamiseks kehtestadada systemd enda seadistuste muudatus

# systemctl daemon-reload

ning kehtestada clamav-daemon jaoks muudatused (tegelikult piisab ainult .socket restartist)

# systemctl restart clamav-daemon.socket
# systemctl restart clamav-daemon.service

clamd deemoni logi asub failis

/var/log/clamav/clamav.log

C4S reeglite kasutamine

2015 aasta kevadel leivitatakse aadressil http://c4s.pikker.ee/ kahte komplekti reegleid

C4S http://c4s.pikker.ee/ reeglite kasutamiseks tuleb paigaldada kolm utiliiti

  • curl - kopeerib reeglite nimekirjad
  • gpg - kontrollib signatuurid
  • pixz - paralleelet tööd tegev pakkimise tarkvara

Paigaldamiseks sobub Debian v. 8 Jessie keskkonnas öelda

# apt-get install curl gnupg pixz

Debian v. 7 Wheezy keskkonnas tuleb pixz kompileerida või kasutada pixz asemel tavalist versiooni

# apt-get install xz-utils

Tööd teeb üks shell skript http://c4s.pikker.ee/c4s.updater.sh, mille alguses on kasutamisõpetus. Skript sobib paigutada kataloogi

# mkdir -p /opt/c4s/bin
# cd /opt/c4s/bin
# wget http://c4s.pikker.ee/c4s.updater.sh

Seejärel üle vaadata selliste muutujate väärtused, nt kasutada selliseid

# cat /etc/C4S.cfg 
# kommenteerida valja http proxy kasutamiseks
# export http_proxy="http://192.168.1.241:3128"

C4S_DB_IGNORE_LIST="c4s.0days|c4s.adult.0days|c4s.junk.0days"
MY_3RDP_DB_IGNORE_LIST="3rdp.doppelstern|3rdp.something.else"

kus

  • C4 ja 3RDP ignore listid

Lisada root kasutaja võtmehoidjasse teenusega soetud gpg võti

# gpg --keyserver keyserver.ubuntu.com --recv-keys DAD341E9
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key DAD341E9 from hkp server keyserver.ubuntu.com
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key DAD341E9: public key "Heiki Pikker <heiki.pikker@pikker.ee>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Kui serverist on suvaline internetti pääsemine piiratud, siis saab võtme paigaldada ajutise ssh tunneli kaudu

tookohaarvuti-kust-saab-piiramatult-internetti$ ssh imre@10.0.6.186 -R 11371:keyserver.ubuntu.com:11371
server# gpg --keyserver 127.0.0.1 --recv-keys DAD341E9

Käivitada esmakordselt

# chmod 0755 /opt/c4s/bin/c4s.updater.sh
# /opt/c4s/bin/c4s.updater.sh

Skripti töö tulemusena tekib olemasolevasse kataloogi /var/lib/clamav juurde hulka selliseid faile

/var/lib/clamav/c4s*

Uute signatuuride kasutuselevõtmiseks sobib öelda (kuigi clamd deemoni protsess avastab ise ka peagi muudatused)

# /etc/init.d/clamav-daemon reload

Logisse kirjutatakse midagi sellist

# tail -f /var/log/clamav/clamav.log
..
Thu Jan  8 13:48:20 2015 -> Reading databases from /var/lib/clamav
Thu Jan  8 13:50:01 2015 -> Database correctly reloaded (4406737 signatures)

Selleks, et C4S nimekiri uueneks edaspidi automaatselt, sobib kasutada nt sellist cron tööd

# cat /etc/cron.d/c4s-updater 
45 04 * * * root /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1

Märkused

  • C4S sisaldab palju sissekandeid, ilmselt clamd protsess käivitub mitu minutit, sel ajal on tore vaadata strace abil kuidas andmed liiguvad
# strace -p 1426 
Process 1426 attached
read(5, "746d:48\nC4S.MALWARE.URL.AUTOGEN."..., 4096) = 4096
read(5, "d2f6c2f75732d7368617265686f6c646"..., 4096) = 4096
read(5, "33561396237386466623037642663723"..., 4096) = 4096
read(5, "383938653762343361666436:48\nC4S."..., 4096) = 4096
read(5, "72e6f7264696e65636f7374616e74696"..., 4096) = 4096
read(5, ".AUTOGEN.6176800:4:*:(B)7777772e"..., 4096) = 4096
read(5, "6f6e74656e743d313632353833383726"..., 4096) = 4096
read(5, "L.AUTOGEN.6176851:4:*:(B)7777772"..., 4096) = 4096
...
  • Kui updater skript ei moodusta puhtasse kataloogi sisu ära, sel juhul tuleb kopeerid alla mingi varaseme versiooni seis ning käivitada uuem updater

clamav-milter kasutamine clamd koormusjaoturina

NB! Tundub, et 2015 suvel töötab paremini HAProxy koormusjaoturina kasutamine.

ClamAV klastri kasutamine

Üks ClamAV deemoni clamd kasutaja võiks olla clamav-milter, mida omakorda kasutab Postfix, sellist juhtumit on kirjeldatud aadressil http://www.auul.pri.ee/wiki/Postfix,_Postscreen_ja_before-queue_kontrollide_kasutamine#clamav-milter.

Klastrilisus seisneb clamd seisukohast selles, et arvutites tuleks viirustate andmestiku uuendamine panna toimuma erinevatel aegadel, nt selliselt ühes arvutis

clamav-1 # cat /etc/cron.d/freshclam 
15 04 * * * root /usr/bin/freshclam 1>>/var/log/freshclam-cron.log 2>&1
clamav-1# cat /etc/cron.d/c4s-updater 
45 04 * * * root /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1

ja selliselt teises arvutis

clamav-2 # cat /etc/cron.d/freshclam 
15 05 * * * root /usr/bin/freshclam 1>>/var/log/freshclam-cron.log 2>&1
clamav-2 # cat /etc/cron.d/c4s-updater 
45 05 * * * root /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1

Clamav-milter seadistamine

Selleks, et clamav-milter kasutaks üle võrgu clamd klastrit tuleb kasutada seadistusfailis /etc/clamav/clamav-milter.conf sellist sektsiooni

# ClamdSocket unix:/var/run/clamd/clamd.socket
ClamdSocket tcp:10.0.6.26:3310
ClamdSocket tcp:10.0.6.27:3310

kus

  • unix soket on välja kommenteeritud (tingimata ei pea)
  • clamdsocket parameetrit võib kasutada mitu korda ja näidatakse kõik clamd teenuse node'id

HAProxy kasutamine clamd koormusjaoturina

Esmalt maksab üle korrata, et üldiselt

  • kui kasutusel on load balancer ja ta kasutab backend korrasoleku kontrollimiseks monitori, siis on paratamatu, et vahel võib lõppkasutaja jõuda kasutama konkreetsest parasjagu täieliselt mitte töötavast backendist teenust enne kui load balancer on jõudnud ta välja pool'ist lülitada (sellise juhtumi realiseerib HAProxy ja see sobib mitte-planeeritud backend tõrgetega toime tulemiseks)
  • selleks, et load balancer ei ühendaks kasutajat konkreetse backendiga seal toimuva planeeritud hooldustöö ajal, peab backend ise sellest balancerile piisava ajavaruga teada andma (sellise juhtumi realiseerib cron tööde juures Apache protsessi seiskamine ja käivitamine)

Tundub, et 2015 aasta suvel clamav-milter sisemine koormusjaotur ei toimi selles mõttes hästi, et kui clamav õlg on clamd andmestiku mällu lugemisega väga tegevuses, siis kuigi tcp ühendus õnnestub vms, ometi reaalselt viiruste analüüs mitte. Alternatiiv oleks sisulisema kontrolli korraldamine HAProxy, clamdscan ja Apache abil.

                                __|__                                   
                               |     | postfix + clamav-milter -> 127.0.0.1:3310
                               |_____| haproxy - 127.0.0.1:3310
                                  |
                                  |
                  ---|------------|------------|-----
                     |                         |
                   __|__                     __|__ 
                  |     |                   |     |
                  |_____|                   |_____|

            clamav-1 - 3310/tcp        clamav-2 - 3310/tcp
              apache - 80/tcp            apache - 80/tcp
           clamdscan                  clamdscan

kus

  • HAProxy vahendab clamav-milter jaoks üle võrgu kahes arvutis töötavat clamd teenust
  • clamav-milter kasutab clamd teenust aadressilt 127.0.0.1:3310
  • clamav-1 ja clamav-2 pakuvad ise teenuse haproxy jaoks oma võrguliidesel port 3310/tcp

Sisulisema monitori saab tekitada nt selliselt, tulemusena ei püüa HAProxy kasutada katkist node'i üle 25 sekundi

  • paigaldada HAProxy tarkvara - HAProxy kasutamine
  • clamav-1, 2 arvutites on käivitatud cron tööna skript /opt/clamav-daemon-check/bin/clamav-daemon-check.sh, nt 10 korda minutis
# cat clamav-daemon-check.sh 
#!/bin/bash

value=$( timeout 4 clamdscan /etc/fstab 1>/dev/null 2>&1; echo $? )

if test $value -eq 0; then
  touch /var/www/html/clamav-daemon-on-ok
else
  rm /var/www/html/clamav-daemon-on-ok
fi

anda skriptile käivitusõigus

# chmod 0755 /opt/clamav-daemon-check/bin/clamav-daemon-check.sh

ja (for kordusega saab korraldada tihedamini kui kord minutis programmi käivitamist)

# cat /etc/cron.d/clamav-daemon-check
* * * * * root for i in 0 1 2 3 4 5 6 7 8; do /opt/clamav-daemon-check/bin/clamav-daemon-check.sh & sleep 6; done; \
  /opt/clamav-daemon-check/bin/clamav-daemon-check.sh

clamdscan kontroll on iseenesest lokaalne kuna clamdscan ei oska üle võrgu clamd teenust kasutada.

  • apache serveerib ühe http /var/www/html dokumentjuurikat
  • haproxy seadistusfail võiks olla nt selline, kõige olulisem on listen sektsioon
# cat /etc/haproxy/haproxy.cfg
global
  log /dev/log local0
  chroot /var/lib/haproxy
  stats socket /run/haproxy/admin.sock mode 660 level admin
  stats timeout 30s
  user haproxy
  group haproxy
  daemon

defaults
  log     global
  mode    tcp
  option  tcplog
# option  dontlognull
  timeout connect 5000
  timeout client  5000
  timeout server  5000
 
listen clamd 127.0.0.1:3310
  mode tcp
  balance roundrobin
  option tcp-check
  option tcplog
  tcp-check send GET\ /clamav-daemon-on-ok\ HTTP/1.1\r\n
  tcp-check send Host:\ localhost\r\n
  tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
  tcp-check send \r\n
  tcp-check expect rstring HTTP/1\..\ (2..|3..)
  server clamd-1 10.0.6.26:3310 check inter 2000 port 80
  server clamd-2 10.0.6.27:3310 check inter 2000 port 80
  option log-health-checks

listen stats :1936
   mode http
   stats enable  
   stats hide-version
   stats realm Haproxy\ Statistics
   stats uri /
   stats auth kasutajanimi:parool

kus

  • global sektsioon määratleb üldised haproxy protsessi töötamist kontrollivad parameetrid
  • default sektsioon määratleb kõigi nn proxy-tüüpi sektsioonide jaoks toodud parameetrite vaikeväärtused
  • listen clamd kirjeldab clamav teenuse frontendi ja backendi otsad
  • clamd ise on 'mode tcp', kuid health checkina kasutatakse http päringut; selleks tuleb tcp-check sees kasutada send ja expect directiive
  • listen stats sektsioon määratleb statistika liidese

Statistika liides paistab selline

Fail:Clamav-1.gif

TCP koormusjaoturi logi sh backendide loksumine paistab logis selline

Aug 17 19:08:07 post-fend haproxy[535]: 127.0.0.1:35652 [17/Aug/2015:19:08:07.637] clamd clamd/clamd-2 1/0/10 11 -- 0/0/0/0/0 0/0
Aug 17 19:08:21 post-fend haproxy[535]: Health check for server clamd/clamd-1 succeeded, reason: Layer7 check passed, code: 0, info: "(tcp-check)", check duration: 0ms, status: 1/2 DOWN.
Aug 17 19:08:23 post-fend haproxy[535]: Health check for server clamd/clamd-1 succeeded, reason: Layer7 check passed, code: 0, info: "(tcp-check)", check duration: 0ms, status: 3/3 UP.
Aug 17 19:08:23 post-fend haproxy[535]: Server clamd/clamd-1 is UP. 2 active and 0 backup servers online. 0 sessions requeued, 0 total in queue.
Aug 17 19:08:25 post-fend haproxy[535]: 127.0.0.1:35672 [17/Aug/2015:19:08:25.345] clamd clamd/clamd-1 1/0/10 11 -- 0/0/0/0/0 0/0
Aug 17 19:08:27 post-fend haproxy[535]: 127.0.0.1:35675 [17/Aug/2015:19:08:27.066] clamd clamd/clamd-1 1/0/10 11 -- 0/0/0/0/0 0/0
Aug 17 19:08:38 post-fend haproxy[535]: 127.0.0.1:35689 [17/Aug/2015:19:08:38.950] clamd clamd/clamd-1 1/0/11 11 -- 0/0/0/0/0 0/0
Aug 17 19:08:40 post-fend haproxy[535]: 127.0.0.1:35693 [17/Aug/2015:19:08:40.626] clamd clamd/clamd-2 1/0/10 11 -- 0/0/0/0/0 0/0

Selleks, et clamav-milter jaoks toimis clamd teenus katkestuseta peab viiruste andmebaaside uuendamine peab toimuma node'ides erinevatel aegadel, nt nii ühes arvutis

clamav-1 # cat /etc/cron.d/freshclam 
10 04 * * * root systemctl stop apache2
15 04 * * * root /usr/bin/freshclam 1>>/var/log/freshclam-cron.log 2>&1
clamav-1 # cat /etc/cron.d/c4s-updater
20 04 * * * root /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1
05 05 * * * root systemctl start apache2

ja selliselt teises arvutis

clamav-2 # cat /etc/cron.d/freshclam 
10 05 * * * root systemctl stop apache2
15 05 * * * root /usr/bin/freshclam 1>>/var/log/freshclam-cron.log 2>&1
clamav-2 # cat /etc/cron.d/c4s-updater
20 05 * * * root /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1
05 06 * * * root systemctl start apache2

Kasulikud lisamaterjalid

Alternatiivne tööpõhimõte

Ülaltoodud skeemil on protsessid jaotatud kahe operatioonisüsteemi eksemplari (nt füüsilise arvuti) vahel selliselt, et ühele poole jääb Postfix ja clamav-milter, teisele poole jääb clamd. Alternatiiv on jaotada protsessid nii, et ühele poole jääb Postfix ning teisele poole clamav-milter koos clamd'ga. Põhimõttelisellt jääb kõigi komponentide seadisus samas v.a.

  • seadistusfailis clamav-milter.conf kasutada rida
MilterSocket inet:3309@10.0.6.190
  • Postfix juures tuleb milter väljakutse
smtpd_milters = unix:/clamav/clamav-milter.ctl

asendada

smtpd_milters = inet:10.0.6.190:3309

ClamAV Docker lahendus

Tööpõhimõte

Väited

  • konteineris töötavad kolm protsessi: clamd, clamav-milter ja freshclam

Ettevalmistamine

ClamAV Docker lahenduse eelduseks on nö tavalise Dockerhost arvuti kasutamine.

Docker - käsurealt

TODO

Docker - docker compose

TODO

Kasutamine Postfix juurest

TODO

Testimine

TODO

Kasulikud lisamaterjalid

Kasulikud lisamaterjalid