본문 바로가기

Linux

Linux mail filtering (sendmail + procmail + hcode)



hcode-2.1m3-4.i386.rpm

출처 : http://blog.naver.com/legendon/140015228055

http://wiki.kldp.org/wiki.php/LinuxdocSgml/Sendmail-KLDP




1.1 sendmail이란?


인터넷을 조금이라도 써 보신분은 sendmail이란 말을 들어보셨을 껍니다. 아니 요즘 같이 책들이 많이 나왔을때는 인터넷을 쓰지 않으셔도 sendmail이란 말은 들어보셨을 지도 모릅니다. 아마 대부분의 사람들은 과연 sendmail이 무엇이길래 사람들의 입에 오르내리는지?, 꼭 써야 하는건지? 라는 생각을 해 보셨을텐데요 여기에서는 sendmail이 무엇이며 어떻게 설치하고 sendmail에서 야기되는 몇가지 문제점들에 대해 이야기를 해 보도록 하겠습니다.


우선 sendmail은 인터넷에서 전자메일을 전송하기 위해 사용되는 프로그램이라고 생각하시면 됩니다. 그럼 이렇게 대답하시는 분들이 계실꺼예요. "어! 저는 전자메일을 보내고 받는데 Netscape Messanger를 쓰는데요! 그럼 sendmail은 몰라도 되겠네요!" 하지만 지금까지 모르셨을지 모르지만 Netscape Messanger같은 메일프로그램을 사용하시더라도 sendmail은 사용해 오셨을 겁니다. 전자메일 시스템에서 사용되는 용어중 Netscape Messanger와 같은 프로그램은 MUA(Mail User Agent)라고 부릅니다. 그에 비해 sendmail은 MTA(Mail Transfer Agent)라고 부릅니다.


우선 인터넷으로 편지를 보냈을때 어떤 경로로 전달되는지 알아보도록 하죠. 여기에서 메일서버로 taegu.ac.kr를 사용하는 whjang이라는 사용자가 kebi.com 컴퓨터에 있는 peach란 사용자에게 메일을 보낸다고 가정해보죠. 우선 사용하는 MUA(여기에서는 Netscape Messanger, 줄여서 NM이라고 부르겠습니다.)는 메일서버의 25번 포트에 접속을 합니다. 메일서버의 25번 포트에서는 MTA(여기에서 설명하는 sendmail이 해당됩니다. 이하 sendmail이라고 언급하겠습니다.)가 대기하고 있다가 NM이 보내고자 하는 메일을 받습니다. 그러면 sendmail은 스풀디렉토리(시스템 마다 조금씩 틀립니다. 제가 사용하는 Solaris 2.x에서는 /var/spool/mqueue를 사용합니다.)에 메일을 저장해 둔 후 kebi.com의 25번 포트로 접속합니다. kebi.com에도 sendmail이 25번 포트에서 대기하고 있겠죠. 정상적으로 접속을 한 후 taegu.ac.kr에 있는 sendmail은 kebi.com에 있는 sendmail에게 메일을 전송한 후 자신의 스풀에 저장된 메일을 삭제합니다. taegu.ac.kr에 있는 sendmail은 더이상 할 일이 없는거죠. 만일 kebi.com에 이상이 있어서 접속할 수 없다면 어떻게 될까요? taegu.ac.kr에 있는 sendmail은 메일을 스풀 디렉토리에 계속 가지고 있으며 수시로 접속을 시도합니다. 그러다가 며칠이 지나도 보낼 수 없다면 처음에 메일을 보낸 사람에게 메일을 보낼 수 없다고 되돌려 줍니다.


이제 메일을 받은 kebi.com에 있는 sendmail이 하는일을 차례대로 살펴보죠. 메일을 받은 sendmail은 메일의 도착지가 자신인지 확인을 합니다.(sendmail.cw파일 참조) 만일 도착지가 자신이 아니라면 도착지로 메일을 다시 전송합니다. (이 경우에는 아래에 설명드리겠지만 relay를 허용하는 호스트로만 전달할 수 있습니다. 그렇지 않은경우에는 에러를 출력합니다.) 만일 자신이 메일의 도착지라면 메일을 MDA(Mail Delivery Agent)에게 넘겨줍니다. MDA는 메일을 MTA로부터 받아서 메일박스등에 저장하거나 원하는 필터링을 할 수 있는 프로그램입니다. 보통 기본적으로 사용하는 MDA프로그램은 /bin/mail이며, 한글 처리를 위해 procmail을 이용하는 서버도 많이 있습니다. 메일을 받은 MDA는 필터링 과정을 거친 후 사용자의 메일박스에 저장합니다.


이제 메일의 전송은 완료되었습니다. 사용자는 mutt나 pine등의 MUA를 이용하여 메일을 확인할 수 있으며 외부에서 메일을 확인하는 경우 POP3나 IMAP프로토콜을 이용하여 메일박스를 가져갈 수 있습니다. POP3나 IMAP에 관한 내용은 본 글의 범위를 벗어나므로 설명은 하지 않겠습니다.


