리눅스 서버 사용자는 적지만 매우 중요한 데이타를 담고 있기 때문에 컴퓨터 바이러스나 멀웨어로부터 안전하게 보호할 수 있는 안전 장치가 필요합니다. 이를 위한 무료 리눅스 백신 중 가장 평가가 좋은 ClamAV 이용 방법에 대해서 알아보겠습니다.
바이러스는 사용자가 많을수록 많기 때문에 윈도우즈 사용 시 백신 설치가 아주 중요합니다. 컴퓨터 바이러스들이 기승을 부리면서 한때는 한 컴퓨터안에 여러가지 백신을 설치해 놓는 것이 유행이다시피 한적도 있습니다.
그러나 바이러스나 멀웨어라는 것이 특정 패턴을 가지고 있다보니 바이러스나 멀웨에에 대한 체계적인 데이타베이스를 가진 프로그램 하나면 충분하고 여러가지 백신 사용은 오히려 문제 발생 소지가 크다는 지적도 있기 때문에 요즘엔 윈도우즈10에서 기본 제공 프로그램을 일반적으로 사용합니다.
여러 유료 백신 프로그램들이 있지만 마이크로소프트에서 제공하는 기본 보안 프로그램도 나쁘지 않다는 평가가 많기 때문이죠.
상대적으로 사용자가 적은 리눅스 서버도 마찬가지입니다. 리눅스 서버는 상대적으로 이러한 바이러스 공격이 적다는 평가를 받아 왔습니다.
리룩스 취약점이 상대적으로 적고 사용자가 상대적으로 적기 때문에 바이러스로 이익을 얻을 수 있는 이익이 상대적으로 적기 때문일까요? 그럼에도 불구하고 이러한 공격이 상대적으로 적다는 것이지 없는 것은 아니므로 대비가 필요합니다.
그래서 우분투 서버에서 제반 바이러스 및 멀웨어를 탐지하고 스캔할 수 있는 솔류션으로 ClamAV를 선택하고 이를 활용하는 방업을 알아 보도록 하겠습니다.
리눅스 백신 ClamAV란?
ClamAV(Clam AntiVirus)는 시스코 시스템즈에서 지원하는 오픈소스 소프트웨어 기반 바이러스 검사 소프트웨어입니다. 오픈 소스에서 보듯 철저히 무료로 사용할 수 있습니다.
이는 유닉스뿐 아니라, AIX, BSD, HP-UX, 리눅스, OS X, 오픈VMS, OSF, 솔라리스 그리고 마이크로소프트 윈도우즈에서도 실행되는 크로스 플랫폼 소프트웨어로 알려져 있습니다.
원래는 메일 서버에서 이메일 내 바이러스 검사를 위해서 개발한 것인데 이후 바이러스를 비롯한 멀웨어 등 수많은 종류의 악성 소프트웨어를 찾아내는 소프트웨어로 발전했습니다.
ClamAV 데이타 센터는 ClamAV.net에 있는데 전 세계에서 발생하는 바이러스 구조에 대한 방대한 자료를 확보하고 있으며 주기적으로 업데이트 및 공개하고 있습니다.
위에서 설명했듯이 메일 검색에서 시작해서 그만큼 날리지가 쌓여서인지 메일 게이트웨이 검색 소프트웨어의 오픈 소스 표준으로 사용됩니다.
또한 무료 바이러스 백신 프로그앰으로 다른 유료 백신들과도 비교될 정도로 무료 백신으로서는 안정성과 인지도를 가지고 있습니다.
ClamAV 설치 및 이용 방법
우분투에서 ClamAV 설치는 아주 간단합니다. 예전에는 복잡한 과정을 거쳤는데 지금은 apt-get 명령으로 간단히 실행할 수 있습니다.
sudo apt-get install clamav
Code language: PHP (php)
그러면 아래와 같은 메세지가 나오면서 설치되기 시작합니다.
~# apt-get install clamav
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
clamav-base clamav-freshclam libclamav9 libtfm1
Suggested packages:
clamav-docs libclamunrar9
The following NEW packages will be installed:
clamav clamav-base clamav-freshclam libclamav9 libtfm1
0 upgraded, 5 newly installed, 0 to remove and 3 not upgraded.
Need to get 1,133 kB of archives.
After this operation, 3,915 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Code language: PHP (php)
다음으로는 바이러스 데이타베이스 업데이트를 실시합니다.
sudo freshclam
Code language: PHP (php)
바이러스 검사는 clamscan 명령을 사용합니다.
가본적인 명령 포맷은 아래와 같습니다.
sudo clamscan -r -i DIRECTORY
Code language: PHP (php)
예를들어 home디렉토리의 하위디렉토리까지 검사한다면 아래 명령을 사용합니다. 옵션 -r은 하위 폴더까지 모두 검사한다는 것입니다.
clamscan -r /home
Code language: PHP (php)
위는 검사만 한 경우인데요. 검사 후 바이러스 감염 파일 발견 시 특정 폴더로 이동시키는 경우 아래 명령을 사용합니다.
검사 결과 바이러스 감염된 파일이 있으면 /virus 폴더로 강제 이동시키는 옵션입니다.
clamscan -r /home --move=/virus
Code language: PHP (php)
바이러스 검사에는 많은 시간이 걸립니다. 저는 시간이 많이 걸려 검사 명령을 내리고는 잤습니다. 최소 2시간이상 걸리는 듯 하더군요.
검사가 모두 끝나면 아래와 같은 검사 요약을 출력해 줍니다.
----------- SCAN SUMMARY -----------
Known viruses: 7336539
Engine version: 0.102.3
Scanned directories: 58145
Scanned files: 478294
Infected files: 0
Total errors: 52481
Data scanned: 20653.49 MB
Data read: 57326.96 MB (ratio 0.36:1)
Time: 3070.948 sec (51 m 10 s)
Code language: PHP (php)
ClamAV 바이러스 정의 업데이트 시 에러 해결
ClamAV는 기본적으로 사용자 id를 clamav를 사용합니다.
그런데 서버 hostname이 인증되지 않아서인지 설치도중 ‘clamav’라는 사용자가 없다는 메세지가 나오며 오랬동안 설치를 멈추는 현상이 발생합니다.
그리고 local host name이 인증되지 않았다는 메세지를 뿜어냅니다. 아래와 같은 메세지..
id: ‘clamav’: no such user
WARNING: local host name (etrend) is not qualified; see cf/README: WHO AM I?
Code language: PHP (php)
시간이 지나면 나머지를 알아서 설치합니다. 그러나 데이타베이스를 업데이트하기 위해 freshclam 명령을 주면 에러 메세지를 보입니다.
~# sudo freshclam
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!
Code language: PHP (php)
이 경우 아래와 같은 명령어를 사용해서 문제를 해결합니다.
sudo lsof /var/log/clamav/freshclam.log
sudo pkill -15 -x freshclam
sudo /etc/init.d/clamav-freshclam stop
sudo freshclam
sudo /etc/init.d/clamav-freshclam start
Code language: PHP (php)
크론탭에서 매일 자동 실행 명령 추가
그리고 이 프로그램은 서버에 상주하면서 실시간 모니터링하지 않기 때문에 주기적으로 실행시켜서 모니터링 비슷한 효과를 내는 것이 필요합니다.
리눅스에서는 이를 위한 크론 기능이 활성화 되어 있으니 이를 활용하면 아쉬운대로 사용할만 합니다.
우선 sh 파일을 만듭니다. 저는 바이러스 데이타베이스 업데이트하는 freshclam 명령이 잘 먹히지 않아서 매번 이를 해결하는 프로세스를 주가했습니다.
nano clamav.sh
Code language: PHP (php)
여기에 아래와 같은 내용을 추가합니다.
#!/bin/sh
# 바이러스 데이타베이스 업데이트
lsof /var/log/clamav/freshclam.log
pkill -15 -x freshclam
/etc/init.d/clamav-freshclam stop
freshclam
/etc/init.d/clamav-freshclam start
# ClamAV 검사 (1회/일)
clamscan -r /
Code language: PHP (php)
그 다음에는 이 파일에 권한을 부여합니다.
chmod +x clamav.sh
Code language: PHP (php)
그 다음에는 크론에 이 파일 실행을 추가해야 겠죠?
이는 아시다시피 crontab -e 명령을 사용합니다.
crontab -e
Code language: PHP (php)
크랜탭에서 아래 내용을 추가해 줍니다. 매일 새벽 4시 15분에 위에서 정의한 clamav.sh를 실행하라는 명령입니다.
15 04 * * * clamav.sh
Code language: PHP (php)
크론을 시작합니다.
service cron start
Code language: PHP (php)
크론이 제대로 작동하는지 한번 확인해 봅니다.
service cron status
Code language: PHP (php)
그러면 아래와 같이 크론이 active되고 있다고 나오면 OK입니다.
# service cron status
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-06-22 23:06:34 KST; 2 days ago
Docs: man:cron(8)
Main PID: 823 (cron)
Tasks: 1 (limit: 4620)
Memory: 600.9M
CGroup: /system.slice/cron.service
└─823 /usr/sbin/cron -f
Code language: PHP (php)