지니워의 일상다반사

Sendmail 에 대하여 알아보자 - 1 본문

본격 SE업무이야기/Linux

Sendmail 에 대하여 알아보자 - 1

지니워 2014. 1. 12. 00:31

리눅스에서 주로 사용하는 메일 패키지는 sendmail이다. sendmail은 널리 쓰이는 만큼 취약점도 해커들에게 많이 노출이 되어있다. 그 때문에 보안 부분이 강화 된 qmail도 쓰인다고 하지만 아쉽게도 qmail을 직접적으로 접해보지는 못했다.


sendmail 처음 접했을 때는 가볍게 접근할 수 있지만 알면 알수록 어려운 프로그램임에 틀림없다. 설정파일인 sendmail.cf를 열어보면 default 값으로 설정파일의 Line이1838이나 되며 직접적으로 서비스를 이용하는데 큰 불편은 없지만 해킹에 대한 대비라던가 보안관련하여 세팅값을 바꾼다던가 하는등의 세세한 설정값들이 많은 편이기 때문에 숙련된 SE라도 sendmail의 세부세팅에 관해서는 잘 모르는 경우가 많다.


현업에서 sendmail을 사용할 때 이용했던 방법은 sendmail을 설치한 후 설정파일을 m4를 이용해 컴파일 하고 그 파일들을 다른 서버에도 적용시켜 사용했다. 그때는 그게 당연한 것인줄 알았고 편했기 때문에 그렇게 사용했는데 지금 생각해보면 좀 위험한 방법이었던 것 같다. 보안 및 해킹에 대비한 세팅을 전혀하지 않은 상태에서 관리하는 모든 서버에 동일한 세팅을 적용했으니...사실 이때 munin이라는 서버 관리툴과 slave DB를 담당하던 서버의 sendmail이 해킹당하여 스팸메일이 대량으로 살포되었던 적도 있다. 덕분에 서버의 부하는 엄청나게 올라갔고 그로 인해 DB가 죽어버려 서비스가 중단되었던 적도 있다. 당시 어떠한 해결책도 찾지 못하고 sendmail프로세스를 kill했던 기억이 난다. 물론 그 후로는 munin이 발송해주는 서버 이슈 메일을 받지 못했기에 상당히 불편했다.


잠이 잘 오지 않아 책을 뒤적거리던 중 sendmail때문에 고생했던 기억이 나서 후다닥 살펴보았다. 모든 내용을 기술하기는 어렵기 때문에 이번 포스팅에서는 설치방법에 대해 간단히 적어보겠다.



sendmail 설치 방법

1. 서버에 sendmail 이 설치되어 있는지 먼저 알아본다.

rpm -qa | grep sendmail


만약 sendmail이 설치되어 있다면

sendmail-8.14.4-8.el6.x86_64

sendmail-cf-8.14.4-8.el6.noarch


이런식으로 설치된 패키지 목록이 나타날 것이고 아니라면 아무런 값도 나타나지 않을 것이다.


2. sendmail을 설치한다.

yum install sendmail


CentOS 6.5의 경우 위 명령어를 실행하면 procmail이라는 패키지가 같이 검색되어 설치를 하려고 한다. 이 패키지는 메일을 분류하여 스팸여부를 판단하는 역할을 하고 dependency, 즉 의존성을 가지는 패키지이기 때문에 같이 설치를 해야만 한다.


3. sendmail-cf 패키지를 설치한다. 이 패키지는 sendmail의 설정을 담당하는 패키지이다.

yum install sendmail-cf


4. mv 명령어로 sendmail.cf 파일의 이름을 sendmail.cf.old로 변경한다. 이는 이후 나올 과정에서 파일의 컴파일이 잘못될 경우를 대비해 원본 설정파일을 보존하는 과정이다. 그리고 cp명령어로 sendmail.mc 파일의 복사본 sendmail.mc.old 파일을 생성한다.


5. vi sendmail.mc 실행하여 아래 부분을 수정한다.


52 dnl # TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

53 dnl # define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl


52, 53번쨰 줄에 있는 dnl # < 부분을 삭제한다. dnl은 주석표시이다.(뒤에 #이랑 중복되는 값일거 같은데 확인은 못해봤다.)

이 두줄은 smtp 인증메커니즘을 나타내는데 주석처리 되어 있으면 사용하지 않게 되는 것이므로 주석을 제거하는 것이다.


116 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl


116번째 줄에 이런 옵션이 있는데 의미는 smtp 포트접속에 대해 제한을 어느 범위로 정할 것인지를 설정하는 값이다. 좀 헷갈린다. 위의 설정을 예로 들어보면 지금 설정은 로컬만 smtp 접속을 허가하고 메일을 발송할 수 있게 설정되어 있는 상태라고 보면 된다. 하지만 sendmail을 사용할때 메일 발송뿐만 아니라 외부에서 수신되는 메일도 받아서 처리하는 경우가 대부분이기 때문에 이 부분을 외부 접속에 대해서도 오픈을 해줘야 한다. 그래서 위의 값은 아래처럼 바꾼다.


116 dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl


모든 아이피로부터 smtp를 오픈했다.



일단 이정도만 하면 sendmail을 사용할 준비는 모두 된 상태이다. 여기까지 마쳤다면


m4 sendmail.mc > sendmail.cf


명령어를 사용하여 설정파일을 컴파일해 주면 된다.


정상적으로 sendmail이 작동하는지 테스트하려면 telnet등을 이용하여 메일을 발송해보면 되겠다. 이 부분은 다른 곳에서도 많이 다루고 있으니 알아서 하고...(무책임한!!)라고 한다면 포스팅을 안한것 만 못하므로 아래에 테스트 방법을 적어놓겠다.


[telnet에서 sendmail 보내는 방법]

1. telnet localhost 25 실행.(25번 포트는 sendmail 서비스를 구동하기 위해 사용되는 포트이다.)
2. mail from : 보내는 사람(형식은 xxx@도메인)
3. rcpt to : 받는사람(형식은 xxx@도메인)
4. data -> 본문내용 ->.(행 첫번째에 마침표가 나오면 본문쓰기를 마치겠다는 뜻이다.)
5. quit


후...야밤에 머리 썼더니 배고프다. 다음 포스팅에서는(언제가 될지는 모르겠지만)access파일을 이용한 relay관리와 sendmail.cf에 대한 중요 설정값 몇가지에 대해 적어보겠다. 이상 끝.


'본격 SE업무이야기 > Linux' 카테고리의 다른 글

Sendmail 에 대하여 알아보자 - 2  (2) 2014.01.13
Comments