Sendmail 메일서버의 스팸릴레이 대응방법

한국정보보호진흥원
기반보호사업단/해킹바이러스상담지원센터
김상철선임연구원 <kims[at]cert.or.kr>

1. 개요

E-Mail의 보편화와 맞물려서 스팸(Spam)메일이라 일컬어지는 악성 메일 때문에 메일서버 관리자들(Postmasters)은 메일 송수신 에이전트(MTA : Mail Transport Agent) 프로그램의 환경 설정방법에 많은 주의를 기울일 필요가 있다. 많은 관리자들은 메일서버 설치시 Anti-Spam 메일서버의 정확한 설치와 환경설정방법을 몰라 자사의 메일서버가 스팸 릴레이(Relay) 서버로 이용되는 불미스러운 일이 발생하기도 한다. 뿐만아니라 국내 메일 서버들이 스팸메일 서버로 오인되게끔 하여 메일 서버로서의 제 기능을 담당하지 못하도록 하는 일이 종종 발생하기도 한다.

본 문서에서는 국내에서 가장 많이 사용되고 있는 메일서버의 MTA인 Sendmail에 대한 스팸릴레이 대응방법에 대하여 기술하여 국내에서 사용되는 메일서버가 스팸릴레이 서버로 악용되는 것을 예방하고자 한다.

2. Sendmail 설치방법

2.1 Sendmail 가져오기 및 준비하기

o 가장 최근의 Sendmail버전은 http://www.sendmail.org/의 웹사이트에서 무료로 제공

- 8.12.X버전이 최근버전임

o 다운로드된 Sendmail프로그램을 설치하기 위해서는 C/C++ 컴파일러가 반드시 설치되어 있어야 함

o Sendmail은 무료로 배포되고 있는 GNU/gcc로 컴파일 가능.

- 리눅스는 GNU/gcc가 자동 디폴트로 설치되어 있으며, UNIX(Solaris, AIX 등)는 벤더사이트나, GNU
사이트에서 다 운로드 가능

2.2 Sendmail 설치하기

o Sendmail의 스팸 릴레이 차단기능은 8.9.0 이후의 버전부터 완전하게 지원하기 때문에, 기존에 설치된 Sendmail의 버전을 확인 필요

- 버전을 확인하는 방법은 Sendmail이 구동될 때 이용되는 환경변수파일인 sendmail.cf파일의
"# Configuration version number" DZ8.9.1라인의 정보를 통하여 확인가능
- 대부분의 sendmail.cf파일은 /etc디렉토리나 /etc/mail디렉토리에 설치되어 있음

o Sendmail 8.11.6의 설치(SunOS 5.7, solaris 7)

① 다운로드 받은 sendmail.8.11.6.tar.gz파일을 설치하고자 하는 Sendmail서버로 Ftp 프로그램을
사용하여 메일서버로 전송
- 설치 디렉토리는 상관없음.

② gzip과 tar명령어를 사용하여 압축해제.
[penguin:root]:/user1/ksch/gzip -d sendmail.8.11.6.tar.gz

[penguin:root]:/user1/ksch/tax cvf sendmail.8.11.6.tar

③ sendmail의 설치디렉토리에서 "sh Build" 명령의 실행을 통하여 sendmail 설치환경 구성

[penguin:root]:/user1/ksch/sendmail-8.11.6> ls

./ INSTALL PGPKEYS contrib/ libmilter/ mailstats/ sendmail/

../ KNOWNBUGS README devtools/ libsmdb/ makemap/ smrsh/

Build LICENSE RELEASE_NOTES doc/ libsmutil/ praliases/ test/

FAQ Makefile cf/ include/ mail.local/ rmail/ vacation/

[penguin:root]:/user1/ksch/sendmail-8.11.6> sh Build

※ groff가 설치되어 있지 않으면, 컴파일 과정에서 에러가 발생할 수 있으며, 매뉴얼 페이지를 사용하지
않으면 무시해도 觧찬음.

