ClamAV kasutamine: erinevus redaktsioonide vahel
(Uus lehekülg: '===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...') |
|||
(ei näidata sama kasutaja 27 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 |
||
449. rida: | 451. rida: | ||
smtpd_milters = inet:10.0.6.190:3309 |
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 |
||
+ | * teksti on koostatud ClamAV v. 1.3.1 tingimustes |
||
+ | * https://github.com/Cisco-Talos/clamav-docker/blob/main/clamav/1.3/debian/Dockerfile |
||
+ | * olemas on alpine (clamav/clamav) ja debian (clamav/clamav-debian) põhised tõmmised github keskkonnas, tundub, et debian on perspektiivikam (nt multiarch) |
||
+ | |||
+ | ====Ettevalmistamine==== |
||
+ | |||
+ | ClamAV Docker lahenduse eelduseks on nö tavalise Dockerhost arvuti kasutamine, vt nt https://docs.docker.com/engine/install/debian/ |
||
+ | |||
+ | ====Docker - käsurealt==== |
||
+ | |||
+ | TODO |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | kus |
||
+ | |||
+ | * TODO |
||
+ | |||
+ | Programmifailid, /usr/local/bin/clamdcheck.sh |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | 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 |
||
+ | |||
+ | <pre> |
||
+ | $ 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 |
||
+ | </pre> |
||
+ | |||
+ | kus |
||
+ | |||
+ | * TODO |
||
+ | |||
+ | /etc/clamav/clamd.conf |
||
+ | |||
+ | <pre> |
||
+ | $ 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 |
||
+ | </pre> |
||
+ | |||
+ | kus |
||
+ | |||
+ | * TODO |
||
+ | |||
+ | freshclam.conf |
||
+ | |||
+ | <pre> |
||
+ | $ 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 |
||
+ | </pre> |
||
+ | |||
+ | clamav-milter-whitelist.txt |
||
+ | |||
+ | <pre> |
||
+ | $ cat clamav-milter-whitelist.txt |
||
+ | From:tr@moraal.ee |
||
+ | From:root@moraal.ee |
||
+ | </pre> |
||
+ | |||
+ | Käivitamiseks |
||
+ | |||
+ | root@dh-post:~/20240722# sh run-docker.sh |
||
+ | |||
+ | Konterineri uurimine |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | ning võrguühendustega seotud info |
||
+ | |||
+ | <pre> |
||
+ | / # 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 - |
||
+ | </pre> |
||
+ | |||
+ | ning logifailid |
||
+ | |||
+ | <pre> |
||
+ | / # 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 |
||
+ | </pre> |
||
+ | |||
+ | ====Docker - docker compose==== |
||
+ | |||
+ | TODO |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | kus |
||
+ | |||
+ | * TODO |
||
+ | |||
+ | Kasutamiseks sobib öelda |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | ... |
||
+ | </pre> |
||
+ | |||
+ | ====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 |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | C4S seadistusfail on nt selline |
||
+ | |||
+ | <pre> |
||
+ | 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" |
||
+ | </pre> |
||
+ | |||
+ | 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 |
||
+ | |||
+ | <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. |
||
+ | |||
+ | C4S uuedamine toimub docker host cron töö abil |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | ====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 |
||
+ | |||
+ | <pre> |
||
+ | 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 |
||
+ | </pre> |
||
+ | |||
+ | ====Kasulikud lisamaterjalid==== |
||
+ | |||
+ | * https://docs.clamav.net/manual/Installing/Docker.html |
||
+ | * [[:Docker compose kasutamine]] |
||
+ | |||
+ | ===ClamAV kubernetes lahendus=== |
||
+ | |||
+ | TODO |
||
===Kasulikud lisamaterjalid=== |
===Kasulikud lisamaterjalid=== |
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
- 3RDP (http://c4s.pikker.ee/3rdp.database.list.txt) - partnerite poolt tehtud analüüsi põhjal koostatud ja C4S projekti poolt vahendatud andmestik
- C4S (http://c4s.pikker.ee/c4s.database.list.txt) - C4S projekti tehtud analüüsi põhjal koostatud andmestik
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
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
- teksti on koostatud ClamAV v. 1.3.1 tingimustes
- https://github.com/Cisco-Talos/clamav-docker/blob/main/clamav/1.3/debian/Dockerfile
- olemas on alpine (clamav/clamav) ja debian (clamav/clamav-debian) põhised tõmmised github keskkonnas, tundub, et debian on perspektiivikam (nt multiarch)
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