일전에 서버 및 워드프레스 보안을 위한 무료 리눅스 백신 ClamAV 이용 및 문제 해결법에 대해 포스팅 했습니다. 그 후 리눅스 서버에서 정기적으로 멀웨어가 있는지 ClamAV 스캔 후 그 결과를 관리자 메일로 보내는 방법을 고민해 봤습니다.
여기서는 리눅스 서버에서 ClamAV 스캔 후 멀웨어가 있는 경우와 없는 경우로 나우어 서버 관리자에게 메일로 알려주는 방법에 대해서 살펴보도록 하겠습니다.
우선 무료 리눅스 백신 ClamAV 사용법에 대해서는 아래 글을 참조하시기 바랍니다. ClamAV 설치 및 기본 이용 방법에 대해서는 이 글을 참조하시라고 별도로 설명하지는 않겠습니다.
ClamAV 멀웨어 스캔 결과를 메일로 보내는 방법
다행히 우분투 서버에서 ClamAV 스캔 후 메일로 보내는 방법들이 소개되어 있어 이를 기반으로 오류를 수정해 우분투 서버에 적용할 수 있었습니다.
비교적 자세히 설명된 자료는 아래를 참고하시기 바랍니다.
Configure Clamav for daily system scans and email notification on Debian
저도 이 사용법대로 사용해 봤는데 잘 안되어서 몇가지를 수정했습니다.
메일 발송 시스템
우선 저는 서버 메일 발송 시스템으로 지메일 릴레이 기능을 이용했다는 점을 밝히고 싶습니다. 메일 발송 시스템에 따라서 설정이 달라질 수 있다는 생각입니다.
이전 포스팅에서도 밝혔지만 제가 선택한 지메일 이용은 지메일에서 제공하는 릴레이 기능을 활용하므로 안전하고 스팸 메일로 분류될 가능성이 아주 적습니다. 다만 하루 500통 정도로 메일 발송횟수가 제한된다는 한계는 있습니다.
그렇기때문에 ClamAV로 스캔 후 메일 보낼 시 SMTP 메일 발송 옵션을 명기해 지메일 SMTP로 메일이 갈 수 있도록 했습니다.
아래와 같은 내용을 추가합니다.
# ClamAV 검사 및 메일 보내기
smtp_server=smtp.gmail.com:587
smtp_auth=Yes
smtp_pass=지메일 웹 비밀번호
smtp_ssl=Yes
Code language: PHP (php)
바이러스 데이타베이스 업데이트
스캔전에 ClamAV가 가지고 있는 바이러스 데이타베이스를 업데이트해야 하는데요.
저의 경우는 일부 에러가 나타나서 아래와 같이 강제적으로 바이러스 데이타베이스 업데이트하도록 만들었습니다.
# 바이러스 데이타베이스 업데이트
lsof /var/log/clamav/freshclam.log
pkill -15 -x freshclam
/etc/init.d/clamav-freshclam stop
freshclam
/etc/init.d/clamav-freshclam start
Code language: PHP (php)
ClamAV로 바이러스 스캔 및 결과 이메일로 보내기
여기서는 ClamAV로 바이러스 감염여부를 스캔한 후 감염 파일이 있는지 아닌지에 따라 다른 내용의 메일을 보내는 방법을 설명합니다.
먼저 앞부분에서 로그파일 위치, 이메일 주소, 스캔할 폴더 등을 지정해 줍니다.
LOGFILE="/var/log/clamav/clamav-$(date +'%Y-%m-%d').log";
EMAIL_FROM="발송 이메일 주소";
EMAIL_TO="수신 이메일 주소";
DIRTOSCAN="ClamAV가 스캔할 폴더";
Code language: PHP (php)
다음으로 ClamAV로 스캔 및 그 결과를 메일로 보내는 쉘 스크립터를 작성합니다. 이는 쉡 스크립터에서 사용하는 if – then – else – fi 명령을 사용합니다.
이 스크립트에서 제가 아는 범위내에서 설명을 추가했으니 참고하시기 바랍니다.
for S in ${DIRTOSCAN}; do
DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);
echo "Starting scan of "$S" directory.
Directory size: "$DIRSIZE".";
# 스캔한 폴더 용량 표시, 다른 표현 명령 Amount of data to be scanned is "$DIRSIZE".";
clamscan -ri "$S" >> "$LOGFILE";
# 감염 파일을 옮기는 경우 다음 명령 사용, clamscan -ri --remove "$S" >> "$LOGFILE";
# 멀웨어 등에 감염된 라인이 있는 지 확인, get the value of "Infected lines"
# find /var/log/clamav/ -type f -mtime +30 -exec rm {} \;
MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);
# 멀웨어 감염 파일이 0이 아니라면, 즉 감염 파일이 있다면 멀웨어가 발견되었다는 메세지와 함께 로그 파일 첨부해 메일 발송,
# if the value is not equal to zero, send an email with the log file attached
if [ "$MALWARE" -ne "0" ];
then
# using heirloom-mailx below
echo "오늘 ClamAV로 서버를 스캐닝했습니다. 그 결과 오늘 스캔한 $DIRTOSCAN에서 멀웨어가 발견되었습니다. 자세한 내용은 첨부 로그 파일을 참조하시기 바랍니다."|mail -A "$LOGFILE" -s "멀웨어가 발견되었습니다!!" -r "$EMAIL_FROM" "$EMAIL_TO";
else
echo -e "오늘 ClamAV로 서버를 스캐닝했습니다. 그 결과 다행히 아무런 멀웨어가 발견되지 않았습니다. 따라서 오늘 스캔한 $DIRTOSCAN 부분은 안전하다고 할 수 있습니다. 자세한 내용은 첨부 로그 파일을 참조하시기 바랍니다."|mail -A "$LOGFILE" -s "스캔 결과 다행히 감염 파일은 없었습니다!!" -r "$EMAIL_FROM" "$EMAIL_TO";
fi
done
exit 0
Code language: PHP (php)
최종 자동 실행 시키기
위에서 정리한 내용을 토대로 리눅스 서버 크론탭에서 자동으로 실행되도록 만들겠습니다.
우선 실행 파일을 만듭니다. 실행 파일은 clamav.sh로 정하죠. 편집기를 열어 파일 편집 준비를 합니다.
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 검사 및 메일 보내기
smtp_server=smtp.gmail.com:587
smtp_auth=Yes
smtp_pass=지메일 웹 비밀번호
smtp_ssl=Yes
LOGFILE="/var/log/clamav/clamav-$(date +'%Y-%m-%d').log";
EMAIL_FROM="발송 이메일 주소";
EMAIL_TO="수신 이메일 주소";
DIRTOSCAN="ClamAV가 스캔할 폴더";
for S in ${DIRTOSCAN}; do
DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);
echo "Starting scan of "$S" directory.
Directory size: "$DIRSIZE".";
# 스캔한 폴더 용량 표시, 다른 표현 명령 Amount of data to be scanned is "$DIRSIZE".";
clamscan -ri "$S" >> "$LOGFILE";
# 감염 파일을 옮기는 경우 다음 명령 사용, clamscan -ri --remove "$S" >> "$LOGFILE";
# 멀웨어 등에 감염된 라인이 있는 지 확인, get the value of "Infected lines"
# find /var/log/clamav/ -type f -mtime +30 -exec rm {} \;
MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);
# 멀웨어 감염 파일이 0이 아니라면, 즉 감염 파일이 있다면 멀웨어가 발견되었다는 메세지와 함께 로그 파일 첨부해 메일 발송,
# if the value is not equal to zero, send an email with the log file attached
if [ "$MALWARE" -ne "0" ];
then
# using heirloom-mailx below
echo "오늘 ClamAV로 서버를 스캐닝했습니다. 그 결과 오늘 스캔한 $DIRTOSCAN에서 멀웨어가 발견되었습니다. 자세한 내용은 첨부 로그 파일을 참조하시기 바랍니다."|mail -A "$LOGFILE" -s "멀웨어가 발견되었습니다!!" -r "$EMAIL_FROM" "$EMAIL_TO";
else
echo "오늘 ClamAV로 서버를 스캐닝했습니다. 그 결과 다행히 아무런 멀웨어가 발견되지 않았습니다. 따라서 오늘 스캔한 $DIRTOSCAN 부분은 안전하다고 할 수 있습니다. 자세한 내용은 첨부 로그 파일을 참조하시기 바랍니다."|mail -A "$LOGFILE" -s "스캔 결과 다행히 감염 파일은 없었습니다!!" -r "$EMAIL_FROM" "$EMAIL_TO";
fi
done
exit 0
Code language: PHP (php)
다음으로 크론탭에 이 실핼 파일을 정기적으로 작동하라고 명령합니다.
다 아시겠지만 크론탭 명령을 등록 편집하는 것은 crontab -e 옵션을 사용합니다.
crontab -e
Code language: PHP (php)
크론탬 명령을 추가합니다. 저는 매일 새벽 3시 15분에 실행하도록 했습니다. 다른 명령과 겹치다보니 이 시간이 나왔네요.
15 03 * * * clamav.sh
Code language: PHP (php)
크론탭 명령을 추가했으면 크론을 재 실행시킵니다.
service cron start
Code language: PHP (php)
실행 후 이런 메일이 날라오는군요. 다행히 멀웨어에 걸린 워드프레스 파일들은 없다고요.
새롭게 뉴스레터를 시작했습니다.
1️⃣ 주식 등 투자 정보 : 기업 분석, IB 투자의견 등 투자 관련 내용
..... 테슬라 실적 및 IB들의의 테슬라 투자의견
2️⃣ 사례 및 트렌드 : 사례연구와 트렌드 관련 괜찮은 내용
.....유튜브와 경쟁대신 구독 전환한 비디오 플래폼 비메오 사례