④ sendmail의 설치디렉토리의 하위 디렉토리인 cf/cf디렉토리에서 설치하고자 하는 시스템과 일치하는
.mc파일을 config.mc로 복사(SunOS5.7인 경우)
- sendmail이 설치되는 각각의 OS에 맞는 .mc파일이 존재함.
- SUN Solaris 2.X버전은 generic-solaris2.mc 파일을 사용
[penguin:root]:/user1/ksch/sendmail-8.11.6/cf/cf> ls
./ cs-solaris2.mcgeneric-hpux9.mc generic-sunos4.1.cf
../ cs-sunos4.1.mc generic-linux.cf generic-sunos4.1.mc
Build* s2k-osf1.mc python.cs.mc cs-ultrix4.mc generic-linux.mc generic-ultrix4.cf s2k-ultrix4.mc Makefile cyrusproto.mc generic-ultrix4.mc tcpproto.mc cs-hpux9.mc
chez.cs.mc generic-bsd4.4.cf huginn.cs.mc ucbarpa.mc
clientproto.mc generic-bsd4.4.mc generic-osf1.cf knecht.mc
cs-hpux10.mc generic-hpux10.cf generic-osf1.mc mail.cs.mc
generic-hpux10.mc generic-solaris2.cf mail.eecs.mc vangogh.cs.mc
cs-osf1.mc generic-hpux9.cf ucbvax.mc mailspool.cs.mc
generic-nextstep3.3.mc generic-nextstep3.3.cf generic-solaris2.mc uucpproto.mc

[penguin:root]:/user1/ksch/sendmail-8.11.6/cf/cf> cp generic-solaris2.mc config.mc

⑤ 생성된 config.mc파일을 사용하여 config.cf파일 생성
[penguin:root]:/user1/ksch/sendmail-8.11.6/cf/cf> sh Build config.cf
Using M4=/usr/ccs/bin/m4
rm -f config.cf
/usr/ccs/bin/m4 ../m4/cf.m4 config.mc > config.cf || ( rm -f config.cf && exit 1 )
chmod 444 config.cf

⑥ 구버전의 /etc/mail/sendmail.cf 파일 백업
- 일부 시스템은 /etc/sendmail.cf파일을 사용하므로 주의요망.
- cp, mv, tar등의 명령어를 사용
[penguin:root]:/etc/mail/cp sendmail.cf /백업디렉토리/sendmail.cf

[penguin:root]:/etc/mail/mv sendmail.cf /백업디렉토리/sendmail.cf

⑦ 설치된 sendmail/ 디렉토리에서 "sh Build install"명령 실행한 후에 config.cf파일을
/etc/mail/sendmail.cf파일로 Copy명령어를 사용하여 설치
[penguin:root]:/user1/ksch/sendmail-8.11.6> sh Build install
Making all in:
/user1/ksch/sendmail-8.11.6/libsmutil
Configuration: pfx=, os=SunOS, rel=5.7, rbase=5, rroot=5.7, arch=sun4, sfx=, variant=optimized
......

[penguin:root]:/user1/ksch/sendmail-8.11.6> cp ./cf/cf/config.cf/etc/mail/sendmail.cf

⑧ sendmail과 관련된 도구들(makemap, mailstats, 기타등등)의 설치
- 각각의 도구들의 디렉토리에서 README파일을 숙지한 후에 "sh Build install"실행
[penguin:root]:/user1/ksch/sendmail-8.11.6/makemap> ls
./ ../ Build* Makefile Makefile.m4 makemap.0 makemap.8 makemap.c

[penguin:root]:/user1/ksch/sendmail-8.11.6/makemap> sh Build install

⑨ 새로운 버전의 makemap도구를 사용하여 Database Maps을 생성
※ 2.3절의 Sendmail Spam Relay기능 설정하기 참조

⑩ /etc/mail/local-host-names파일을 생성하여 메일서버의 호스트명 입력
[penguin:root]:/etc/mail> cat local-host-names
penguin <== 메일서버의 호스트 이름
penguin.certcc.or.kr <== 메일서버의 도메인 이름

⑪ Sendmail의 설치 및 컴파일등에 대한 상세한 설치방법 및 자료에 대해서는 다음 페이지를 참조하기
바란다.
- http://www.sendmail.org/compiling.html
- http://www.plus.or.kr/document/etc/sendmail.html

2.3 Sendmail Spam Relay기능 설정하기

o Sendmail8.9.0부터는 디폴트로 메일 릴레이 기능을 제한하도록 되어 있으며 이러한 기능들을 제어하기
위한 많은 환경변수들을 제공

o 환경변수들은 sendmail.cf파일에 저장되어 지는데, 많은 관리자들이 Sendmail 프로그램을 설치하는데 있어
가장 애로를 겪는 부분임

o Sendmail이 anti-spam 기능이 있다고 해도, 이 파일을 적절히 만들어 적용하지 못하면 무용지물이 되기
때문에 관리자들은 이 파일의 적용방법을 반드시 숙지하여 운영하여야 함

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

o 그 내부 형식은 다음의 표와 같다.

spam@hacker.com REJECT

spammail.com REJECT

useful.org OK

211.252.150 RELAY

211.252.151 RELAY

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