이상에서 보듯이 sendmail은 MTA의 역활을 합니다. 사용자로부터 메일을 전달받아 다른 컴퓨터의 MTA에게 넘겨주고, 다른 MTA로 부터 받은 메일을 MDA에게 넘겨주는 인터넷 전자메일의 가장 중심부에 위치하고 있습니다. 물론 MTA에는 다양한 프로그램이 있지만 sendmail은 카테고리 킬러(해당분야의 다른 프로그램들은 아예 잊혀져 버릴 만한 경쟁력을 갖추고 자신의 지위를 확고히 하는 최고 수준의 프로그램)가 될 수 있는 능력을 갖추었고, 현재 UNIX기반 메일서버의 거의 대부분이 MTA로 sendmail을 쓰고 있습니다.




1.2. sendmail 설치


$ su -

Password:

# rpm -Uvh sendmail-8.13.1-2.src.rpm

   1:sendmail               ########################################### [100%]

# cd /usr/src/redhat/SPECS/

# rpmbuild -ba --target i686 sendmail.spec

# cd /usr/src/redhat/RPMS/i686/

# rpm -Uvh sendmail-*.rpm

# cp -p /usr/sbin/sendmail.sendmail /usr/sbin/sendmail

# cp -p /etc/pam.d/smtp.sendmail /etc/pam.d/smtp

# cd /etc/mail

# make

# /etc/rc.d/init.d/sendmail restart




2. procmail 이란?


procmail 이란 이메일을 필터링 하는 툴입니다.

이것을 이용하여 받은 메일에서 보낸사람,제목,이메일크기, 내용 등으로 필터링이 가능합니다.


2.1.1 procmail 설치


$ su -

Password:

# rpm -Uvh procmail-3.22-5.src.rpm

   1:procmail               ########################################### [100%]

# cd /usr/src/redhat/SPECS/

# rpmbuild -ba --target i686 procmail.spec

# cd /usr/src/redhat/RPMS/i686/

# rpm -Uvh procmail-3.22-5.i686.rpm

# cd /etc/mail

# make

# /etc/rc.d/init.d/sendmail restart




2.1.2 procmail 기능


- 이메일중에 "(광고)" 라는 문구 또는 "@" 로 종료되는 문구를 삭제

- 스팸메일중에 이메일 뒷부분에 무작위 영어문구가 들어가는 메일 필터링

- webmaster@test.com 으로 들어오는 메일중 제목이 "[질문]" 으로 시작되는 메일은 answer@test.com 으로,

   "[건의]" 로 시작되는 메일은 "master@test.com" 으로 보내기

- 이메일중 사이즈가 5k - 50k 이며, 첨부화일명이 xxx.pif 로 되어 있는 메일에 대한 반송

- 제목에 "성인", "고화질" 등 광고관련 문구가 3개이상 들어간 메일 필터링


이밖에 이메일에 대해 필요한 모든 필터링 수단이 가능합니다.

또한 어떤 메일이 필터링 되고 어떤 메일이 반송되는지에 대한 로그기록을 분석할수 있어

지속적으로 변화하는 스팸에 대처할 수 있습니다.




2.2.1 hcode 란?


"한글코드는 이준엽(jylee@math.kaist.ac.kr)님이 만드신 것입니다.

이후 신정식님이 메일처리부분을 매끄럽게 처리한 한글코드 메일패치버전이 마지막 버전입니다. (1997/06/01)

조만간 유니코드와의 변환도 추가되리라 생각됩니다."


위 글은 이상로님의 글에서 옮겨왔습니다.

2004년 09월 현재 1997 년 패치를 끝으로 아직 업그레이드가 없습니다.




2.2.2 hcode 설치


$ su -

Password:

# rpm -Uvh hcode-2.1m3-4.src.rpm

   1:hcode                  ########################################### [100%]

# cd /usr/src/redhat/SPECS/

# rpmbuild -ba --target i686 hcode.spec

# cd /usr/src/redhat/RPMS/i686/

# rpm -Uvh hcode-2.1m3-4.i686.rpm




2.2.3 hcode와 procmail 연동확인



$ cat /etc/mail/sendmail.mc | grep procmail


define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl

MAILER(procmail)dnl




2.2.3 sendmail 기반의 필터링 적용


procmail 의 설정화일은 단 한개입니다.

procmailrc를 /etc/procmailrc 에 저장한 후

샌드메일을 재가동 하는것으로 모든 필터링 적용이 끝납니다.

단, 주의할것은 단순히 메모장으로 작성하여 업로드 할 경우 procmail 이 인식을 하지 못할 경우가 있습니다.

vi 를 열어서 입력하거나, unix 포멧의 화일로 저장하는것이 안전합니다.

'Linux' 카테고리의 다른 글

linux sendmail .forword  (0) 2014.01.10