實驗環境:Centos6.0
Port:
SMTP 25
POP3 110
IMAP 143
POP3s 995
IMAPs 993
# yum install postfix dovecot -y
1.MTA服務器的設定(Postfix基礎設定)
# vim /etc/postfix/main.cf
*****************************************************************************
修改添加:
myhostname = Server1.example.com
myorigin = $myhostname
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost www.linux.jjf
mynetworks = 192.168.0.0/24, 127.0.0.0/8, hash:/etc/postfix/access
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
*****************************************************************************
# postmap hash:/etc/postfix/access
# postalias hash:/etc/aliases
# /etc/init.d/postfix check
# /etc/init.d/postfix restart
# netstat -tunlp|grep 25
設定郵件主機權限與過濾機制
# vim /etc/postfix/access
****************************************************************************
192.168.1. REJECT
123.com REJECT
192.168.2.123 OK
edu.cn OK
****************************************************************************
# postmap hash:/etc/postfix/access (更新訪問控制數據庫,更改後無需重啓立即生效)
設定郵件別名:/etc/aliases
# vim /etc/aliases
****************************************************************************
添加:
用戶X: 別名1,別名2,別名3,別名4,[email protected] (用戶X的郵件會自動發給別名1,2,3,4和[email protected])
****************************************************************************
# postalias hash:/etc/aliases (更新別名數據庫)
個人化郵件傳遞:~/.forward
$ vim ~/.forward (普通用戶名jjf)
****************************************************************************
jjf
sust
[email protected] (用戶JJF的郵件不但自己保留一份,而且自動轉發給sust和[email protected])
****************************************************************************
$chmod 644 ~/.forward
# postqueue -p (查看郵件隊列內是否留有待發郵件、一般情況下應該沒有遺留郵件)
# postcat 6E81821AC2 (查看留在郵件隊列裏的郵件,6E81821AC2是隊列內郵件的queue的ID)
# postfix flush (強制將郵件隊列內的郵件寄送出去)
2.MRA服務器的設定(dovecot的設定)
# vim /etc/dovecot/dovecot.conf
**************************************************************************
protocols = imap pop3
**************************************************************************
# vim /etc/dovecot/conf.d/10-ssl.conf(明文郵件傳輸)
**************************************************************************
ssl = no
**************************************************************************
加密的POP3s/IMAPs設定
1>建立證書並放於指定位置
# cd /etc/pki/tls/certs/
# make Server1dovecot.pem
# mv /etc/pki/tls/certs/Server1dovecot.pem /etc/pki/dovecot
# restorecon -Rv /etc/pki/dovecot
2>配置dovecot,只要POP3s、IMAPs即可,取消明文傳輸
# vim /etc/dovecot/conf.d/10-ssl.conf
*************************************************************************
ssl = required
ssl_cert = </etc/pki/dovecot/Server1dovecot.pem
ssl_key = </etc/pki/dovecot/Server1dovecot.pem
************************************************************************
# vim /etc/dovecot/conf.d/10-auth.conf
************************************************************************
disable_plaintext_auth = yes (取消明文認證、只支持加密認證)
************************************************************************
# vim /etc/dovecot/conf.d/10-master.conf
************************************************************************
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
#port = 993
#ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}
************************************************************************
3>處理額外的mail_location設置值
# vim /etc/dovecot/conf.d/10-mail.conf
*************************************************************************
mail_location = mbox:~/mail:INBOX=/var/mail/%u
*************************************************************************
3.MUA軟件客戶端的收發郵件軟件
1>Linux Mail(Linux系統自帶的郵件瀏覽軟件)
用mail直接編輯文字郵件與發送郵件
#mail [email protected] (以小數點代表結束)
利用已經處理完畢的“純文本文檔”發送郵件
#mail -s 'test' [email protected] < /root/test
利用mail查閱郵件
讀信: 數字+Enter
顯示標題: h
回覆郵件: R
刪除郵件: d
存儲郵件到指定文件: s 數字 文件名
離開mail: q
#mail -f ~/test.txt 讀取存儲的郵件
以“添加附件”的方式寄信
#yum install sharutils -y
#uuencode /etc/hosts attachfile|mail -s 'attach' [email protected]
獲得附件:
先存儲信件,再用命令uudecode attach -o jjfattach (用編譯器解碼後的文件是jjfattach)
2>跨平臺好用的軟件:Thunderbird(雷鳥)
下載地址:http://www.mozilla.org/thunderbird/download/?product=thunderbird-17.0.2&os=win&lang=zh-CN
垃圾郵件過濾機制
用postgrey進行非正規Mail server的垃圾郵件過濾,若發信來源同一封信第一次寄來時,postgrey默認會過濾他,並且將來源地址記錄起來
,在約5分鐘後,若該郵件又傳來一次時,則該郵件會被收下來。
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum install db4 db4-utils db4-devel -y
# yum install perl perl-Net-DNS -y
# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum install postgrey -y
# /etc/init.d/postgrey start
# netstat -anlp|grep postgrey
# vim /etc/postfix/main.cf
*********************************************************************************************
添加:
smtpd_recipient_restrictions =
permit_mynetworks, #默認值,允許來自mynetworks設置值的來源
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_destination, #拒絕不信任的目標
check_policy_service unix:/var/spool/postfix/postgrey/socket
#以上幾個選項是有順序的!!
********************************************************************************************
# vim /etc/sysconfig/postgrey (手動建立)
********************************************************************************************
OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60" #默認阻擋5分鐘,這裏修改默認阻擋1分鐘
********************************************************************************************
#vim /etc/postfix/postgrey_whitelist_clients (白名單的添加)
***************************************************
mail.dsa.qwq.com
www.dsjaig.ads.com
***************************************************
#vim /etc/postfix/main.cf (通過數據庫添加黑名單)
*******************************************************
smtpd_recipient_restrictions =
permit_mynetworks,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cblless.anti-spam.org.cn,
reject_rbl_client sbl-xbl.spamhaus.org,
check_policy_service unix:/var/spool/postfix/postgrey/socket
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/access,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cblless.anti-spam.org.cn,
reject_rbl_client sbl-xbl.spamhaus.org
smtpd_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain
********************************************************
基礎的郵件過濾機制(標題、內容的過濾)
#vim /etc/postfix/main.cf
********************************************************
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks #regexp表示“使用正規表示法”
*******************************************************
#touch /etc/postfix/header_checks
#touch /etc/postfix/body_checks
********************************************************
規則:
/規則/ 操作 顯示在登錄文件裏面的信息
/^Subject:.*A funny game/ DISCARD drop header deny
#將標題爲"A funnt game"的郵件丟棄、並顯示drop header deny
操作包括:REJECT、WARN、DISCARD
*********************************************************
#postmap -q - regexp:/etc/postfix/header_checks /etc/postfix/body_checks(檢查語法)
# /etc/init.d/postfix restart
# /etc/init.d/postgrey restart
防火牆的設置:
iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT (SMTP協議需要使用port 25)
iptables -A INPUT -p TCP -i $EXTIF --dport 993 --sport 1024:65534 -j ACCEPT (加密傳輸端口)
iptables -A INPUT -p TCP -i $EXTIF --dport 995 --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT (明文傳輸端口)
iptables -A INPUT -p TCP -i $EXTIF --dport 143 --sport 1024:65534 -j ACCEPT
注:
1.上層DNS中MX標誌一定要設置正確,否則郵件將可能直接被MX服務器踢掉;
2.MUA的主要的功能就是收取郵件主機的電子郵件,以及提供用戶瀏覽與編寫郵件併發送郵件到郵件主機上;
3.MTA:即郵件發送代理人,接受來自客戶端和其它MTA的郵件(採用SMTP協議和port 25),之後再轉發到下一臺主機;
4.MDA:即郵件傳送代理人,分析由MTA所收到的郵件表頭或內容等數據,決定這些郵件的去向。MDA是MTA下面的一個小程序,實現MTA郵件轉發功能,並且還可以自動回覆和過濾垃圾郵件;
5.郵件發送步驟:
取得某臺MTA的使用權限——>用戶在MUA上編寫郵件後發送到MTA上——>如果該封郵件的目標是本地端MTA自己的帳號,那就會通過MDA將這封信送到自己的Mailbox中——>如果該封郵件的目標是其他的MTA,則開始中繼轉發(Relay)的流程,由MDA發送到其它的MTA主機,直至目標MTA主機接收後將該郵件放到正確的用戶郵箱中,等待用戶登錄讀取;
6.MRA:即郵件檢索代理,是一個郵件服務的組件(如:dovecot),提供POP3、IMAP通信協議進行郵件的接受,接收到本地的郵件主機;
7.MUA通過POP3協議連接到MRA的port 110,並且輸入賬號與密碼來取得認證與授權;MRA確認帳號密碼正確後,前往該用戶的Mailbox(/var/spool/mail/賬戶名稱)取得用戶的郵件併發送到用戶的MUA軟件上;當所有的郵件傳送完畢後,用戶的Mailbox內的數據將會被刪除!
8.郵件發送流程:
1>發信端與收信端兩臺主機間先經過握手(ehlo),此時發信端被記錄爲發信來源。通過握手後就可以進行郵件標題的傳送了;
2>收信端分析標題信息,若郵件的“Mail to:主機名”爲收信端主機,且該名稱符合mydestination的設置,則該郵件開始被接受到隊列,並進一步送到Mailbox當中;若不符合mydestination的設置,則終止連接且不進行郵件內容(body)的傳送;
3>若"Mail to:主機名"不是收信端本身,則開始進行中繼轉發(Relay)的分析;
4>轉發過程首先分析該郵件的來源是否符合信任的客戶端,若符合則開始接收郵件至隊列,並等待MDA將郵件再轉發出去,若不符合則繼續下一步;
5>分析郵件來源或目標是否符合relay_domains的設置,若符合則郵件將被接收至隊列,並等待MDA將郵件再轉發出去;
6>若這封郵件的標題數據都不符合上述的規範,則終止連接,並不會接收郵件的內容數據。