가끔정상

스팸메일 막기위한 필사의 몸부림..

권성재 2010. 3. 27. 11:57
### 쓴날 : 2010-03-27
### 쓴이 : 권기성 ( nonots@hanmail.net )
### 쓴거 : 리눅스 sendmail 메일서버 보안을 위한 spamassassin / clamav 설치

1.개요
포항급 초계함인 천안함이 백령도 근처에서 침몰했단다. 암초나 기뢰는
아닌거 같고, 내부 폭발이나 어뢰겠지.
어뢰라면 북조선?? SF적 상상력이 나래를 펴려한다.
원인이 뭐든 선거에서 야당은 조땠다.
..
토요일 아침, 동네 목욕탕에서 사우나하고 개운한 마음으로 작업하고
정리해 둔다.


2. 서버환경
- 리눅스 cenos 5.4 버전 64 비트,
- intel 제온 cpu 8 코어, 4 기가 메모리, vt-x 지원, 빵빵한 서버다.
- sendmail 8.13.8
- spamassassin 3.2.5
- clamav 0.93.1


3. spamassassin 설치 / 설정

1) yum 으로 기본 rpm 패키지 설치했다.

[root@d7 clamav]# yum install spamassassin

2) /etc/mail/spamassassin/local.cf 설정파일을 수정한다.
기본적으로 아래 와 같이 3 줄만 있다.
능력껏 설정할수록 더 안전하겠지

>> required_hits 5
>> report_safe 0
>> rewrite_header Subject [SPAM]

설정에 대한 설명은 http://blog.pages.kr/78 참조
#required_hits 아마 이 숫자가 * 문자로 스팸판단 점수메기는듯.
#rewrite_header : 스팸으로 인정된 메일 제목 앞에 붙는 글
#report_safe : 스팸으로 판단될 경우 원본 글을 감출지 여부
#required_score : 스팸으로 판단할 스코어
#use_bayes : 학습된 Bayesain Classifier를 사용할것인지 여부
#bayes_auto_learn : 자동학습 설정
#skip_rbl_checks : RBL체크값을 점수에 활용
#use_razor2 : Vipul's Razor라는 곳에서 운영하는 블랙리스트 공유 시스템을 활용
#ok_languages : 중요하게 사용되는 언어를 설정
#ok_locales : 중요하게 사용되는 지역 설정
#score : 별도로 특정 룰에 대한 점수를 강제로 지정

3) /etc/procmailrc 파일에 아래 추가 ( procmailrc 가 없으면 직접 생성해야함)

[root@da2 clamav]# cat /etc/procmailrc
# SpamAssassin procmail
#
:0fw: spamassassin.lock
* < 256000
| /usr/bin/spamassassin

# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*
/var/spool/mail/spam

4) /etc/init.d/spamassassin start 명령어로 데몬 시작한다.
sendmail 데몬도 같이 재시작해준다.

5) 정상작동 테스트
# spamassassin -t < /usr/share/doc/spamassassin-3.2.5/sample-nonspam.txt
# spamassassin -t < /usr/share/doc/spamassassin-3.2.5/sample-spam.txt
이렇게 각각 테스트한 장황한 결과보면 알수 있다고 함.

6) 메일헤더로 정상작동 확인확인
만약 testuser 라는 아이디로 메일을 보낸후
/var/mail/testuser 라는 메일함 파일을 열어보면 아래와 같이
X-Sapm-.. 와 같이 헤더가 붙어 있으면 점검한다는 거다.

>> From root@localhost.localdomain Sat Mar 27 03:34:07 2010
>> Return-Path: <root@localhost.localdomain>
>> X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on da22
>> X-Spam-Level: **
>> X-Spam-Status: No, score=2.9 required=5.0 tests=ALL_TRUSTED,NO_DNS_FOR_FROM,


7) 스팸룰을 계속 업데이트 하려면.. /etc/cron.d/sa-update 파일에서
sa_update.cron을 실행하는 줄 주석을 풀어준다.



4. clamav 설치 / 설정

1) 이 패키지는 centos 기본페키지가 아니다. 재주껏 최신 버전 다운받는다.
내경우 http://packages.sw.be/clamav/ 에서 rpm 으로 0.93.1 버전으로
다운 받았다. 아래 4 개 rpm을 설치한다.

clamav-0.95.3-1.el5.rf.x86_64.rpm
clamav-db-0.95.3-1.el5.rf.x86_64.rpm
clamav-milter-0.95.3-1.el5.rf.x86_64.rpm
clamd-0.95.3-1.el5.rf.x86_64.rpm

2) clamd 는 그냥 /etc/init.d/clamd start 로 시작하면 된다.

