티스토리 뷰

Access DB 활용
 

Sendmail 8.9로 버전이 높아지면서 새롭게 추가된 기능이 바로 이 anti-spam과 관련된 기능이며 Access DB라는 새로운 데이터베이스를 도입해서 이것의 설정에 따라 특정 메일들을 받지 않도록 할 수가 있습니다.
  그 내부 형식은 다음의 표와 같습니다.
 

Sendmail이 anti-spam 기능이 있다고 해도, 이 파일을 적절히 만들어 적용하지 못하면 무용지물이 되기 때문에 관리자들은 이 파일의 적용방법을 반드시 숙지하여 운영하여야 합니다.
spam@hacker.com
spammail.com
useful.org
211.252.150
211.252.151

REJECT
REJECT
OK
RELAY
RELAY

 

spam@hacker.com, spammail.com 및 211.252.150과 같은 첫번째 필드는 e-mail주소,도메인
네임,네트윅 넘버 등이 올 수 있으며,
 

두번째 필드는 해당 주소로부터 오는 메일을 어떻게 처리할 것인가를 결정하는데에 사용됩니다.
spam@hacker.com의 메일사용자 및 spammail.com 도메인으로부터 오는 모든 메일은 거부 합니다.
  useful.org 도메인으로부터 메일 사용자 및 spammail.com 도메인으로부터 오는 모든 메일은 거부합니다.
 

마지막의 것은 C-Class의 네트워크가 211.252.150, 211.252.151의 IP를 사용하는 모든주소에대하여릴레이를 허가 한다는 의미입니다.
 
위와 같은 형식의 asccess DB는 /etc/mail/acess란 이름으로 파일 사스템에 저장 합니다.
 

access의 파일구조는 텍스트 파일이며, Sendmail이 가려낼 수(Lookup) 없기 때문에, makemap 이란 프로그램을 사용하여 Sendmail이 인식할 수 있는 DB형태로 만들어 주어야 합니다.
  다음의 명령어를 실행하여 가능 "/etc/mail/makemap dbm/ etc/mail/acess</etc/mail/acess"
  디렉토리를 etc/mail으로 옮긴 다음 위와 같은 명령을 쳐주면, acess.dir과 acess.pag라는 이름으로 DB가 생성됨
  /etc/mail/acess 파일을 수정할 때마다 makemap을 사용해 새롭게 DB를 만들어주어야 함
 

버클리 DB를 이용한다면 약간 형식이 틀려지는데, 그럴 때는 다음과 같이 hash옵션을 사용 하여야 합니다.
# / etc/ mail/ makemap hash /etc/mail /acess < /etc /mail/access
 

다음의 표는 이러한 access파일을 통하여 sendmail이 가려낼 수 있는 Access DB 파일을 생성하는 방법및 과정을 보여주고 있습니다.

[penguin:root]:/etc/mail> ls -al access*
-rw-r--r-- 1  root other  71 5월 3일   17:25 access

[penguin:root]:/etc/mail> cat access
spam@hacker.com REJECT
spammail.com REJECT
useful.org OK
172.16 RELAY

[penguin:root]:/etc/mail> makemap dbm /etc/mail/access < /etc/mail/access

[penguin:root]:/etc/mail> ls -al access*
-rw-r--r-- 1   root other   71 5월 3일    17:25   access
-rw-r--r-- 1   root other     0 5월 3일   17:27   access.dir
-rw-r--r-- 1   root other    024 5월 3일   17:27   access.pag

[penguin:root]:/etc/mail> cat access.pag

衆詳鳩픈
RELAY172.16OKuseful.orgREJECTspammail.comREJECTspam@hacker.com


 

이러한 환경변수들의 올바른 설정에 대한 보다 상세한 내용은 cf/README 파일의 Anti-Spam 환경제어 부분을 참조하시면 됩니다.
 
http://www.sendmail.org/tips/relaying.html
  http://www.sendmail.org/m4/anti-spam.html
 
relay 영역지정 기능활용
 



대부분의 이러한 Anti-Spam Relay 기능들은 메일관리자가 허용되는 Relay 도메인의 리스트설정을 필요로 합니다. 이 리스트에는 모든 허가 인증된 도메인들을 포함하고 있는지 반드시 확인 하여야 하며 주의하여야 할 점은 반드시 MX (Mail Exchanger)뿐만 아니라 자사 도메인에서 사용 하고 있는 가상의 도메인들이 포함되도록 설정하여야 한다는 것입니다. 그렇지 않으면 자사 도메인 에서 보낸 메일이 거부될 수도 있습니다.
 

다음과 같이 다양하게 릴레이 허용범위를 지정할 수 있습니다.
FEATURE(relay_hosts_only) : /etc/mail/relay-domains에 리스트되어 있는 도메인 내 호스트 들은 모두 허용
  FEATURE(relay_entire_domain) : 자신의 도메인 내에 있는 모든 호스트들에 릴레이 허용
  FEATURE(access_db) : 개별 도메인들의 접근 여부를 /etc/mail/access라는 db를 통해 조절
  FEATURE(blacklist_recipients) : access db에 있는 송신자 뿐 아니라 수신자까지 필터링 가능
 


