要生成sendmail.cf文件
一般是編譯sendmail.mc來生成sendmail.cf,這樣的好處是通過編譯,會查看出一些sendmail的設置錯誤和漏洞。
# cd /etc/mail
# vi sendmail.mc
(1)找到:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
打開注解,啟用相應的認證機制,主要是為了支持Outlook。
(2)找到:
DAEMON_OPTIONS(`Port=25, Name=MSA,M=Ea')dnl 這樣sendmail將在25端口進行強制身份認證
dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
dnl DAEMON_OPTIONS(`Port=587, Name=MSA,M=a')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
打開注解,啟用相應的認證機制,主要是為了支持Outlook。
(3)在(2)后添加兩行:
設置MTA和MSA端口。
(4)找到:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
將該行注釋掉,以允許通過網絡連接Sendmail。
(5)找到:
dnl FEATURE(`accept_unresolvable_domains')
禁止不可解析域名的轉發郵件。
最后保存退出。
編譯sendmail.mc生成sendmail.cf文件
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# /etc/rc.d/init.d/sendmail restart --重起sendmail服務。
如果在執行m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 報錯的話,那么檢查是否安裝sendmail-cf.*.rpm是否安裝:
# rpm -qa | grep sendmail-cf
如果沒有安裝,則需要在安裝光盤中找到sendmail-cf包,并安裝:
# rpm -ivh sendmail-cf*.rpm
檢測編譯結果
1、檢測SASL被編譯到sendmail中。
#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
輸出類似如下:
NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS
保證你看到SASL就是正確的。
2、檢測25端口:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fyhtest.163.net ESMTP Sendmail 8.12.5/8.12.5; Thu, 10 Apr 2003 16:35:42 -0400
ehlo test
250-fyhtest.163.net Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
quit ---退出
只要輸出有LOGIN PLAIN就可以了。
到這里,sendmail就配置完了,你可以添加一個用戶進行測試:
#useradd test
#passwd test 設置密碼
把你服務器的域名添加到/etc/mail/local-host-names中。
其他設置
要想更好的使用sendmail,常用到的一些設置:
1、限制最大郵件。
# vi /etc/mail/sendmail.cf
# maximum message size
MaxMessageSize=5000000 (注:5M)
2、最大的群發數目。
# vi /etc/mail/sendmail.cf
# maximum number of recipients per SMTP envelope
MaxRecipientsPerMessage=20 (注:20個)
3、域名文件----local-host-name 可以用他來實現虛擬域名或多域名支持。
# vi /etc/mail/local-host-name
test.com
test1.com
4、mail別名文件--aliases。
# vi /etc/aliases
系統內部別名:discuz:bbsadmin
discuz是我的用戶名,其他的是別名,用逗號隔開。
轉發到其他的郵箱:discuz:bbsadmin@discuz.com
# newaliases --寫到庫中
5、郵件控制文件
relay、ok、reject和discard。
relay: 可以實現轉發。
ok: 是用來允許用戶的任意訪問,它會覆蓋任何其它已建立的檢查(實際設置中,最好不要設為這項,除非你對該用戶是絕對信任的);
reject: 可以實現對來訪地址的拒絕,它根本就不容許該地址與你的郵件服務器進行連接通信;
discard: 的作用是在接收到傳輸的郵件消息后,把它丟棄掉。在發送者看來,他的郵件的確是接收了,但他并不知道,發送的目的地址根本不可能接收到他的郵件,服務器巧妙地欺騙了他。
# vi /etc/mail/access
localhost.localdomain RELAY ---允許
localhost RELAY
127.0.0.1 RELAY
peng@sina.com ok
@sexgirl.net reject
211.77.22.45 discard
# makemap hash /etc/mail/access.db < /etc/mail/access --寫到庫中
6、Sendmail環境下的防止郵件relay
從8.9版本開始,缺省的是不允許郵件轉發(mail relay)的。最簡單的允許郵件轉發的方法是在文件/etc/mail/relay-domains中進行設置。該文件中列出的域名內的信件都允許通過本地服務器進行郵件轉發。
為了更精確的設置,可以在sendmail.mc中添加如下幾個參數允許被用來設置郵件轉發:
· FEATURE(relay_hosts_only). 通常情況下,在文件/etc/mail/relay-domains中列出的域名的主機都允許通過本地機轉發,而該設置指示指定必須羅列出每個允許通過本機轉發郵件的主機。
· FEATURE(relay_entire_domain). 該參數指示允許所有本地域通過本機進行郵件轉發。
· FEATURE(access_db). 該參數指定利用哈希數據庫/etc/mail/access來決定是否允許某個主機通過本地進行郵件轉發。
· FEATURE(blacklist_recipients).若該參數被設置,則在決定是否允許某個主機轉發郵件時同時察看郵件發送著地址和郵件接受者地址。
· FEATURE(rbl).允許基于maps.vix.com由黑名單(Realtime Blackhole List)進行郵件拒絕,以防范垃圾郵件。
· FEATURE(accept_unqualified_senders).允許接受發送者地址不包括域名的郵件,例如user,而不是user@B.NET。
· FEATURE(accept_unresolvable_domains).通常來講,sendmail拒絕接受發送者郵件地址指定的主機通過DNS不能解析的郵件,而該參數允許接收這種郵件。
· FEATURE(relay_based_on_MX).該參數允許轉發郵件接受者地址的MX記錄指向本地的的郵件,例如,本地接收到一個發送目的地址為user@b.com的郵件,而b.com域名的MX記錄指向了本地機器,則本地機器就允許轉發該郵件。
下面幾個特性可能會有安全漏洞,一般當郵件服務器位于防火墻后時才應該使用,因為這些參數可能導致你的系統易于被垃圾郵件發送者利用。
·FEATURE(relay_local_from).該參數指定若消息自稱源于本地域,則允許轉發該郵件。
·FEATURE(promiscuous_relay).打開對所有的郵件的轉發。
|
7.設置完成后outlook發送郵件要求驗證時,出現錯誤
Jan 30 14:45:57 qiuding sendmail[13908]: o0U6jvs1013908: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:45:58 qiuding sendmail[13909]: o0U6jw4h013909: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:38 qiuding sendmail[13918]: o0U6lcCc013918: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:41 qiuding sendmail[13919]: o0U6lefW013919: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:42 qiuding sendmail[13920]: o0U6lfoF013920: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:43 qiuding sendmail[13921]: o0U6lgtZ013921: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:43 qiuding sendmail[13922]: o0U6lh53013922: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
Jan 30 14:47:44 qiuding sendmail[13923]: o0U6li7I013923: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA
大量查找資料原來是
認證進程沒有啟動 SASLAUTHD服務一定要啟動否則無法進行用戶驗證
etc/rc.d/init.d/saslauthd start
配置下載
sendmail -bd -q1h
Sendmail的命令參數的含義如下:
-b:指定Sendmail在后臺運行,并且監聽端口25的請求。
-d:指定Sendmail以Daemon方式運行(守護進程)。
-q:當Sendmail無法將郵件成功地發送到目的地時,它會將郵件保存在隊列里。該參數指定郵件在隊列里保存的時間。例子里的1h表示保留1小時。
在終端命令窗口運行以下命令來重新啟動Sendmail服務:
[root@ahpeng root]#/etc/rc.d/init.d/sendmail restart
在終端命令窗口運行以下命令來關閉Sendmail服務:
[root@ahpeng root]#/etc/rc.d/init.d/sendmail stop
我們還可以在終端命令窗口運行以下命令來檢測Sendmail服務器的運行狀態:
[root@ahpeng root]# /etc/rc.d/init.d/sendmail status
系統應該顯示:
sendmail (pid 3251) 正在運行…
/etc/mail目錄下操作
makemap hash access.db<access
killall -9 sendmail
etc/rc.d/init.d/saslauthd start
sendmail -bd -q30m