新聞中心
Postfix+Dovecot+Sasl工作原理
1.A用戶使用MUA客戶端借助smtp協(xié)議登陸smtpd服務(wù)器,需要先進(jìn)行用戶和密碼認(rèn)證,而SMTPD服務(wù)器端支持sasl認(rèn)證,例如有一個(gè)sasl客戶端,就會(huì)去連接SASL。當(dāng)SASL接受到驗(yàn)證請(qǐng)求時(shí)就會(huì)根據(jù)驗(yàn)證方式去進(jìn)行驗(yàn)證,常用的有PAM,passwd等。驗(yàn)證成功后就會(huì)返回給Smtpd服務(wù)器。而smtpd就會(huì)允許A用戶登陸發(fā)送郵件。

上杭網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
2.Smtpd服務(wù)器接受到郵件轉(zhuǎn)發(fā)請(qǐng)求后,查看郵件是本域的還是外部域的,如果是本域內(nèi)的用戶,就會(huì)開啟MDA進(jìn)程并進(jìn)行郵件投遞到用戶的郵箱。
3.B用戶使用MUA客戶端借助pop3協(xié)議登陸dovecot服務(wù)器,需要先進(jìn)行用戶和密碼認(rèn)證,而Dovecot服務(wù)器端本身就有sasl認(rèn)證的功能,而根據(jù)設(shè)置的認(rèn)證方式進(jìn)行用戶和密碼的認(rèn)證。認(rèn)證成功之后用戶登錄,Dovecot就會(huì)用MDR工具去用戶郵箱中取回郵件并下載到用戶的客戶端本地進(jìn)行查看。
Postfix+SASL進(jìn)行用戶發(fā)郵件認(rèn)證
通過驗(yàn)證配置可以發(fā)現(xiàn),如果想發(fā)送郵件給外部(中繼郵件)基本配置只能在mynetwork規(guī)定的ip范圍內(nèi)使用。這個(gè)方式在現(xiàn)實(shí)中也是不可行的。互聯(lián)網(wǎng)上常用的方式是通過賬號(hào)的認(rèn)證方式允許中繼郵件。但Postfix本身沒有認(rèn)證功能所以只能借助于第三方認(rèn)證組件SASL來實(shí)現(xiàn)。與Postfix配合較好的SASL有:dovecot-SASL和cyrus-SASL,以及courier-authlib這幾款組件。各有千秋,使用哪個(gè)根據(jù)實(shí)際選擇即可。
①確定cyrus-sasl已安裝
[root@localhost ~]# rpm -qa | grep cyrus-sasl
cyrus-sasl-gssapi-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-md5-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64
②確定Postfix支持sasl認(rèn)證
[root@localhost ~]# postconf -a
cyrus
dovecot
#默認(rèn)支持cyrus和dovecot這兩種認(rèn)證方式
③Postfix主配置添加以下內(nèi)容
[root@localhost ~]# vim /etc/postfix/main.cf
###################CYRUS-SASL################
broken_sasl_auth_clients = yes
#定義是否支持像outlook、foxmail等非標(biāo)準(zhǔn)協(xié)議認(rèn)證
smtpd_sasl_auth_enable = yes
#開啟sasl驗(yàn)證用戶功能
smtpd_sasl_local_domain = $myhostname
#用于識(shí)別本地主機(jī)
smtpd_sasl_security_options = noanonymous
#不支持匿名用戶
smtpd_sasl_path = smtpd
#指定使用sasl的程序名
smtpd_banner = welcome to smtp.ywnds.com
#定義telnet連接時(shí)顯示信息
smtpd_client_restrictions = permit_sasl_authenticated
#用于限制客戶端連接服務(wù)器
smtpd_sasl_authenticated_header = yes
#從頭信息查找用戶名
smtpd_sender_restrictions = permit_mynetworks,reject_sender_login_mismatch
#定義發(fā)件人規(guī)則
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated, reject_invalid_hostname,reject_unauth_destination
#定義收件人規(guī)則
#permit_mynetworks:允許本地網(wǎng)絡(luò)
#permit_sasl_authenticated:允許sasl認(rèn)證過的用戶發(fā)送郵件
#reject_unauth_destination:拒絕沒有經(jīng)過認(rèn)證的目標(biāo)地址(這個(gè)一定要放在最后)
#reject_invalid_hostname:HELO命令中的主機(jī)名稱無效時(shí)返回501
#reject_non_fqdn_hostname:HELO命令中的主機(jī)名稱不是FQDN形式則返回504
#reject_non_fqdn_recipient:收件地址不是FQDN則返回504
#reject_non_fqdn_sender:發(fā)件地址不是FQDN則返回504
#reject_unauth_pipelining:拒絕不守規(guī)定的流水線操作
#reject_unknown_client:DNS查不出客戶端IP的PTR記錄時(shí)拒絕
#reject_unknown_hostname:HELO命令中的主機(jī)名稱沒有A和MX記錄時(shí)拒絕
#reject_unknown_recipient_domain:收件人地址的網(wǎng)域部分查不出有效的A或MX記錄時(shí)拒絕
#reject_unknown_sender_domain:發(fā)件人地址的網(wǎng)域部分查不出有效的A或MX記錄時(shí)拒絕
④查看SASL支持哪些認(rèn)證機(jī)制
[root@localhost ~]# saslauthd -v
saslauthd 2.1.23
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
⑤Postfix開啟基于SASL用戶認(rèn)證
這里介紹2種認(rèn)證方式,saslauthd和auxprop,一個(gè)是使用系統(tǒng)的賬號(hào)來做認(rèn)證,一個(gè)使用外部的賬戶來做認(rèn)證,對(duì)于安全性來說,當(dāng)然是使用外部的賬號(hào)更安全了,這里介紹的使用sasldb2數(shù)據(jù)庫(kù),mysql的方式暫不介紹。2種方式人選其一即可。
Saslauthd
[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
#登錄方式
Auxprop
[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
#登錄方式
⑥SASL配置文件/etc/sysconfig/saslauthd
SASL只是個(gè)認(rèn)證框架,實(shí)現(xiàn)認(rèn)證的是認(rèn)證模塊,而pam是sasl默認(rèn)使用的認(rèn)證模塊。如果使用shadow做認(rèn)證的話直接修改就可以不需要做其他任何配置了。
Saslauthd
[root@localhost ~]# vim /etc/sysconfig/saslauthd
SOCKETDIR=/var/run/saslauthd
#MECK= pam
MECK = shadow
Auxprop
[root@localhost ~]# vi /etc/sysconfig/saslauthd
#MECH=
FLAGS=sasldb
[root@localhost ~]# saslpasswd2 -c -u 'ywnds.com' redis
#執(zhí)行之后輸入2次密碼就可以了
[root@localhost ~]# sasldblistusers2
#查看添加的用戶
[root@localhost ~]# saslpasswd2 -d redis@ywnds.com
#刪除用戶
[root@localhost ~]# chown postfix:postfix /etc/sasldb2
[root@localhost ~]# chmod 640 /etc/sasldb2
#數(shù)據(jù)庫(kù)權(quán)限修改
⑦重啟服務(wù)
[root@localhost ~]# /usr/sbin/postfix reload
[root@localhost ~]# service saslauthd restart
[root@localhost ~]# chkconfig saslauthd on
測(cè)試賬號(hào)
[root@localhost ~]# testsaslauthd -u hadoop -p hadoop
0: OK “Success”
SMTP認(rèn)證指令
Postfix內(nèi)部郵件過濾
除了在上面配置文件中使用的一些過濾指令外,管理員也可以使用訪問表(access map)來自定義限制條件,自定義訪問表的條件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access進(jìn)行,它們后面通常跟上type:mapname格式的訪問表類型和名稱。其中,check_sender_access和check_recipient_access用來檢查客戶端提供的郵件地址,因此,其訪問表中可以使用完整的郵件地址,如admin@magedu.com;也可以只使用域名,如magedu.com;還可以只有用戶名的部分,如marion@
案例
1.這里以禁止172.16.100.66這臺(tái)主機(jī)通過工作在172.16.100.1上的postfix服務(wù)發(fā)送郵件為例演示說明其實(shí)現(xiàn)過程。訪問表使用hash的格式
(1)首先編輯/etc/postfix/access文件,以之做為客戶端檢查的控制文件,在里面定義如下一行:
172.16.100.66 REJECT
(2)將此文件轉(zhuǎn)換為hash格式產(chǎn)生一個(gè)access.db文件
postmap /etc/postfix/access
(3)配置postfix使用此文件對(duì)客戶端進(jìn)行檢查編輯/etc/postfix/main.cf文件添加如下參數(shù):
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
(4)讓postfix重新載入配置文件即可進(jìn)行發(fā)信控制的效果測(cè)試了
2.這里以禁止通過本服務(wù)器向microsoft.com域發(fā)送郵件為例演示其實(shí)現(xiàn)過程訪問表使用hash的格式
(1)首先建立/etc/postfix/denydstdomains文件(文件名任取)在里面定義如下一行:
microsoft.com REJECT
(2)將此文件轉(zhuǎn)換為hash格式
postmap /etc/postfix/denydstdomains
(3)配置postfix使用此文件對(duì)客戶端進(jìn)行檢查編輯/etc/postfix/main.cf文件添加如下參數(shù):
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains, permit_mynetworks, reject_unauth_destination
(4)讓postfix重新載入配置文件即可進(jìn)行發(fā)信控制的效果測(cè)試了
本文名稱:Linux下安裝Postfix郵件認(rèn)證配置(五)
標(biāo)題鏈接:http://m.5511xx.com/article/djisjpj.html


咨詢
建站咨詢