* 보다 다양한 스팸메일 릴레이 차단방법에 대해서는 아래 홈페이지를 참조하시기 바랍니다.
- http://www.certcc.or.kr /paper/tr2002_04/spam.pdf
 
동적IP에 대해 relay 허용 하는 방법
  (출처 : http://gnuhacker.com/board/?p=print&table=securitybug&no=17)
 



sendmail 8.9 버젼대에 와서 Anti SPAM 운동의 일환으로 relay 허용이 default로 막히게 되었습
니다. 하지만 smtp relay를 설정하는 것이 ip address 또는 domain name으로 이루어지게 되어 있어서 동적 ip에 대해 relay를 어떻게 허용할지 논란이 되곤 했습니다. 이 문제를 해결하기 위하여 8.10 버젼에서 smtp auth 기능이 추가되었습니다.
 


하지만 이 기능은 기본적으로 들어 있지는 않으며, 인증을 위해서는 cyrus- sasl library(libsasl
이라는 이름으로 패키징 되어 있기도 합니다)가 필요하며 cyrus-sasl library는 또한 openssl package를 필요로 합니다.(Redhat 7.x부터 기본적으로 설치 되어 있습니다)
 




sendmail 8.10.x 에 와서 기존의 파일들의 위치와 이름이 변경된 것이 있습니다.
그중 특이한 몇개만 말한다면 일단 sendmail의 모든 설정 파일들은 /etc/mail 로 옮겨졌습니다.
즉 /etc 에 위치하던 sendmail.cf 가 /etc/mail/sendmail.cf 로 이동을 했다는 것입니다.

또한 /etc/sendmail.cw 가 /etc/mail/local-host-name 으로 변경 되었다는 것을 유의해야 합니다.
 


1. Sendmail을 이용한 SMTP + AUTH 설정
1.1 sasl에서 인증 방식 지정
# cd /usr/lib/sasl
# touch Sendmail.conf
# vi Sendmail.conf
; 아래내용을 추가합니다. (passwd 방식이면 pwcheck_method: passwd )
pwcheck_method: shadow

1.2 sendmail 설치합니다. (http://sendmail.org)
1) 압축 파일을 풉니다.
# gzip d sendmail.8.11.6.tar.gz
# tar -xvf sendmail.8.11.6.tar

2) 센드메일 컴파일시 sasl library를 포함 하도록 합니다.
# cd sendmail-8.11.6/devtools/Site
# vi site.config.m4
APPENDDEF(`confENVDEF', `-DSASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
APPENDDEF(`confLIBDIRS', `-L/usr/lib')
APPENDDEF(`confINCDIRS', `-I/usr/include')

3) 센드메일을 컴파일 합니다.
# cd sendmail-8.11.1
# ./Build c

4) 센드메일 데몬을 기존의 센드메일 데몬과 바꿉니다.
주의 할 점은 만약에 컴파일한 데몬이 이상이 생겨 동작하지 않을 경우를 대비하여 기존 파일을
백업해야 합니다.
# cd obj.Linux.2.2.14-5.0.i586/sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail-org
# cp sendmail /usr/sbin/sendmail

5) sendmail.cf 파일을 만듭니다.
# cd /usr/tmp/sendmail-8.11.1/cf/cf
# vi generic-linux.mc

divert(-1)
divert(0)dnl
VERSIONID(`@(#)inet-mx.mc (Inet, Inc. MX.) 8/18/98')dnl
OSTYPE(linux)dnl
DOMAIN(generic)dnl
MAILER(local)dnl
MAILER(smtp)dnl
FEATURE(`access_db', `dbm -o /etc/mail/access')dnl
FEATURE(`mailertable', `dbm /etc/mail/mailertable')dnl
FEATURE(`virtusertable',`dbm -o /etc/mail/virtusertable')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl

# m4 ../m4/cf.m4 generic-linux.mc > sendmail.cf

6) sendmail.cf 파일을 기존파일과 바꿉니다.
마찬가지로 기존 sendmail.cf 파일을 백업 시킵니다.
# mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf-org
# cp sendmail.cf /etc/mail/sendmail.cf

7) 센드메일 데몬을 구동시킵니다.
# pkill sendmail
# /usr/sbin/sendmail -bd -q30m

1.3 Client PC 에서는 아래처럼 설정을 해 주어야 합니다.
Netscpae mailer
Edit>Preferences>Mail & Newsgroups Account Settings >Outgoing Server
(SMTP)
에서 Use name and password 에 체크 하고 User Name을 넣어 주면 됩니다.

Outlook Express 6
도구>계정>메일>계정등록정보>서버>보내는 메일서버에서 "인증 필요"에 체크를 하고 옆의 "설정"을 클릭한후 로그온 정보에 계정 이름과 암호를 넣습니다.

1.4 참고 사이트
http://www.sendmail.org/~ca/email/auth.html