Tag Archives: sendmail

[CentOS] sendmail + dovecot 설치하기

리눅스 기반의 메일시스템으로 가장 많이 쓰이고 있는 sendmail + dovecot 조합의 설치와 설정에 대해 알아보겠습니다. 여기서 설명할 설정은 제가 선호하는 설정이라는것을 감안하고 봐주시기 바랍니다.

먼저 sendmail을 설치합니다. sendmail은 메일의 송수신을 담당하게 됩니다. 25번 포트를 사용하여 외부로부터의 메일을 수신하는 역할을 합니다.

$ yum install sendmail sendmail-cf cyrus-sasl*

/etc/mail/access 파일에 인증없이 메일을 송신할 수 있는 호스트를 정의해 줍니다. 기본적으로 메일서버 본인이 해당되게 됩니다.

Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
Connect:123.123.123.123                 RELAY
Connect:mail.theeye.pe.kr               RELAY

/etc/mail/local-host-names 파일에는 메일주소로 사용될 수 있는 도메인들을 입력합니다. 물론 현재세팅중인 서버를 메일서버로 사용하는 도메인들을 사용하셔야 합니다.

# local-host-names - include all aliases for your machine here.
theeye.pe.kr

/etc/mail/sendmail.mc 파일중 다음의 항목들의 주석을 해제하거나 수정을 해줍니다.

define(`SMART_HOST', `mail.theeye.pe.kr')dnl

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

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

FEATURE(masquerade_envelope)dnl
FEATURE(`allmasquerade')

위의 항목들은 모두 MAILER(smtp)dnl 위에 정의되어야 합니다. 주의가 필요합니다.

스팸을 조금이라도 걸러내기 위해 DNS기반의 스팸 블랙리스트 체크를 추가할수도 있습니다. MAILER(smtp)dnl 바로 위에 다음의 항목을 추가해줍니다. 저는 다음의 2가지를 사용하고 있습니다.

FEATURE(dnsbl,`sbl.spamhaus.org',`',`Rejected - see http://www.spamhaus.org/sbl/')dnl
FEATURE(dnsbl, `spamlist.or.kr', `Rejected - see http://www.kisarbl.or.kr/')dnl

이제 다음의 명령을 사용하여 설정을 컴파일 해줍니다.

$ make -C /etc/mail
make: Entering directory `/etc/mail'
make: Leaving directory `/etc/mail'

이제 메일 데몬을 자동시작되도록 등록한 뒤에 실행해 보겠습니다. 여기에 추가로 메일 송신시에 cyrus-sasl이라는 데몬을 사용하게 됩니다. 같이 실행 하도록 하겠습니다.

$ chkconfig --level 345 saslauthd on
$ service saslauthd start
Starting saslauthd:                                        [  OK  ]

$ chkconfig --level 345 sendmail on
$ service sendmail start
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

정상적으로 데몬이 떠있는지 텔넷으로 접속하여 확인해 보도록 하겠습니다.

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 theeye.pe.kr ESMTP Sendmail 8.14.4/8.14.4; Sun, 19 Jan 2014 13:27:14 +0900
EHLO localhost
250-theeye.pe.kr Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN  # 이 라인이 있다면 정상
250-DELIVERBY
250 HELP

이번에는 imap, pop3 서버를 설치해보도록 하겠습니다. 각종 메일 클라이언트들이 이 프로포콜을 사용하여 수신받은 메일을 가져가게 됩니다.

$ yum install dovecot

설치는 너무 간단해서 딱히 할말이 없군요^^ /etc/dovecot/dovecot.conf 의 다음의 주석을 제거해 줍니다.

protocols = imap pop3 lmtp
listen = *, ::

IPv6를 사용하지 않는다면 listen 항목의 ::는 지우셔도 됩니다. 이번에는 Plain Text 로그인을 가능하게 하기 위해 /etc/dovecot/conf.d/10-auth.conf 의 다음의 내용을 주석 해제 후 값을 변경해 줍니다.

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
disable_plaintext_auth = no

이제 데몬을 구동해 줍시다.

$ chkconfig --level 345 dovecot on
$ service dovecot start
Starting Dovecot Imap:                                     [  OK  ]

최종적으로 사용하게 되는 포트는 25(smtp), 110(pop3), 143(imap), 993(imaps), 995(pop3s)입니다. /etc/sysconfig/iptables 에서 방화벽 연결을 해제해 주도록 합니다.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT

설정이 완료되었습니다.

procmailrc + hcode로 스팸메일을 막아보자!

지금 이글은 알맹이는 없고 방향만 제시해 주는 그런 영양가 없는 글입니다-_-a
제 서버는 sendmail + procmail기반의 메일 서버입니다.
vpopmail이나 qmail등을 알아서 잘-_-; 보시기 바랍니다.

우선 procmail이 설치되어있다는 조건하에 시작하겠습니다. hcode를 다운받습니다.
여러곳을 돌아다녀봤는데 몇가지 버그도 있고 제일 확실한 버젼을 올려둘테니 밑에서 다운받으시기 바랍니다.
이제 압축을 풀어 설치를 해봅시다.

[CODE][root@tomeii src]# ls
hcode2.1-mailpatch3-TABpatch.tar
[root@tomeii src]# tar -zxvf hcode2.1-mailpatch3-TABpatch.tar
[root@tomeii src]# cd hcode2.1-mailpatch3-TABpatch
[root@tomeii hcode2.1-mailpatch3-TABpatch]# make
[root@tomeii hcode2.1-mailpatch3-TABpatch]# cp hcode /usr/bin
[root@tomeii hcode2.1-mailpatch3-TABpatch]# [/HTML][/CODE]

저는 /usr/bin안에 실행파일을 두었는데 원하시는곳에 두시면 됩니다. 기왕이면 PATH잡혀있는곳으로 옮깁시다.
아니면 procmail설정시 절대경로로 설정을 하여도 되겠군요.
컴파일시 경고가 조금 뜨긴 하지만 무시합시다;

vi등의 자신에게 편한 에디터로 procmailrc를 열어봅시다. /etc 또는 /etc/mail 안에 있습니다.
예제로 euc-kr형식과 ks_c_5601-1987형식의 제목을 가진 메일의 헤더를 디코딩 해보겠습니다.
다음의 내용을 넣습니다.

[CODE]:0 Efhw
  *^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
  |formail -c | hcode -dk -m


:0 Efhw
  *^(Subject|From|Cc):.*=\?ks_c_5601-1987\?(B|Q)\?
  |formail -c | hcode -dk -m[/HTML][/CODE]

이제 들어오는 메일의 제목이 디코딩 되어들어옵니다. 제목으로 필터링을 해봅시다.

[CODE]:0
*^Subject:.*(advert|광고)
/dev/null[/HTML][/CODE]

메일의 제목에 advert나 광고를 포함할 경우 /dev/null로 보내지게 됩니다.
정규식을 이용하여 무한한 확장을 할수 있겠죠. 위는 간단한 하나의 예제입니다. 본인의 서버에 맞게 설정하시면 됩니다.

hcode의 소스를 올립니다. 다른것들은 ks_c_5601-1987를 정상적으로 디코딩 못하는 버그가 있더군요.
이것을 쓰시기 바랍니다.

1064898209.tar