ClamAV kasutamine: erinevus redaktsioonide vahel

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
 
(ei näidata sama kasutaja 6 vahepealset redaktsiooni)
147. rida: 147. rida:
   
 
===C4S reeglite kasutamine===
 
===C4S reeglite kasutamine===
  +
  +
MÄRKUS 2024: WKD on kasutusel gdg avaliku võtme kopeerimiseks (st üle https://)
   
 
2015 aasta kevadel leivitatakse aadressil http://c4s.pikker.ee/ kahte komplekti reegleid
 
2015 aasta kevadel leivitatakse aadressil http://c4s.pikker.ee/ kahte komplekti reegleid
718. rida: 720. rida:
 
services:
 
services:
 
svc_clamav:
 
svc_clamav:
image: clamav/clamav:latest_base
+
image: clamav/clamav-debian:latest_base
 
 
 
environment:
 
environment:
764. rida: 766. rida:
 
</pre>
 
</pre>
   
====Docker compose - C4S====
+
====C4S - Docker compose====
  +
  +
Väited
  +
  +
* enne käesoleva punkti soovituste rakendamist on seadistatud käima käesoleva teksti eelmises punktis 'Docker compose' kirjeldatud lahendus
  +
* C4S asub aadressil https://c4s.pikker.ee/
  +
* C4S esmane ja järgmised käivitamised toimuvad clamav ausa konteineri sees
  +
* C4S ennast st c4s.updater.sh skripti ei paigaldata konteinerisse vaid monteeritakse dockerhost pealt külge
  +
* C4S seadistusfail monteeritakse külge
  +
* C4S jaoks vajalik tarkvara on lisatud käsitsi konteinerisse juurde (ei ole ilus)
  +
* C4S töötamise logi tekib monteeritud kataloogi muu clamav logiga samasse kataloogi
  +
* C4S nö mustrid kopeeritakse muu clamav kraamiga samasse /var/lib/clamav kataloogi
  +
* C4S käivitamine tomub dockerhost cron abil, selle käivituse logi salvestatakse clamav kraamiga samasse kataloogi
   
 
Selleks, et vältida tõmmise kohendamist kasutatakse käivitatud konteineri käsitsi nö rikastamist vajaliku tarkvaraga
 
Selleks, et vältida tõmmise kohendamist kasutatakse käivitatud konteineri käsitsi nö rikastamist vajaliku tarkvaraga
770. rida: 784. rida:
 
<pre>
 
<pre>
 
root@dh-ttp:/srv/clamav/dc# cat run-in-container.sh
 
root@dh-ttp:/srv/clamav/dc# cat run-in-container.sh
  +
docker exec cn_clamav apt-get update -y
 
docker exec cn_clamav apt-get install -y net-tools curl gnupg pixz xz-utils less
 
docker exec cn_clamav apt-get install -y net-tools curl gnupg pixz xz-utils less
  +
  +
root@dh-ttp:/srv/clamav/dc# sh run-in-container.sh
 
</pre>
 
</pre>
   
786. rida: 803. rida:
 
kus
 
kus
   
* automaatne uuendamine on välja lülitatud, seda teeb dockerhost pealt cron töö
+
* automaatne uuendamine on välja lülitatud (seda tuleb teha käsitsi https://c4s.pikker.ee/ pealt uue versiooni c4s.updater.sh kopeerimise teel)
  +
* logitakse mitte TTY st teriminalile aga faili
  +
* kasutatakse sobivat exclude listi (nt agressiivsete nimekirjade välja lülitamiseks)
 
* clamd deemonile tehakse reload käsuga "clamdscan --reload" konteineri sees
 
* clamd deemonile tehakse reload käsuga "clamdscan --reload" konteineri sees
 
* log asub muu clamav logiga samas kataloogis /var/log/clamav
 
* log asub muu clamav logiga samas kataloogis /var/log/clamav
  +
  +
docker-compose yaml sisaldab lisaks selliseid volume mountisid
  +
  +
<pre>
  +
..
  +
volumes:
  +
...
  +
- '/srv/clamav/volume/etc/C4S.cfg:/etc/C4S.cfg'
  +
- '/srv/clamav/volume/usr/local/bin/c4s.updater.sh:/usr/local/bin/c4s.updater.sh'
  +
....
  +
</pre>
   
 
Esmase C4S käivitamisel saadakse autori gpg võti WKD ((web key directory) abil https:// serveri käest, url tuletatakse id väärtusest. gpg avalikku võtit kasutatakse signaruuride abil andmete autentsuses veendumiseks.
 
Esmase C4S käivitamisel saadakse autori gpg võti WKD ((web key directory) abil https:// serveri käest, url tuletatakse id väärtusest. gpg avalikku võtit kasutatakse signaruuride abil andmete autentsuses veendumiseks.
799. rida: 829. rida:
   
 
dh# cat /srv/clamav/dc/cron-c4s-updater.sh
 
dh# cat /srv/clamav/dc/cron-c4s-updater.sh
docker exec cn_clamav /usr/local/bin/c4s.updater.sh 1>>/var/log/cron-c4s-updater.log 2>&1
+
docker exec cn_clamav /usr/local/bin/c4s.updater.sh 1>>/srv/clamav/volume/var/log/clamav/cron-c4s-updater.log 2>&1
 
</pre>
 
</pre>
   

Viimane redaktsioon: 24. juuli 2024, kell 13:09

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

MÄRKUS 2024: WKD on kasutusel gdg avaliku võtme kopeerimiseks (st üle https://)

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

Ettevalmistamine

ClamAV Docker lahenduse eelduseks on nö tavalise Dockerhost arvuti kasutamine, vt nt https://docs.docker.com/engine/install/debian/

Docker - käsurealt

TODO

root@dh-ttp:~# cat 20240722/run-docker.sh 
docker run -it \
    --name "cn_clamav" \
    --mount type=bind,source=/srv/clamav/volume/var/lib/clamav,target=/var/lib/clamav \
    --mount type=bind,source=/srv/clamav/volume/etc/clamav/clamav-milter.conf,target=/etc/clamav/clamav-milter.conf \
    --mount type=bind,source=/srv/clamav/volume/etc/clamav/clamd.conf,target=/etc/clamav/clamd.conf \
    --mount type=bind,source=/srv/clamav/volume/etc/clamav/clamav-milter-whitelist.txt,target=/etc/clamav/clamav-milter-whitelist.txt \
    --mount type=bind,source=/srv/clamav/volume/usr/local/bin/clamdcheck.sh,target=/usr/local/bin/clamdcheck.sh \
    --mount type=bind,source=/srv/clamav/volume/etc/clamav/freshclam.conf,target=/etc/clamav/freshclam.conf \
    --publish 7357:7357 \
    --env 'CLAMAV_NO_MILTERD=false' \
    --env 'TZ=Europe/Tallinn' \
    clamav/clamav:latest_base

kus

  • TODO

Programmifailid, /usr/local/bin/clamdcheck.sh

root@dh-post:~# cat /srv/clamav/volume/usr/local/bin/clamdcheck.sh 
#!/bin/sh

set -eu

if [ "${CLAMAV_NO_CLAMD:-}" != "false" ]; then
	if [ "$(echo "PING" | nc 127.0.0.1 3310)" != "PONG" ]; then
		echo "ERROR: Unable to contact server"
		exit 1
	fi

	echo "Clamd is up"
fi

exit 0

kus

  • healthcheck töötamiseks tuleb muuta 'nc localhost' -> 'nc 127.0.0.1' ('docker ps' väljundis on muidu status 'starting' ja mitte 'healthy')

Seadistusfailid

/etc/clamav/clamav-milter.conf

$ egrep -v "^$|^#" clamav-milter.conf | sort  
AddHeader Add
ClamdSocket unix:/tmp/clamd.sock
FixStaleSocket yes
Foreground yes
LogClean Full
LogFile /var/log/clamav/milter.log
LogInfected Full
LogTime yes
LogVerbose yes
MaxFileSize 25M
MilterSocket inet:7357
OnClean Accept
OnFail Defer
OnInfected Reject
PidFile /tmp/clamav-milter.pid
ReadTimeout 120
RejectMsg "Rejected by ClamAV"
ReportHostname mail.auul.pri.ee
SupportMultipleRecipients yes
TemporaryDirectory /var/tmp
User clamav
Whitelist /etc/clamav/clamav-milter-whitelist.txt

kus

  • TODO

/etc/clamav/clamd.conf

$ egrep -v "^$|^#" clamd.conf | sort      
AllowAllMatchScan yes
Bytecode yes
BytecodeSecurity TrustSigned
BytecodeTimeout 10000
CacheSize 65536
CommandReadTimeout 30
ConcurrentDatabaseReload yes
CrossFilesystems yes
DatabaseDirectory /var/lib/clamav
Debug no
DetectPUA no
DisableCache no
DisableCertCheck no
ExitOnOOM yes
ExtendedDetectionInfo yes
FixStaleSocket yes
FollowDirectorySymlinks false
FollowFileSymlinks no
ForceToDisk false
Foreground no
GenerateMetadataJson no
HeuristicAlerts yes
HeuristicScanPrecedence no
IdleTimeout 30
LeaveTemporaryFiles no
LocalSocket /tmp/clamd.sock
LogClean yes
LogFacility LOG_LOCAL6
LogFile /var/log/clamav/clamd.log
LogFileMaxSize 200M
LogFileUnlock no
LogRotate yes
LogSyslog no
LogTime yes
LogVerbose yes
MaxConnectionQueueLength 200
MaxDirectoryRecursion 15
MaxEmbeddedPE 40M
MaxFileSize 25M
MaxHTMLNoTags 8M
MaxHTMLNormalize 25M
MaxIconsPE 100
MaxPartitions 50
MaxQueue 200
MaxRecHWP3 16
MaxRecursion 10
MaxScanSize 100M
MaxScanTime 120000
MaxScriptNormalize 20M
MaxThreads 20
MaxZipTypeRcg 1M
OfficialDatabaseOnly no
OnAccessMaxFileSize 5M
OnAccessRetryAttempts 0
PCREMatchLimit 20000
PCREMaxFileSize 25M
PCRERecMatchLimit 10000
PhishingScanURLs yes
PhishingSignatures yes
PidFile /tmp/clamd.pid
PreludeAnalyzerName ClamAV
PreludeEnable no
ReadTimeout 180
ScanArchive yes
ScanELF yes
ScanHTML yes
ScanHWP3 yes
ScanMail yes
ScanOLE2 yes
ScanOneNote yes
ScanPDF yes
ScanPE yes
ScanPartialMessages yes
ScanSWF yes
ScanXMLDOCS yes
SelfCheck 86400
SendBufTimeout 200
StreamMaxLength 25M
StreamMaxPort 32000
StreamMinPort 30000
StructuredCCOnly no
StructuredDataDetection no
StructuredMinCreditCardCount 5
StructuredMinSSNCount 5
StructuredSSNFormatNormal yes
StructuredSSNFormatStripped no
TCPAddr 0.0.0.0
TCPSocket 3310
TemporaryDirectory /var/tmp
User clamav

kus

  • TODO

freshclam.conf

$ egrep -v "^$|^#" freshclam.conf  | sort                                                                                                                                                              
DatabaseMirror database.clamav.net
DatabaseOwner clamav
NotifyClamd /etc/clamav/clamd.conf
PidFile /tmp/freshclam.pid
ScriptedUpdates yes
UpdateLogFile /var/log/clamav/freshclam.log

clamav-milter-whitelist.txt

$ cat clamav-milter-whitelist.txt 
From:tr@moraal.ee
From:root@moraal.ee

Käivitamiseks

root@dh-post:~/20240722# sh run-docker.sh

Konterineri uurimine

root@dh-post:/srv/clamav/dc# docker ps
CONTAINER ID   IMAGE                       COMMAND   CREATED         STATUS                   PORTS                                                 NAMES
27ec83fa556f   clamav/clamav:latest_base   "/init"   6 minutes ago   Up 6 minutes (healthy)   3310/tcp, 0.0.0.0:7357->7357/tcp, :::7357->7357/tcp   cn_clamav

root@dh-post:~/20240722# docker exec -it cn_clamav sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 {init} /sbin/tini /bin/sh /init
    6 root      0:00 tail -f /dev/null
   10 clamav    0:00 freshclam --checks=1 --daemon --foreground --stdout --user=clamav
   12 clamav    0:25 clamd --foreground
   75 clamav    0:00 clamav-milter
   93 root      0:00 sh
 2727 root      0:00 sh
 2733 root      0:00 ps aux

ning võrguühendustega seotud info

/ # netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3310            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:7357            0.0.0.0:*               LISTEN      -

ning logifailid

/ # ls -ld /var/log/clamav/*
-rw-r-----    1 clamav   clamav       11585 Jul 22 12:55 /var/log/clamav/clamd.log
-rw-r-----    1 clamav   clamav        1457 Jul 22 11:29 /var/log/clamav/freshclam.log
-rw-r-----    1 clamav   clamav        8018 Jul 22 12:55 /var/log/clamav/milter.log

Docker - docker compose

TODO

root@dh-post:/srv/clamav/dc# cat docker-compose-clamav.yaml 
services:
  svc_clamav:
    image: clamav/clamav-debian:latest_base
    
    environment:
      - CLAMAV_NO_MILTERD=false
      - TZ=Europe/Tallinn
    
    ports:
      - '7357:7357'
  
    container_name: cn_clamav
    
    networks:
      - nw_clamav
      
    volumes:
      - '/srv/clamav/volume/var/lib/clamav:/var/lib/clamav'
      - '/srv/clamav/volume/etc/clamav/clamav-milter.conf:/etc/clamav/clamav-milter.conf'
      - '/srv/clamav/volume/etc/clamav/clamd.conf:/etc/clamav/clamd.conf'
      - '/srv/clamav/volume/etc/clamav/clamav-milter-whitelist.txt:/etc/clamav/clamav-milter-whitelist.txt'
      - '/srv/clamav/volume/usr/local/bin/clamdcheck.sh:/usr/local/bin/clamdcheck.sh'
      - '/srv/clamav/volume/etc/clamav/freshclam.conf:/etc/clamav/freshclam.conf'
      - '/srv/clamav/volume/var/log/clamav:/var/log/clamav'
  
networks:
  nw_clamav:
    name: nw_clamav
    driver: bridge

kus

  • TODO

Kasutamiseks sobib öelda

root@dh-post:/srv/clamav/dc# docker compose -f docker-compose-clamav.yaml up -d

root@dh-post:/srv/clamav/dc# docker compose ls
NAME                STATUS              CONFIG FILES
dc                  running(1)          /srv/clamav/dc/docker-compose-clamav.yaml

root@dh-post:/srv/clamav/dc# docker compose -f docker-compose-clamav.yaml logs -f
...

C4S - Docker compose

Väited

  • enne käesoleva punkti soovituste rakendamist on seadistatud käima käesoleva teksti eelmises punktis 'Docker compose' kirjeldatud lahendus
  • C4S asub aadressil https://c4s.pikker.ee/
  • C4S esmane ja järgmised käivitamised toimuvad clamav ausa konteineri sees
  • C4S ennast st c4s.updater.sh skripti ei paigaldata konteinerisse vaid monteeritakse dockerhost pealt külge
  • C4S seadistusfail monteeritakse külge
  • C4S jaoks vajalik tarkvara on lisatud käsitsi konteinerisse juurde (ei ole ilus)
  • C4S töötamise logi tekib monteeritud kataloogi muu clamav logiga samasse kataloogi
  • C4S nö mustrid kopeeritakse muu clamav kraamiga samasse /var/lib/clamav kataloogi
  • C4S käivitamine tomub dockerhost cron abil, selle käivituse logi salvestatakse clamav kraamiga samasse kataloogi

Selleks, et vältida tõmmise kohendamist kasutatakse käivitatud konteineri käsitsi nö rikastamist vajaliku tarkvaraga

root@dh-ttp:/srv/clamav/dc# cat run-in-container.sh 
docker exec cn_clamav apt-get update -y
docker exec cn_clamav apt-get install -y net-tools curl gnupg pixz xz-utils less

root@dh-ttp:/srv/clamav/dc# sh run-in-container.sh 

C4S seadistusfail on nt selline

root@dh-ttp:/srv/clamav/dc# cat /srv/clamav/volume/etc/C4S.cfg 
C4S_CLIENT_AUTOUPDATE="OFF"
C4S_CLIENT_OUTPUT="LOG"
C4S_DB_IGNORE_LIST="c4s.0days|c4s.adult.0days|c4s.junk.0days|c4s.junk.email.autogen|c4s.junk.url.autogen|c4s.malware.dom.autogen|c4s.malware.email.autogen|c4s.malware.ip.autogen|c4s.malware.url.autogen|c4s.phishing.dom.autogen|c4s.phishing.email.autogen|c4s.phishing.url.autogen|c4s.junk.dom.autogen|c4s.junk.ip.autogen|c4s.malware.sha256.autogen"
CLAMAV_RELOAD_CMD="clamdscan --reload"
C4S_UPDATER_LOG="/var/log/clamav/c4s.updater.log"

kus

  • automaatne uuendamine on välja lülitatud (seda tuleb teha käsitsi https://c4s.pikker.ee/ pealt uue versiooni c4s.updater.sh kopeerimise teel)
  • logitakse mitte TTY st teriminalile aga faili
  • kasutatakse sobivat exclude listi (nt agressiivsete nimekirjade välja lülitamiseks)
  • clamd deemonile tehakse reload käsuga "clamdscan --reload" konteineri sees
  • log asub muu clamav logiga samas kataloogis /var/log/clamav

docker-compose yaml sisaldab lisaks selliseid volume mountisid

..
  volumes:
...
      - '/srv/clamav/volume/etc/C4S.cfg:/etc/C4S.cfg'
      - '/srv/clamav/volume/usr/local/bin/c4s.updater.sh:/usr/local/bin/c4s.updater.sh'
....

Esmase C4S käivitamisel saadakse autori gpg võti WKD ((web key directory) abil https:// serveri käest, url tuletatakse id väärtusest. gpg avalikku võtit kasutatakse signaruuride abil andmete autentsuses veendumiseks.

C4S uuedamine toimub docker host cron töö abil

dh# cat /etc/cron.d/c4s-updater
45 04 * * * root /srv/clamav/dc/cron-c4s-updater.sh

dh# cat /srv/clamav/dc/cron-c4s-updater.sh
docker exec cn_clamav /usr/local/bin/c4s.updater.sh 1>>/srv/clamav/volume/var/log/clamav/cron-c4s-updater.log 2>&1

Kasutamine Postfix juurest

TODO

Muu hulgas

smtpd_milters = inet:192.168.1.243:7357 ...

Testimine

Väited

  • postfix, clamav-milter ja clamd protsessid töötavad andmetega järjestikuliselt, st põhimõtteliselt peaks toimetamise nö kannatlikkus mööda ahelat edasi minnes vähenema; nt postfix ootab vastust milter käest kauem kui milter ootab vastust clamd käest; vastasel korral postfix nö vaatas, et vastust ei tule ja loobus, samas taustal clamd möllab edasi
  • postfix, clamav-milter ja clamd protsessid töötavad andmetega järjestikuliselt, st põhimõtteliselt peaks toimetamise lubatud mahud mööda ahelat edasi minnes suurename; nt postfix võtab vastu 25 MBait suuruse kirja ja clam-milter on nõus pisut suuremad ka ära kannatama; vastasel korral postfix annab oma poole pöördujale lubaduse tegeleda mahuga, aga tema teenindaja keeldub mahu alusel ja postfix jääb rumalasse olukorda

eicar testimiseks sobib öelda

root@post-relay:~# sendemail -f kasutaja@auul.pri.ee -t kasutaja@gmail.com -u 'test 51' -s 127.0.0.1 -m 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' -o tls=no
Jul 22 17:20:11 post-relay sendemail[431]: ERROR => Received: 	550 5.7.1 Rejected by ClamAV

Kasulikud lisamaterjalid

ClamAV kubernetes lahendus

TODO

Kasulikud lisamaterjalid