- 두번째 필드는 해당 주소로부터 오는 메일을 어떻게 처리할 것인가를 결정하는 데에 사용

- spam@hacker.com의 메일사용자 및 spammail.com 도메인으로 부터 오는 모든 메일은 거절

- useful.org 도메인으로부터 오는 모든 메일은 받아들인다는 설정

- 마지막의 것은 C-Class의 네트워크가 211.252.150, 211.252.151의 IP를 사용하는 모든 IP주소에
대하여 릴레이를 허가

o 위와 같은 형식의 access DB는 /etc/mail/access란 이름으로 파일 시스템에 저장

o access의 파일구조는 텍스트 파일이며, Sendmail이 참조(Lookup)할 수가 없음

o makemap이란 프로그램을 사용하여 Sendmail이 인식할 수 있는 DB 형태로 만들어 주어야 함

- 다음의 명령어를 실행하여 가능 "/etc/mail/makemap dbm /etc/mail/access < /etc/mail/access"

- 디렉토리를 /etc/mail으로 옮긴다음 위와 같은 명령을 쳐주면, access.dir과 access.pag라는 이름으로
DB가 생성됨

- /etc/mail/access 파일을 수정할 때마다 makemap을 사용해 새롭게 DB를 만들어주어야 함

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

o 다음의 표는 이러한 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 1024 5월 3일 17:27 access.pag

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

o 이러한 환경파라미터들의 상세한 내용에 대한 설정을 올바르게 사용하기 위해서는 cf/README 파일의
Anti-Spam 환경제어 부분을 참조하기 바란다.

- http://www.sendmail.org/tips/relaying.html

- http://www.sendmail.org/m4/anti-spam.html

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

o 메일 서버가 FEATURE(relay_entire_domain)을 사용해서 8.9.x버전 이상의 sendmail을 구성하였다면, 이는
도메인 내에 있는 모든 호스트로부터의 릴레이를 허용한다는 것을 의미한다. 만약 "relay_entire_domain"이
호스트 이름("host." : host.domain.com)을 사용한다면 디폴트로 sendmail은 당신의 시스템에 있는 모든 IP
주소를 체크해서 "reverse lookups"를 수행하여 메일서버의 시스템부하를 가중시키게 될 것이다.

o Spam Relay의 가장 좋은 해결방법은 .cf파일을 포함하여 relay_entire_domain을 사용하는 대신에 IP주소를
사용하여 Relay호스트를 설정하는 것이 설정상의 오류를 해결할 수 있는 좋은 방법이 될 수 있다..

3. 마지막으로

sendmail의 스팸 릴레이 차단기능만으로는 스팸메일에 대한 궁극적인 해결책은 될 수 없다. 다만 국내 정보통신망에서 운영되는 메일서버가 외부 악의의 사용자로부터 스팸메일 릴레이 서버로 악용되는 피해를 예방하는 차원에서는 상당히 좋은 기능이다.

스팸메일은 그 상업적인 가치로 인해 이와 관련된 서비스나 제품들이 많이 상용화 되어있으며 결과적으로 스팸메일이 범람하게됨에 따라 ISP 및 사용자들의 반발이 거세지면서 사회적 문제로 부각되고 있다. 이메일 폭탄에 의한 공격은 기존의 법률로 충분히 처벌이 가능하므로 별다른 대책이 필요하지 않을 것이다. 그러나 아직은 미국등 선진국에서조차 스팸메일을 명확히 범죄행위로 규정하는 법률이 없으며 현재 관련 법안이 제출되어있는 상태이다. 현재로서 스팸메일을 통제할 수 있는 법률적인 장치가 없기 때문에 각 ISP별로 사용약관 등을 이용하여 억제하고 있을 뿐이다. 이에 더해 전자우편 폭탄과는 달리 스팸메일은 그 상업적인 가치가 크기 때문에 사업자들의 입장과 사용자 및 ISP들의 입장이 상반되어 있다.

우리나라도 인터넷을 통한 산업의 육성과 사용자의 보호라는 모순을 잘 조화시키는 방향으로 스팸 전자우편이나 전자우편 폭탄 등을 포함하여 모든 정보시스템 오남용에 대한 제도적인 대책을 하루속히 마련하여야 할 것이다.

관련 링크: http://certcc.or.kr

'Security' 카테고리의 다른 글

Openssh 취약점 및 PrivilegeSeparation  (1) 2002.06.27
Apache Web Server Chunk Handling 취약점  (0) 2002.06.20
UW imapd Buffer overflow  (0) 2002.05.29
OpenSSH 3.2.2  (0) 2002.05.20
IP 네트워크 scanning 기법  (0) 2002.04.26

+ Recent posts