作者:ideal Sendmail是在Unix環境下使用最廣泛的實現郵件發送/接受的郵件傳輸代理程序。 由於Sendmail郵件服務器的特點是功能強大而復雜,因此為保證Sendmail的安全性,需要作以下一些工作。 1、設置Sendmail使用"smrsh" smrsh程序的目的是作為在mailer中為sendmail定義的"/bin/sh"的替代shell。smrsh是一種受限shell工具,它通過"/etc/smrsh"目錄來明確指定可執行文件的列表。簡而言之smrsh限制了攻擊者可以執行的程序集。當它與sendmail程序一起使用的時候,smrsh有效的將sendmail可以執行的程序的范圍限制在smrsh目錄之下。 第一步: 決定smrsh可以允許sendmail運行的命令列表。缺省情況下應當包含以下命令,但不局限於這些命令: "/bin/mail" (如果在你的系統中安裝了的話) "/usr/bin/procmail" (如果在你的系統中安裝了的話) 注意:不可在命令列表裡包括命令解釋程序,例如sh(1),csh(1),perl(1),uudecode(1)及流編輯器sed(1)。 第二步: 在"/etc/smrsh"目錄中創建允許sendmail運行的程序的符號連接。 使用以下命令允許mail程序"/bin/mail"運行: [root@deep]# cd /etc/smrsh [root@deep]# ln -s /bin/mail mail 用以下命令允許procmail程序"/usr/bin/procmail"運行: [root@deep]# cd /etc/smrsh [root@deep]# ln -s /usr/bin/procmail procmail 這將允許位於".forward"和"aliases"中的用戶采用"program"語法來運行mail及procmail程序。 第三步 配置sendmail使之使用受限shell。mailer程序在sendmail的配置文件"/etc/sendmail.cf"中僅有一行。必須修改"sendmail.cf"文件中"Mprog"定義的那一行。將"/bin/sh"替換為"/usr/sbin/smrsh"。 編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並改動下面這一行: 例如: Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u 應該被改為: Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u 現在用以下命令手工重起sendmail進程: [root@deep]# /etc/rc.d/init.d/sendmail restart 2、"/etc/aliases"文件 如果沒有加以正確和嚴格的管理的話,別名文件被用來獲取特權。例如,很多發行版本在別名文件中帶有"decode"別名。現在這種情況越來越少了。 這樣做的目的是為用戶提供一個通過mail傳輸二進制文件的方便的方式。在郵件的發送地,用戶把二進制文件用"uuencode"轉換成ASCII格式,並把結果郵遞給接收地"decode"別名。那個別名通過管道把郵件消息發送到"/usr/bin/uuencode"程序,由這個程序來完成從ASCII轉回到原始的二進制文件的工作。 刪除"decode"別名。類似的,對於所有用於執行沒有被放在smrsh目錄下的程序的別名,你都要仔細的檢查,可能它們都值得懷疑並應當刪除它們。要想使你的改變生效,需要運行: [root@deep]# /usr/bin/newaliases 編輯別名文件(vi /etc/aliases)並刪除以下各行: # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster postmaster: root # General redirections for pseudo accounts. bin: root daemon: root games: root?? 刪除這一行 ingres: root ?? 刪除這一行 nobody: root system: root ?? 刪除這一行 toor: root?? 刪除這一行 uUCp: root ?? 刪除這一行 # Well-known aliases. manager: root ?? 刪除這一行 dumper: root ?? 刪除這一行 operator: root ?? 刪除這一行 # trap decode to catch security attacks decode: root ?? 刪除這一行 # Person who should get root's mail #root: marc 最後應該運行"/usr/bin/newaliases"程序使改動生效 3、避免你的Sendmail被未授權的用戶濫用 最新版本的Sendmail (8.9.3)加入了很強的防止欺騙的特性。它們可以防止你的郵件服務器被未授權的用戶濫用。編輯你的"/etc/sendmail.cf"文件,修改一下這個配置文件,使你的郵件服務器能夠擋住欺騙郵件。 編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行: O PrivacyOptions=authwarnings 改為: O PrivacyOptions=authwarnings,noeXPn,novrfy 設置"noexpn"使sendmail禁止所有SMTP的"EXPN"命令,它也使sendmail拒絕所有SMTP的"VERB"命令。設置"novrfy"使sendmail禁止所有SMTP的"VRFY "命令。這種更改可以防止欺騙者使用"EXPN"和"VRFY"命令,而這些命令恰恰被那些不守規矩的人所濫用。 4、SMTP的問候信息 當 sendmail接受一個SMTP連接的時候,它會向那台機器發送一個問候信息,這些信息作為本台主機的標識,而且它所做的第一件事就是告訴對方它已經准備好了。 編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行: O SmtpGreetingMessage=$j Sendmail $v/$Z; $b 改為: O SmtpGreetingMessage=$j Sendmail $v/$Z; $b NO UCE C=xx L=xx 現在手工重起一下sendmail進程,使剛才所做的更改生效: [root@deep]# /etc/rc.d/init.d/sendmail restart 以上的更改將影響到Sendmail在接收一個連接時所顯示的標志信息。你應該把"`C=xx L=xx"條目中的"xx"換成你所在的國家和地區代碼。後面的更改其實不會影響任何東西。但這是"news.admin.net-abuse.email"新聞組的伙伴們推薦的合法做法。 5、限制可以審核郵件隊列內容的人員 通常情況下,任何人都可以使用"mailq"命令來查看郵件隊列的內容。為了限制可以審核郵件隊列內容的人員,只需要在"/etc/sendmail.cf"文件中指定"restrictmailq"選項即可。在這種情況下,sendmail只允許與這個隊列所在目錄的組屬主相同的用戶可以查看它的內容。這將允許權限為0700的郵件隊列目錄被完全保護起來,而我們限定的合法用戶仍然可以看到它的內容。 編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行: O PrivacyOptions=authwarnings,noexpn,novrfy 改為: O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq 現在我們更改郵件隊列目錄的權限使它被完全保護起來: [root@deep]# chmod 0700 /var/spool/mqueue 注意:我們已經在sendmail.cf中的"PrivacyOptions="行中添加了"noexpn"和"novrfy"選項,現在在這一行中我們接著添加"restrictmailq"選項。 任何一個沒有特權的用戶如果試圖查看郵件隊列的內容會收到下面的信息: [user@deep]$ /usr/bin/mailq You are not permitted to see the queue 6、限制處理郵件隊列的權限為"root" 通常,任何人都可以使用"-q"開關來處理郵件隊列,為限制只允許root處理郵件隊列,需要在"/etc/sendmail.cf"文件中指定"restrictqrun"。 編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行: O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq 改為: O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq,restrictqrun 任何一個沒有特權的用戶如果試圖處理郵件隊列的內容會收到下面的信息: [user@deep]$ /usr/sbin/sendmail -q You do not have permission to process the queue 7、在重要的sendmail文件上設置不可更改位 可以通過使用"chattr"命令而使重要的Sendmail文件不會被擅自更改,可以提高系統的安全性。具有"+i"屬性的文件不能被修改:它不能被刪除和改名,不能創建到這個文件的鏈接,不能向這個文件寫入數據。只有超級用戶才能設置和清除這個屬性。 為"sendmail.cf"文件設置不可更改位: [root@deep]# chattr +i /etc/sendmail.cf 為"sendmail.cw"文件設置不可更改位: [root@deep]# chattr +i /etc/sendmail.cw 為"sendmail.mc"文件設置不可更改位: [root@deep]# chattr +i /etc/sendmail.mc 為"null.mc"文件設置不可更改位: [root@deep]# chattr +i /etc/null.mc 為"aliases"文件設置不可更改位: [root@deep]# chattr +i /etc/aliases 為"Access"文件設置不可更改位: [root@deep]# chattr +i /etc/mail/access 8、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,而不是[email protected]。 · FEATURE(accept_unresolvable_domains).通常來講,sendmail拒絕接受發送者郵件地址指定的主機通過DNS不能解析的郵件,而該參數允許接收這種郵件。 · FEATURE(relay_based_on_MX).該參數允許轉發郵件接受者地址的MX記錄指向本地的的郵件,例如,本地接收到一個發送目的地址為[email protected]的郵件,而b.com域名的MX記錄指向了本地機器,則本地機器就允許轉發該郵件。 下面幾個特性可能會有安全漏洞,一般當郵件服務器位於防火牆後時才應該使用,因為這些參數可能導致你的系統易於被垃圾郵件發送者利用。 · FEATURE(relay_local_from). 該參數指定若消息自稱源於本地域,則允許轉發該郵件。 · FEATURE(promiscuous_relay). 打開對所有的郵件的轉發。 宏配置文件"sendmail.mc"設置成功以後,可以用下面的命令創建sendmail的配置文件: [root@deep]# cd /var/tmp/sendmail-version/cf/cf/ [root@deep]# m4 ../m4/cf.m4 /etc/sendmail.mc > /etc/sendmail.cf 注意:這裡"../m4/cf.m4"告訴m4程序的缺省配置文件路徑。