Friday, October 22, 2010

RHEL5/CentOS5 mail server 2 - Postfix & SMTP認證

Postfix & SMTP認證

1 . 環境
  1.1 電腦環境
    Linux版本 :  CentOS 5.2 最小安裝
電腦名稱  :   mail.test.com.tw
    IP資訊    :  192.168.239.170
    DNS需求   :  須新增一筆 MX紀錄指向mail.test.com.tw
                  test.com.tw   MX 10  mail.test.com.tw
                  mail             IN  A  192.168.239.170
反解紀錄  : 一般申請ISP的時候會給你一筆反解紀錄,若無特別需求不需自行設定。需反解紀錄是因為 Postfix在收信的時候會解析對方的反解紀錄,對方收你的信時也會解析你的反解紀錄。解析的到反解即可,即使是反解是解析出ISP的名稱也沒關西。
防火牆需求對外IP TCP25TCP110 port須指向 192.168.239.170

  1.2 所需設定檔
    /etc/portfix/main.cf

  1.2 安裝所需要的套件
建立給掛載光碟的資料夾
# mkdir /cdrom
掛載光碟
# mount /dev/cdrom  /cdrom
# cd /cdrom/CentOS/

安裝postfix  MTA套件
# rpm -ivh postfix-2.3.3-2.i386.rpm

停止sendmail服務
[root@localhost CentOS]# service sendmail stop

移除sendmail
[root@localhost CentOS]# rpm -e sendmail

安裝dovecot 套件
# rpm -ivh \
dovecot-1.0.7-2.el5.i386.rpm \
mysql-5.0.45-7.el5.i386.rpm \
postgresql-libs-8.1.11-1.el5_1.1.i386.rpm \

perl-DBI-1.52-1.fc6.i386.rpm

2 . 設定 Postfix 以及 dovecot
Postfix 設定檔 /etc/postfix/main.cf 以達郵件收發功能
# vi /etc/postfix/main.cf
myhostname = mail.test.com.tw                  #主機名稱
mydomain = test.com.tw                         #網域名稱
myorigin = $mydomain                           #發信端機
inet_interfaces = all                          #監聽介面
mydestination = $myhostname, $mydomain         #信件的目的網域符合將信收下來
mynetworks = 127.0.0.0/8, 192.168.239.170      #可以Relay的條件
視情況新增以下設定
maximal_queue_lifetime = 180s                  #寄不出去的信保留180
bounce_queue_lifetime = 180s                   #寄不出去的信回傳信號180
mailbox_size_limit = 0                                                         # 預設50M信箱大小,0為沒限制。
message_size_limit = 0                         # 信件大小,預設10M0為沒限制。


Dovecot設定檔 /etc/dovecot.conf 已達POP3收信功能
# vi /etc/dovecot.conf
protocols = pop3
listen = [*]

重新啟動 postfix 以及 dovecot 即可達到郵件收發以及POP3收信之功能。
# service postfix restart
# service dovecot restart




    開機自動啟動服務
# chkconfig postfix on
# chkconfig dovecot on


3 . SMTP認證
  3.1 概述
l  內部網路收發信正常(DNS以及防火牆均指向正確)
l  外部網路POP3收信正常,但無法寄信。

無法寄信的問題在於main.cfmynetworks 參數中只有127.0.0.0/8 以及192.168.239.170兩個本機主機IP可以做mail relay的動作,所以要達到外部網路寄信(使用者在家可收發信)有兩個方向可以進行。
l  Open Relay (此動作會造成此主機被當成垃圾郵件轉寄站)
mynetworks = 127.0.0.0/8, 0.0.0.0/0
l  SMTP寄信驗證
Outlook想要使用Postfix 來進行寄信的時候,Postfix 會要求 Outlook來輸入認證用的帳號與密碼,以取得寄信的權限,但全公司內部也必須做此設定。
  3.2 設定SMTP認證機制
# vi /etc/sysconfig/saslauthd
MECH=pam                           #預設值

# vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd          # 預設值

# vi /etc/postfix/main.cf
在最下方加入以下設定
smtpd_sasl_auth_enable = yes              # 啟動 sasl 認證
smtpd_sasl_security_options = noanonymous # 不予許匿名Relay
broken_sasl_auth_clients = yes            # 支援非正規通訊協定標準的MUA
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

permit_mynetworks           # 允許mynetworks參數中所設定的範圍做匿名Relay
permit_sasl_authenticated   # 允許通過sasl認證Relay
reject_unauth_destination   # 退回未經驗證的連線


重新啟動 postfix 以及 saslauthd
# service saslauthd restart
# service postfix restart


    開機自動啟動sasl認證服務   
# chkconfig saslauthd on


    每分鐘自動重新寄Queue裡的信
# crontab -e
   */1 * * * * /usr/sbin/postqueue -f


3.3 Outlook Express針對SMTP認證所做之設定。
   

我的伺服器區要驗證打勾即可,如此一來使用者在家中可以正常收發信了,也不必擔心會被當成垃圾郵件轉寄站。
一些小密技 :

佇列操作
postqueue -p         列出佇列內容
postqueue -f         重新執行佇列內容
postsuper -d ALL     刪除佇列內容


其他關於Queue的相關資源 /etc/postfix/main.cf
    minimal_backoff_time (1000s)
       最短重新寄信的時間時間,預設1000(測試過,沒作用)
    maximal_backoff_time (4000s)
       最短重新寄信的時間時間,預設1000(測試過,沒作用)
    maximal_queue_lifetime (5d)
       信在Queue的存活時間,預設五天。
    bounce_queue_lifetime (5d)
       The maximal time a bounce message is queued before it is considered undeliverable.