우분투(데비안)에서 메일시스템구축(postfix+popa3d+sasl+tls)

hokim의 이미지

1. postfix
메일을 보내주는 서버(smtp)이고 우분투설치시 기본적으로 깔리는 패키지입니다.
그렇지만 디폴트설정이 로컬머신에서만 서비스 해 주게 되어있습니다.
머신외부로부터의 요청에 대해서도 서비스 해 주기 위해서는 postfix 설정을
바꾸어줍니다(Internet Site)

$ sudo dpkg-reconfigure postfix

Quote:

*General type of Configuration?
->Internet Site
*Where should mail for root go
->hokim(관리자 계정)
*Mail name?
->ubuntu.org(메일주소의 @이후의 부분)

2. popa3d
서버의 메일박스에 쌓인 메일을 외부에서 가져갈 수 있게 해주는 서비스입니다
popa3d는 서버계정을 가지고 있는 유저만을 서비스해 줍니다.
(가상 메일계정을 지원하지 않습니다)

$ sudo apt-get install popa3d

3. sasl로 smtp 인증
1과 같이 postfix를 설정하더라도 외부에서 서버의 유저에게만 메일을 보낼수 있고,
서버를 거쳐 다른 곳으로 보낼수 없습니다(no relay). 또한 외부에서 postfix서비스를
사용하는데 인증절차를 거치지 않습니다. 따라서 relay를 할 경우 sasl로 인증절차를
밟도록 해줍니다. 따로 smtp 서버를 가지고 있지않은 XP Home edition이하에서의
outlook 같은 클라이언트들은 이러한 기능을 이용해 서버를 거쳐 메일을 다른곳으로
보내야 합니다

$ sudo apt-get install postfix-tls libsasl2-modules sasl2-bin
$vi /etc/postfix/saslauthd

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

$vi /etc/init.d/saslauthd

......
PWDIR=/var/run/saslauthd
PARAMS="-m /var/spool/postfix/var/run/saslauthd" # 추가 
PIDFILE="/var/run/${NAME}/saslauthd.pid"
....

$ sudo mkdir -p /var/spool/postfix/var/run/saslauthd
$ sudo chown -R root:sasl /var/spool/postfix/var/
$ sudo adduser postfix sasl

$vi /etc/default/saslauthd

START=yes
MECHANISMS="pam"

/etc/postfix/main.cf에 다음을 추가

smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes

4. tls을 이용한 인증절차 암호화
3의 인증절차는 username과 password가 plain text로 전달되기 때문에
중간에 패킷을 가로채는 경우를 대비하여 transport layer에서 암호화를
해줍니다

$sudo apt-get install ca-certificates

$/usr/lib/ssl/misc/CA.pl -newca
$/usr/lib/ssl/misc/CA.pl -newreq-nodes
$/usr/lib/ssl/misc/CA.pl -sign
인증서를 만드는 과정에서 물어보는것에 대해서 적당히 입력해 주십시오

$ sudo mkdir /etc/postfix/ssl
$ sudo cp newcert.pem /etc/postfix/ssl/
$ sudo cp newreq.pem /etc/postfix/ssl/
$ sudo cp demoCA/cacert.pem /etc/postfix/ssl/

/etc/postfix/main.cf에 다음을 추가

smtpd_use_tls = yes
#smtpd_tls_auth_only = yes # You should uncomment to prevent people from passing their passwords in the clear!
smtpd_tls_key_file = /etc/postfix/ssl/newreq.pem
smtpd_tls_cert_file = /etc/postfix/ssl/newcert.pem
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

$ vi /etc/postfix/master.cf
...
# only used by postfix-tls
tlsmgr fifo - - n 300 1 tlsmgr #uncomment 
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes #uncomment
587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes #uncomment

$sudo /etc/init.d/postfix restart
$sudo /etc/init.d/saslauthd start

5. 테스트

$ perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'

Quote:

dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=

인증절차에서는 base64로 인코딩된 username과 password를 받기 때문에
username과 password에 자신의 계정값을 넣고 encoding 된 결과를 얻어서
다음과 같은 테스트과정에서 입력합니다

$ telnet localhost 25

Quote:

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 chep ESMTP Postfix (Ubuntu)
ehlo localhost
250-chep
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
auth plain dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=
235 Authentication successful

위와 같은 결과 나오면 제대로 설정이 된것입니다
실제로 다른 머신에서 아웃룩이나 썬더버드로 테스트 해 보시기 바랍니다

참고자료
http://www.fatofthelan.com/articles/articles.php?pid=22

Forums: 
정태영의 이미지

hokim wrote:
2. popa3d
서버의 메일박스에 쌓인 메일을 외부에서 가져갈 수 있게 해주는 서비스입니다
popa3d는 서버계정을 가지고 있는 유저만을 서비스해 줍니다.
(가상 메일계정을 지원하지 않습니다)

만약 가상 메일 계정등이 필요하다면 (postfix 는 이미 postgresql, mysql 등의 backend 를 이용한 가상메일 계정을 지원하고 있습니다) dovecot 이나 courier-imap 등을 사용해보시기를 바랍니다..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

감사합니다.

여러가지 많이 배우고, 많은 도움이 되었습니다.

익명 사용자의 이미지

dd

익명 사용자의 이미지

:cry: aa :lol:
ㅊㅊㅊㅊㅊㅊ :mrgreen:

익명 사용자의 이미지

위대한 글이다.
경배하라.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.