리눅스용 오픈소스 안티바이러스 ClamAV 설치 및 검사하기
- Published on
- Published on
Linux 운영체제는 일반적으로는 보안에 강하다는 이미지가 있습니다. 하지만 리눅스 서버가 메일 서버나 파일 서버 등 외부와 직접 데이터를 주고받는 경우라면 어떨까요? 외부와의 통신으로 들어온 악성 코드가 리눅스 서버에 영향을 미칠 수 있고, 대상 서버와 통신하는 다른 모든 서버들에 전파되는 경우도 있을 수 있습니다.
ClamAV
ClamAV는 메일 게이트웨이 환경에 특화된 오픈 소스 안티바이러스 도구입니다1. 우리가 일반적으로 사용하는 V3, 알약 등과는 달리 사용자 행위에 대한 실시간 감시, 자동 치료 등의 기능은 지원하지 않지만 메일 서버, 파일 서버 환경에서 파일들을 주기적으로 검사하는 용도로 사용하는 데 특화되어 있습니다.
이번 글에서는 ClamAV를 Rocky linux 9 환경에서 설치하고, 주기적으로 검사하도록 설정해 본 과정을 공유합니다.
설치
ClamAV는 EPEL을 통해 패키지 형태로 쉽게 설치할 수 있습니다.
> dnf install epel-release
> dnf install -y clamav clamav-update
사용
DB 업데이트
바이러스를 검사하려면 바이러스 정보 DB가 있어야겠죠. 최신 바이러스 DB로 업데이트를 해줍니다.
> freshclam
Tue Jun 10 22:19:18 2025 -> ClamAV update process started at Tue Jun 10 22:19:18 2025
Tue Jun 10 22:19:18 2025 -> daily database available for update (local version: 27662, remote version: 27664)
Current database is 2 versions behind.
Downloading database patch # 27663...
Time: 0.0s, ETA: 0.0s [========================>] 912B/912B
Downloading database patch # 27664...
Time: 0.0s, ETA: 0.0s [========================>] 1.28KiB/1.28KiB
Tue Jun 10 22:19:19 2025 -> Testing database: '/var/lib/clamav/tmp.5d89dc9667/clamav-70df4cfe4735066d446797260bf14d9f.tmp-daily.cld' ...
Tue Jun 10 22:19:25 2025 -> Database test passed.
Tue Jun 10 22:19:25 2025 -> daily.cld updated (version: 27664, sigs: 2075751, f-level: 90, builder: raynman)
Tue Jun 10 22:19:25 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Tue Jun 10 22:19:25 2025 -> bytecode.cvd database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)
검사 실행
설치도 했고, 최신 바이러스 DB로 업데이트도 했으니 이제 검사를 해봐야겠죠. 검사는 다음과 같이 실행할 수 있습니다.
> clamscan [option] [file/dir]
clamscan -h
로 다양한 옵션 설명을 볼 수 있는데, 주로 사용할만한 것은 다음과 같습니다.
-r
,--recursive
: 하위 디렉토리 모두 검사-i
,--infected
: 감염된 파일만 출력 (이 옵션 없으면 모든 검사 대상 파일의 경로가 출력됩니다)--exclude-dir=REGEX
: 정규식에 일치하는 디렉토리는 검사에서 제외--move=DIR
: 감염된 파일을 특정 디렉토리로 옮김 (격리)--max-filesize=SIZE
: 이 크기보다 큰 파일은 검사 안 함
주기적 검사
명령어로 실행하는 것은 일회성입니다. 다음과 같은 요구사항이 있다면 어떻게 할까요?
/data
경로 아래 모든 파일을 매일 새벽 1시 30분에 검사하는데/data/video
경로는 용량이 너무 커서 제외하고 싶고- 검사 결과는 로그로 저장하고 싶은데 로그 용량은 너무 크면 안된다
매일 새벽 1시 반에 서버에 접속하는 대신 다음과 같이 cron 작업을 등록하여 자동으로 실행할 수 있습니다.
> crontab -e
30 1 * * * clamscan -ri --exclude-dir='^/data/video' /data >> /var/log/clamscan.log 2>&1
이 시간에 작업이 잘 되었는지는 로그를 보면 알 수 있습니다.
> cat /var/log/cron | grep clamscan
Jun 11 01:30:02 rocky9 CROND[52970]: (root) CMD (clamscan -ri --exclude-dir='^/data/video' /data >> /var/log/clamscan.log 2>&1)
Jun 11 01:57:03 rocky9 CROND[52957]: (root) CMDEND (clamscan -ri --exclude-dir='^/data/video' /data >> /var/log/clamscan.log 2>&1)
> cat /var/log/clamscan.log
LibClamAV Warning: cli_scanxz: decompress file size exceeds limits - only scanning 105906176 bytes
----------- SCAN SUMMARY -----------
Known viruses: 8707518
Engine version: 1.0.8
Scanned directories: 18171
Scanned files: 85082
Infected files: 0
Data scanned: 10357.80 MB
Data read: 10864.75 MB (ratio 0.95:1)
Time: 1621.057 sec (27 m 1 s)
Start Date: 2025:06:11 01:30:02
End Date: 2025:06:11 01:57:03
Footnotes
"ClamAV." ClamAV Documentation. https://docs.clamav.net/Introduction.html (accessed Jun. 8, 2025). ↩