본문 바로가기
시스템(Linux)

리눅스 서버 악성코드 철통 방어(리눅스 오픈소스 안티바이러스 ClamAV)

by forward error correction Circle 2026. 9. 7.
반응형

리눅스 서버 악성코드 철통 방어! ClamAV 기술에 대해 알아보겠습니다.

Ⅰ. ClamAV 기술이란?

ClamAV는 리눅스 환경에서 널리 사용되는 오픈소스 안티바이러스(백신) 엔진입니다. 2002년에 시작되어 현재는 시스코 탈로스(Cisco Talos)가 유지보수하고 있습니다. 리눅스 서버 자체를 방어하기보다는 서버를 경유하여 사용자에게 전달되는 파일(메일 첨부파일, 웹 업로드 파일, 공유 스토리지 등)을 검사해 악성코드를 걸러내는 '게이트웨이 검사기' 용도에 가장 최적화된 기술입니다.

Ⅱ. ClamAV 기술 특징

  • 세분화된 도구 구조: 시그니처 갱신(freshclam), 상주 데몬(clamd), 검사 클라이언트(clamscan / clamdscan)로 역할이 명확히 나뉘어 있습니다.
  • 빠른 메모리 상주 검사: clamd 데몬이 시작될 때 시그니처를 한 번 메모리에 올려두고 재사용하므로, 매번 DB를 읽지 않아 대량/반복 검사 속도가 매우 빠릅니다.
  • 유연한 소켓 기반 연동: clamd는 Unix 소켓이나 TCP 포트(기본 3310)를 열어, 메일 필터나 웹 애플리케이션으로부터 직접 검사 요청을 받을 수 있습니다.
  • 심층 내부 포맷 검사: zip, tar 등 압축 파일은 물론 오피스 문서, PDF, 실행 파일 등을 해제하여 내부 구조까지 파악합니다.
  • 온액세스(On-Access) 검사 지원: 리눅스 커널의 fanotify를 활용하여 파일이 열리거나 닫히는 순간 감시하는 기능(clamonacc)도 지원합니다.
  • 무료 시그니처 및 확장성: GPL 라이선스로 시그니처가 무료 제공되며, sigtool을 통해 자체 조직용 시그니처를 만들어 추가할 수 있습니다.

Ⅲ. ClamAV 기술 동작방식

ClamAV는 최신 바이러스를 판별하기 위해 3가지 핵심 요소가 유기적으로 동작합니다.

  1. 시그니처 갱신: freshclam이 공식 서버(database.clamav.net)에서 기본/일일/스크립트형 시그니처 DB를 주기적으로 다운로드하여 저장소에 둡니다.
  2. 엔진 상주: clamd 데몬이 해당 시그니처 DB를 통째로 메모리에 적재하고 대기합니다. (시그니처 갱신 시 자동 재적재)
  3. 클라이언트 요청: 앱 또는 clamdscan이 띄워져 있는 데몬의 소켓으로 파일(스트림)을 던지면, 데몬이 대조 후 결과를 반환합니다.

Ⅳ. ClamAV 기술 구성 및 흐름도

 

1) freshclam 이 시그니처 DB 다운로드 → /var/lib/clamav 에 저장
                                           ⬇
  2) clamd 가 DB 를 메모리에 적재하고 소켓(unix · TCP 3310) 오픈
                                           ⬇
  3) 앱 또는 clamdscan 이 소켓으로 파일·스트림 전달
                                           ⬇
  4) clamd 가 시그니처와 대조 → "OK" 또는 "FOUND(탐지명)" 응답
                                           ⬇
  5) 탐지 시 격리·삭제 등 후속 처리는 검사 도구·연동 앱이 수행

Ⅴ. ClamAV 기술 설치 방법

배포판 계열에 따라 패키지 저장소와 설치 명령어가 다릅니다. 데몬 패키지와 갱신 도구를 반드시 함께 설치해야 합니다.

1. RHEL / CentOS / Rocky Linux 계열

# EPEL 저장소 및 ClamAV 설치
dnf install epel-release
dnf install clamav clamav-update clamd

* 설정 파일 위치: /etc/clamd.d/scan.conf, /etc/freshclam.conf

2. Debian / Ubuntu 계열

# 기본 패키지로 설치
apt install clamav clamav-daemon clamav-freshclam

* 설정 파일 위치: /etc/clamav/clamd.conf, /etc/clamav/freshclam.conf

Ⅵ. ClamAV 기술 사용 방법