3) clamav-milter 는 sendmail 데몬의 필터로 설정하는데 sendmail.cf 에서
설정을 해 줘야 한다. 먼저.
/etc/mail/sendmail.mc 파일 최하단에

INPUT_MAIL_FILTER(`clamav', `S=local:/var/clamav/clmilter.socket, F=, T=S:4m;R:4m;C:30s;E:10m')dnl
define(`confINPUT_MAIL_FILTERS', `clamav')

와 같이 수정한다. 이때 clmilter.socket 파일이 /etc/clamav-milter.conf
파일에서 설정된 소켓파일 경로와 이름이 일치하도록 한다.
위와 같이 한후

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

명령어로 sendmail.cf 파일을 생성한다. 아래와 같은 내용이 있으면 된다.
>> O InputMailFilters=clamav
>> ..
>> Xclamav, S=local:/var/clamav/clmilter.socket, F=, T=S:4m;R:4m;C:30s;E:10m

4) /etc/freshclam.conf 나 /etc/clamd.conf , /etc/clamav-milter.conf 파일에서
Example 이라는 항목이 주석으로 막아져야한다. 기본 막혔다. 안그러면 헛일이다.


5) 이제 sendmail 데몬과 clamd clamav-milter 데몬을 모두 재시작한다.
/etc/init.d/clamav-milter restart

6) 정상작동 확인은.. 바이러스 걸린 메일을 첨부로 보내보는거다.
그러다가 자기 PC 가 진짜 바이러스 걸려도 책임 못진다.
http://mydoc.digimoon.net/board/skin/ggambo7002_board/print.php?id=board&no=260
위 링크 참조해본다. 먼저

!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

이렇게 달랑 한줄짜리 텍스트 문서를 만들고.. 저장이름은 sample.exe 와 같이
실행확장자 .exe 를 붙인후.. 이 파일을 메일 첨부파일로 해서 보내본다.
/var/log/clamav/clamd.log 파일을 보면.

Sat Mar 27 03:39:35 2010 -> fd[12]: Eicar-Test-Signature FOUND

와 같이 FOUND 라는 게 나오면서 필터링이 됐다고 나온다.
그리고 sendmail 로그인 /var/log/maillog 파일을 보면

>> Mar 27 03:39:35 da2 sendmail[6811]: o2QIdZb8006811: milter=clamav,
quarantine=quarantined by clamav-milter
>> Mar 27 03:39:35 da2 sendmail[6810]: o2QIdZeA006810: to=testuser, ctladdr=root
(0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30602,
relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (o2QIdZb8006811 Message
accepted for delivery)

와 같이 나온다. quarantine 이라는 단어를 오늘 첨 알았다.


5. 마무리

사우나에서 땀을 너무 뺐는지 목도 마르고 배도 고프다. 밥먹으로 가야겠다.
..
천안함 전몰 장병들의 명복을 빈다.

========================= 2012-08-17 추가

clamav 가 0.97 로 버전 올라가면서 아래 내용 참조.. sendmail.mc 에 추가로 더해줘야함. 
새 5호 서버 세팅하면서 삽질함. 

참조 : http://www.savs.hcc.edu.tw/~chuavv/articles/ClamAV-en.html 

#### sendmail.mc 에 OSTYPE('linix')dnl 아래에 아래 5 줄 추가하고.. 

define(`confMILTER_MACROS_CONNECT', `H, j, _, {daemon_name}, {daemon_port}, {if_name}, {if_addr}, {client_addr}') 
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}') 
define(`confMILTER_MACROS_ENVFROM', `i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}, {rcpt_addr}') 
define(`confMILTER_MACROS_EOM', `{msg_id},?{mail_addr}, {rcpt_addr}, i') 
define(`confMILTER_MACROS_ENVRCPT', `{rcpt_mailer}, {rcpt_host}, {rcpt_addr}') 

#### 아래에도 소켓 경로 확인해서  2 줄 추가한다. 

INPUT_MAIL_FILTER(`clamav', `S=local:/var/clamav/clmilter.socket, F=, T=S:4m;R:4m;C:30s;E:10m')dnl 
define(`confINPUT_MAIL_FILTERS', `clamav')

'가끔정상' 카테고리의 다른 글

TCPDF 를 이용한 한글 PDF 파일 생성하기  (1) 2010.04.10
윈도7 Vmware7 에서 맥 OSX 10.6 설범 설치  (0) 2010.04.07
별별별  (0) 2010.01.04
토렌트 이용한 파일 다운로드.  (0) 2009.12.31
구글 영상채팅하기  (0) 2009.12.19