ClamAV는 오픈소스 기반의 안티바이러스(백신) 소프트웨어입니다. 바이러스, 트로이 목마, 악성코드를 탐지하는 데 사용되며, 주로 Linux 환경에서 FTP나 Samba로 접근 가능한 사용자 디렉터리, 웹사이트 디렉터리, 또는 메일 서버(MTA 에이전트)의 이메일을 스캔하는 용도로 활용됩니다.
이 글에서는 CentOS 또는 RHEL Linux 배포판이 설치된 서버에 ClamAV를 설치하고, 설정하며, 실제로 사용하는 방법까지 단계별로 자세히 알아보겠습니다.
CentOS/RHEL에 ClamAV 설치하기
ClamAV는 기본 Linux 저장소에는 포함되어 있지 않기 때문에, 설치하려면 먼저 EPEL 저장소를 추가해야 합니다.
# yum install epel-release -y
EPEL 저장소 설치가 완료되면 ClamAV 관련 패키지들을 설치할 수 있습니다. CentOS 7 이하에서는 yum을, CentOS 8 이상에서는 dnf 패키지 관리자를 사용합니다.
# yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd
Linux에서 ClamAV 기본 설정하기
자신만의 ClamAV 설정을 구성하려면 먼저 기본 설정 파일인 /etc/clamd.d/scan.conf에서 'Example' 주석 처리 작업을 진행해야 합니다. 아래 명령어로 간단히 처리할 수 있습니다.
# sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf
그다음 설정 파일을 열어 편집합니다.
# nano /etc/clamd.d/scan.conf
설정 파일에서 아래 줄의 주석을 해제합니다.
LocalSocket /run/clamd.scan/clamd.sock
필요에 따라 다른 설정 항목들도 주석 해제하여 활성화할 수 있습니다. 예를 들어 로깅 기능을 켜거나 최대 연결 수를 조정하는 등의 설정이 가능합니다. 참고로 /etc/clamd.d/scan.conf 파일에는 모든 설정 항목에 대한 상세한 설명이 포함되어 있어 설정 시 큰 도움이 됩니다.
freshclam으로 바이러스 정의 DB 업데이트
ClamAV의 바이러스 시그니처 데이터베이스를 업데이트하려면 freshclam 유틸리티를 사용해야 합니다. 먼저 현재 설정 파일을 백업합니다.
# cp /etc/freshclam.conf /etc/freshclam.conf.bak
그런 다음 아래 명령어를 실행합니다.
# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
이제 바이러스 정의를 업데이트합니다.
# freshclam
업데이트 과정에서 일부 미러 서버에 접속하지 못해 오류가 발생할 수 있지만, freshclam은 자동으로 다른 미러를 찾아 성공적으로 업데이트를 완료합니다.
freshclam 자동 업데이트 설정
freshclam이 자동으로 업데이트를 확인하도록 하려면 -d(데몬 모드) 파라미터와 함께 실행하면 됩니다.
# freshclam -d
이렇게 실행하면 2시간마다 자동으로 업데이트 여부를 확인합니다.
더 편리하게 관리하려면 freshclam용 systemd 서비스 파일을 생성하는 것이 좋습니다.
# nano /usr/lib/systemd/system/freshclam.service
파일에 아래 내용을 추가합니다.
[Unit] Description = freshclam After = network.target [Service] Type = forking ExecStart = /usr/bin/freshclam -d -c 4 Restart = on-failure PrivateTmp = true RestartSec = 10sec [Install] WantedBy=multi-user.target
systemd 데몬을 리로드한 후 서비스를 시작하고 부팅 시 자동 시작되도록 등록합니다.
# systemctl daemon-reload
# systemctl start freshclam.service
# systemctl enable freshclam.service
# systemctl status freshclam.service
ClamAV 서비스(clamd) 등록하기
freshclam과 마찬가지로 ClamAV 본체도 서비스로 등록해야 합니다. 설정 파일은 이미 존재하지만 파일명을 변경해야 합니다.
# mv /usr/lib/systemd/system/clamd\@.service /usr/lib/systemd/system/clamd.service
편의를 위해 파일명에서 '@' 문자를 제거했습니다. 그다음 파일 내용을 아래와 같이 수정합니다.
[Unit] Description = clamd scanner daemon After = syslog.target nss-lookup.target network.target [Service] Type = forking ExecStart = /usr/sbin/clamd -c /etc/clamd.d/scan.conf # Reload the database ExecReload=/bin/kill -USR2 $MAINPID Restart = on-failure TimeoutStartSec=420 [Install] WantedBy = multi-user.target
이제 백신 서비스를 시작하고 부팅 시 자동 실행되도록 활성화합니다.
# systemctl start clamd.service
# systemctl enable clamd.service
ClamAV로 바이러스 검사하는 방법
ClamAV 백신 서비스 설정이 완료되면 서버의任意 디렉터리를 대상으로 바이러스 검사(스캐너 모드)를 수행할 수 있습니다. 지정한 디렉터리를 검사하려면 아래 명령어를 사용합니다.
# clamscan --infected --remove --recursive /var/www/
위 파라미터를 사용하면 감염된 파일을 즉시 삭제합니다. 만약 의심 파일을 삭제하지 않고 별도 디렉터리로 이동시키고 싶다면 --move 파라미터를 사용하세요.
# clamscan --infected --recursive --move=/tmp/clamscan /var/www
이 명령어는 지정된 디렉터리의 전체 내용을 검사하고, 의심스러운 파일들을 /tmp/clamscan 디렉터리로 이동시킵니다. 검사 결과 감염된 파일이 지정한 디렉터리로 정상적으로 이동된 것을 확인할 수 있습니다.
검사 과정에 대한 모든 정보를 로그 파일로 남기고 싶다면 --log 파라미터를 추가하면 됩니다.
# clamscan --infected --recursive --move=/tmp/clamscan --log=/var/log/clamscan.log /var/www
특정 디렉터리를 검사 대상에서 제외하려면 --exclude-dir 파라미터를 사용합니다.
# clamscan -i --recursive --move=/tmp/clamscan --log=/var/log/clamscan.log --exclude-dir="/var/www/administrator" /var/www
정기적인 바이러스 검사 자동화
주기적으로 바이러스 검사를 수행하려면 원하는 설정으로 cron 작업(cron job)을 등록하면 됩니다. 예를 들어 매일 새벽 특정 시간에 자동으로 검사가 실행되도록 스케줄링할 수 있습니다.
또한 ClamAV에는 ClamTk라는 그래픽 프론트엔드(GUI)도 제공되므로, 명령줄 환경이 익숙하지 않은 사용자라면 ClamTk를 활용하는 것도 좋은 방법입니다.