歡迎您光臨本站 註冊首頁

Redhat 7.1下的Sendmail SASL認證的實現

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

Redhat 7.1下的Sendmail SASL認證的實現

Jephe Wu(吳阿亭)





一: 本文目的

利用RedHat 7.1中的默認配置方便地設置一台利用SASL庫進行用戶名和密碼認證的SMTP伺服器,
以允許外面的用戶以用戶名和密碼認證來relay郵件。

二: 網路系統
Redhat 7.1
__________
| |
| SMTP |
| Server |smtp.domain.com
________ |_________| (1.2.3.4)
Intranet | | | ________
_________________|Firewall|_____________|____________| Router|____Internet
| | |_______|
|________|

公司域名 : domain.com
用來認證的SMTP伺服器全稱域名: smtp.domain.com

三: 為什麼要這樣用?

假設上面的公司有專線接入Internet, 且在其它城市有多個分支機構, 公司有統一的域名
domain.com,所有員工的郵件地址類似如staffname@domain.com。 但是分支機構大多數沒
有專線接入,用ISDN或者普通撥號方式入網, 並且越來越多的ISP不允許以非ISP的郵件地址
域名後綴發送郵件, 即使你是他們的撥號用戶。

還有一種情況是移動用戶,經常地,公司派遣用戶在外出差旅行期間,用戶需要發送郵件,
則也同樣需要一種認證方案去允許正確的用戶relay郵件。

現在我們考慮做公司自己內部的郵件relay系統。

就是設置一台SMTP伺服器在防火牆之外,安裝Redhat 7.1,選擇『伺服器系統』方式安裝所有
需要的包,然後設置Sendmail,配置一台基於SASL的用戶名和密碼認證的郵件伺服器,以relay
自己公司的員工的郵件。

四: 配置Sendmail

1. 選擇『伺服器系統』安裝Redhat 7.1

2. 進入目錄 /usr/share/sendmail-cf/cf 。
如果你沒有該目錄,說明你還沒有安裝sendmail-cf-8.11.2-14 RPM包,從你的安裝CD中安裝它。

3. 修改文件redhat.mc如下

divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command:
dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include(`../m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
define(QUEUE_DIR,`/var/spool/mqueue/q*')
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail)dnl
FEATURE(`access_db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

其中,我加了下面的行:

1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl

註:

第1行 我啟動了多個郵件隊列,希望得到更好的隊列處理和性能改進。
第2,3行 移走前面的註釋,打開相應的各種認證機制。
第4,5行 設置相應的MTA和MSA所在的埠號。


且註釋出了
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2. dnl FEATURE(`accept_unresolvable_domains')dnl

第1行 允許通過網路連接Sendmail。
第2行 禁止不可解析的域名relay郵件

最後運行

#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
寫到/etc/sendmail.cf文件中


既然我們打開了多個隊列,現在我們在/var/spool/mqueue/下創建任意多個隊列目錄如

#cd /var/spool/mqueue
#mkdir q1 q2 q3 q4 q5 q6

這樣Sendmail將會使用這六個目錄做為隊列目錄,增加了性能。

五: 設置SASL認證方案

1. 運行下面的命令,確保SASL被編譯進Sendmail.

#/usr/sbin/sendmail -d0.1 -bv root |grep SASL

輸出應該類似如下面:

NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG

確保你能看見上面的文本中的 SASL

2. 測試埠25,確保輸出AUTH提示行。

#telnet localhost 25
Trying 127.0.0.1...
Connected to smtp.domain.com.
Escape character is '^]'.
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800
EHLO localhost
250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 HELP
quit
221 2.0.0 smtp.domain.com closing connection
Connection closed by foreign host.

你需要至少看見AUTH行中有LOGIN PLAIN在那裡,否則不能relay mail。

3. 增加SASL用戶且更改密碼

#/usr/sbin/saslpasswd jephe
Password: *******
Again (for verification): *******

#/usr/sbin/sasldblistusers
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
user: jephe realm: smtp.domain.com mech: PLAIN
user: jephe realm: smtp.domain.com mech: CRAM-MD5

用戶的密碼DB文件在/etc/sasldb,用下面的命令確保正確的許可權設置。

特別注意: 在下面的windows的Outlook Express中設置用戶名和密碼時
並不是簡單地使用用戶名jephe,而是用象「user@realm」的用戶名,
在這裡是 jephe@smtp.domain.com作為用戶名。

#chmod 400 /etc/sasldb

可以用/usr/sbin/saslpasswd加更多的用戶,用/usr/sbin/sasldblistusers檢查用戶已經加入。


4. 更改默認的Redhat 7.1密碼認證方法

默認地,Redhat 7.1中的Sendmail用PAM方法檢查密碼,這意味著用戶必須是系統用戶,為了
增強安全性,我們改用/etc/sasldb中的用戶,改下面的文件中的pam為sasldb。

#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面

pwcheck_method:sasldb


5. 最後,運行/etc/rc.d/init.d/sendmail restart重新啟動Sendmail。


六: 設置Windows的Outlook Express。

1. Outlook Express僅僅使用 PLAIN LOGIN 認證機制,確保上面的telnet localhost 25中
的AUTH行輸出PLAIN LOGIN即可。

2. 在『工具』-『帳號』-『屬性』-『伺服器『-
』發送郵件伺服器』中選中『我的伺服器需要認證』

然後在『登錄用戶帳號』上填上

「你的用戶名@你的realm冒號後面的伺服器全稱域名」

如:本文的情況是 jephe@smtp.domain.com

密碼為你在前面輸入的密碼。

注意: 用戶名絕不是簡單地 jephe,必須跟上realm:後面的域名。

3. 現在測試,發一封信給自己,檢查tail -f /var/log/maillog有無任何錯誤
然後在收到自己發出的信之後檢查郵件頭,你能發現被伺服器接收後有個(authenticated)
在後面表示是通 過允許的認證機制relay的郵件。

七: FAQ。

1. 如果你沒有命令saslpasswd,sasldblistusers在/usr/sbin/目錄下面。

答: 你需要安裝cyrus-sasl-1.5.24-17 RPM包。

2. 如果不想用SASL認證,就用默認的Redhat 的PAM方法。

答: 忽略上面的SASL設置的部分,默認地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件裡面為
pwcheck_method:pam
則你就簡單地用useradd增加一個系統用戶並更改密碼即可。

然後在Outlook Express中設置用戶名時則只用如「jephe」即可,不需要跟全稱域名。

附加部分:

對前面兩篇文章
VI的常見使用技巧 和 如何設置一個基本的OpenLDAP Server 的補充:

1. 用 %s/string1/string2/gc 提示你在遇到每個string1時是否改變為string2
2. 在用VI打開一個現有的文件后想不退出該文件而編輯另一個文件用
e filename 和 e #在兩個文件間切換。

---------------
4) 如何記錄LDAP查詢Log且方便調試?

你可以在/etc/syslog.conf中加入

local4.* /var/log/openldap.log

然後每一次LDAP請求將會被記錄進該文件,你也可根據該文件中的信息調試問題。


完 Jephe Wu (吳阿亭)





中國Linux論壇 版權所有





--------------------------------------------------------------------------------


Copyright 1999,2000, 2001 China Linux Forum


[火星人 ] Redhat 7.1下的Sendmail SASL認證的實現已經有721次圍觀

http://coctec.com/docs/linux/show-post-69734.html