설치 후 초기 시그니처 업데이트 및 데몬을 활성화하고 검사하는 기본 사용법입니다.

# 1. 수동으로 시그니처 최신화 (데몬 동작 중복 실행 유의)
freshclam       

# 2. 상주 데몬 백그라운드 상시 기동 활성화
systemctl enable --now clamd@scan       # RHEL 계열
systemctl enable --now clamav-daemon    # Debian 계열

# 3. 단일/재귀 검사 수행 (독립 실행 방식)
clamscan -r -i /home   # /home 폴더를 검사하고, 감염된 것(-i)만 출력

# 4. 상주 데몬을 이용한 멀티스레드 고속 검사
clamdscan -m -r /data

Ⅶ. ClamAV 기술 자주 쓰는 명령어

명령어 주요 기능 설명
freshclam 시그니처 데이터베이스 수동 갱신
clamscan -r -i [경로] 지정 경로 재귀 검사, 감염 파일만 출력
clamscan -r --move=/q [경로] 탐지 파일을 즉시 삭제하지 않고 격리 디렉터리(/q)로 이동
clamdscan -m -r [경로] 띄워져 있는 상주 데몬에 멀티스레드 고속 검사 요청
clamdscan --fdpass [경로] 파일 디스크립터(FD)를 넘겨 데몬의 권한 부족 문제 회피
clamconf 현재 적용된 전체 설정값과 경로 일괄 확인
sigtool --info daily.cvd 시그니처 파일의 버전 및 서명 상세 정보 확인

(💡 스크립트 작성 시 팁: 명령어 종료 코드가 0이면 정상, 1이면 바이러스 탐지, 2는 시스템 오류를 뜻합니다.)

Ⅷ. ClamAV 기술 활용방안

  • ✅ 적극 권장 (Best Practice)
    • 메일 게이트웨이(Postfix, amavisd 연동)에서 악성 첨부파일 필터링
    • 웹 애플리케이션의 게시판 업로드 파일 백엔드 검사
    • 공유 스토리지 및 파일 다운로드 서버의 정기(배치) 스캔
    • ISMS 등 컴플라이언스 규정상 "안티바이러스 솔루션 도입" 증빙용 표준 대응
  • ❌ 부적합 (대안 권장)
    • 제로데이 및 표적형 공격(APT) 탐지 ➔ 호스트 IDS(Wazuh 등) 권장
    • 데스크톱 환경의 실시간 커널 감시 ➔ 상용 EDR 솔루션 권장

Ⅸ. ClamAV 기술 트러블 슈팅

⚠️ 1. 데몬이 시작되지 않음 (Example 주석 처리) 설치 후 가장 흔한 오류입니다. 기본 설정 파일(scan.conf, freshclam.conf) 맨 위에 Example이라는 줄이 있으면 실행이 거부됩니다. 반드시 해당 줄을 지우거나 주석(#) 처리해야 합니다.
🚨 2. 메모리 부족(OOM)으로 인한 데몬 종료 clamd는 검사 속도를 위해 시그니처 전체를 메모리에 적재하므로 1GB 이상의 RAM을 상시 차지합니다. 사양이 낮은 VM에서는 시스템이 데몬을 강제 종료시킬 수 있습니다. 메모리를 증설하거나 상시 데몬 대신 야간 clamscan 스케줄링으로 대체하세요.
🛑 3. 429 Too Many Requests (업데이트 차단) freshclam을 cron 스크립트로 너무 자주 호출하면 공식 서버에서 IP를 차단합니다. 하루 몇 차례만 실행되도록 데몬 모드나 기본 시스템 타이머만 사용하고 중복 실행을 피하세요. "outdated" 경고가 반복된다면 엔진 버전 자체를 올려야 합니다.
💡 4. 자주 발생하는 기타 설정 문제
  • 소켓 접근 오류 ("Can't connect to clamd"): 소켓 경로 설정이 다르거나 clamav 그룹 권한이 없는 경우입니다. 파일 권한 문제라면 clamdscan --fdpass 옵션을 활용하세요.
  • 큰 파일 조용히 건너뜀: 기본 검사 용량 한도가 매우 낮습니다. 큰 파일을 다룬다면 MaxFileSize, MaxScanSize, StreamMaxLength 설정값을 상향 조정해야 합니다.
  • 탐지 파일이 지워지지 않음: clamscan은 기본적으로 탐지만 합니다. --remove 옵션은 오탐 시 복구가 불가능하므로, 안전하게 --move=[격리디렉터리]를 사용하는 것을 권장합니다.
반응형