최근에 스팸메일때문에 잠깐 구축해본 결과를 강좌로 남깁니다. qmail로도 구성이 가능한데 qmail로 설명하려면 구축단계부터 길어질 것 같아서
postfix로 구성한 과정을 정리해봤습니다. 강좌는 경어가 생략되어 있습니다. 자체적으로 메일서버를 운용하시는 분들은 참고해보시기 바랍니다.
회사에서 사용하는 MS Exchange Edge Server를 이용한 스팸 및 바이러스 필터링 시스템에 몇가지 부족한 부분과 수정이 안되는 문제 때문에 필터링 시스템을 Postfix로 변경하기 위해 작업을 해보았다.
MS제품군은 편리하기는 하지만 필자처럼 리눅스 환경에 익숙한 사람들에게는 자유도가 너무 부족하다...^^;
전체적인 구성도는 아래와 같다. 물론 DNS에서 MX레코드 설정을 변경하여 제일 먼저 Postfix필터서버가 메일을 받도록 설정해줘야 된다.
각각에 대한 간단한 설명은 아래와 같다.
Postfix - MTA(mail tranfer agent) 로 메일메시지를 전송하는 역할을 한다.
Amavis - 펄로 제작된 프로그램으로 외부의 스팸필터링 프로그램,백신들을 호출할 수 있도록 해준다.
ClamAV - 오픈소스 백신 프로그램으로 메일에 첨부된 바이러스를 필터링 한다.
Spamassassin - 오픈소스 스팸 필터링 프로그램으로 스팸룰과 스팸학습기능을 제공해준다.
간단히 설명하자면 외부로 부터 오는 모든 메일메시지는 제일 앞단에 위치하는 Postfix server로 들어오고Postfix서버에 설치된 amavis 시스템을 통해 스팸과 바이러스를 필터링 한 이후 다시 최종적으로 실제 메일서버에 전달해주는 형태가 되겠다. amavis는 다른 상용프로그램들도 연결하기가 아주 쉽다.
필자의 경우 우분투 서버를 기준으로 구성했다. 다른 배포판도 설치는 간단하니 그냥 환경설정 정도만 변경해 주면 된다.
Postfix설치 및 설정하기
sudo apt-get install postfix
postfix 설정하기
/etc/postfix/main.cf 및 /etc/postfix/master.cf 에서 설정을 해주면 된다.
main.cf 수정하기
myhostname = 스팸필터링호스트 네임을 적어준다.(ex. spamgw.abc.com) alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = 메일을 받을 도메인을 적어준다. (ex. abc.com mail.abc.com localhost) relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination # 메일을 전송할 호스트 설정 transport_maps = hash:/etc/postfix/transport # 로컬 수신설정 local_recipient_maps = # 필터링 설정 content_filter = smtp-amavis:[127.0.0.1]:10024
아래 3라인 transport_maps,local_recipient_maps,content_filter부분은 필터링 시스템에서 가장 중요한 부분이다.
transport_maps설정
transport_maps는 /etc/postfix/transport 파일에 설정된 메일서버로 메일을 전송하는 설정이다. 따라서 스팸 필터를 모두 마치고 나서 실제 최종 메일서버로 메일을 전송하도록 설정해 줘야 한다.
아래 예제를 참고해서 /etc/postfix/transport파일을 반드시 작성하도록 한다. 192.168.30.85는 Exchange server의 IP address 이다.
mydomain.com smtp:[192.168.30.85] abc.com smtp:[192.168.30.20]
각각 메일 도메인에 대해서 라우팅을 설정해 주는 것이다.
로컬메일 recipient 설정
기본적으로 postfix는 계정이 존재하지 않은 메일메시지에 대해서는 모두 반송을 하게 되어있다. 스팸 필터링 서버에는 리눅스 계정이나 가상메일 계정이 존재할 필요가 없고 단순히 필터링만 하기 때문에 들어오는 모든 메일 메시지를 허용해줘야 하며 아래의 설정이 바로 그것이다. 따라서 아래의 설정이 없으면 모든 메일은 반송이 된다.
local_recipient_maps =
필터링 설정
content_filter = smtp-amavis:[127.0.0.1]:10024
필터링 엔진에 대한 설정이며 amavis에 메시지를 전달해주는 설정이다.
/etc/postfix/master.cf에 추가해준다. 아래는 smtp를 이용해서 메시지를 전달해주며 lmtp를 이용해도 된다.
smtp를 이용하는 방법
smtp-amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20
lmtp를 이용하는 방법
smtp-amavis unix - - n - 2 lmtp -o disable_dns_lookups=yes -o lmtp_send_xforward_command=yes -o lmtp_data_done_timeout=1200
postfix 설정
/etc/postfix/master.cf 에 아래와 같이 추가해 준다.
127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
위의 설정까지 마무리하면 기본적인 스팸 필터링 구조는 만들어둔 것이다.
이제 실제 필터링을 하는 amavis 와 clamav,spamassassin 을 설치해 보자.
apt-get install amavisd-new spamassassin clamav-daemon
sudo adduser clamav amavis sudo adduser amavis clamav
설치가 되었다면 amavis 설정을 해준다.
/etc/amavis/conf.d/15-content_filter_mode 파일을 열어서 아래와 같이 주석을 제거해주자.
@bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
amavis 데몬 시작
/etc/init.d/amavis start
Postfix 재시작
/etc/init.d/postfix restart
최종 메일 서버의 설정
메일이 최종적으로 저장이 되는 메일서버는 Postfix메일서버로 부터의 연결을 허용해줘야 한다.
익스체인지 서버의 경우 수신커넥터 설정을 해주면 되고 qmail,postfix,sendmail서버의 경우 postfix필터서버를 relay를 허용해주면 된다.
잘 구성이 되었다면 메일 로그에 아래와 같이 나오게 될 것이다.
Nov 16 12:40:58 host1 amavis[21780]: (21780-07) Passed CLEAN {RelayedInbound}, [xxx.xxx.xxx.xxx]:41666 [xxx.xxx.xxx.xxx] <********@***.com> -> <*****@***.net>, Queue-ID: 6BEB2340011, Message-ID: <************************************@*********.com>, mail_id: U_w6o4Gmz7Mz, Hits: 1.277, size: 3983, queued_as: 7EBDD340016, 2654 ms
나머지 기타 세세한 부분들은 각자 테스트 해보기 바란다.
스팸어세신의 학습 기능을 이용한다면 저장된 스팸메일을 학습시켜서 거의 대부분의 스팸메일을 자동으로 걸러낼 수 도 있다. 그리고 clamav 뿐만 아니라 기타 상용 백신엔진들도 사용하도록 amavis 에서 제공하고 있으니 참고해 보기 바란다.
https://fedoraproject.org/wiki/EPEL
Âü°íÇϽñ⠹ٶø´Ï´Ù.
Àß µ¿ÀÛ ÇÏ´ÂÁö ¾ÈÇÏ´ÂÁö Àß ¸ð¸£°Ú³×¿ä ¤¾¤¾¤½
Ȥ½Ã µµ¸ÞÀÎÀÌ 1°³ ÀÌ»óÀ϶§ ¾î¶²°É ¼öÁ¤ÇØ¾ß ÇÏ´ÂÁö ¾Ë·ÁÁֽǼö ÀÖ³ª¿ä?
¿¡¼ mydestination º¯¼ö¿¡ ¹ÞÀ» µµ¸ÞÀÎÀ» Âß Ãß°¡ÇØÁÖ½Ã¸é µË´Ï´Ù.