引用 | 編輯
masa
2005-02-27 13:06 |
樓主
|
||
x0
有關想要架設郵件伺服器站的人請參考這篇,有許多安全問題可以參考------------------------------------------------------------------------------------------------------------- 建立安全的郵件伺服器 張貼者: Banana 摘要 網路的普及,使得許多傳統的行為出現了典範轉移,一個明顯的例子就是電子郵件。 人們透過網路,可以輕易的寄送信件,而無需再經由郵差遞送。電子郵件的應用非常廣泛 ,舉凡報紙、賀卡等產業,都受到直接影響。和傳統信件比起來,電子郵件有以下優點: .免費:免貼郵票,免費使用,只需支付些微的電費即可。 .快速:寄信人在這一分鐘寄信,收信人可在下一分鐘收信。 .方便:免用紙筆,免貼郵票,免跑郵局。 但是,「水能載舟,亦能覆舟。」電子郵件的優點反而成為不肖駭客的利器。若郵件 伺服器之安全性不足,很有可能被用來當做廣告信件的跳板,或者郵件可能遭受竊取。尤 其是垃圾信件(Spam Mails)的問題,幾乎人人收信後第一件事就是砍垃圾信,若一不小 心,還有砍到重要信件的危險。 為防止這種情況發生,本文提供一些郵件伺服器的安全防範機制,以期郵件伺服器能 避免被作為垃圾信件的轉送跳板,並讓電子郵件使用者能享有更清新安全的電子郵件使用 環境。 一、郵件伺服器可能遭遇的安全威脅 一般郵件伺服器常提供以下幾種服務:SMTP、POP3、WebMail。 ◎ SMTP 全名為「Simple Mail Transfer Protocol」,中文稱為「簡單郵件傳輸協定」。 SMTP 最大的缺點為:太過信任使用者。這是因為 SMTP 發展之初僅為學術使用,它相信所 有使用者的身分均為真實的,因此不肖商人可以很容易地捏造一個不實身分,透過 SMTP 伺服器來寄送廣告信件。雖然 SMTP 有先天上的缺陷,但仍有許多人是針對 SMTP 提出改 良方案,例如在 SMTP 協定中加入使用者身份認證機制,並且在 SSL/TLS 上執行 SMTP, 以防止使用者之帳號密碼洩漏。本文將在第二節簡單介紹建立認證 SSL/TLS SMTP 伺服器 的方法。 ◎ POP3 全名為 Post Office Protocol, version3」,中文稱為「郵局通訊協定」。POP3 是用來接收電子郵件的通訊協定,它會把使用者位於郵件伺服器上的信件通通下載至使用者 的個人電腦中,此外,亦可選擇是否將郵件保留於伺服器上。POP3 在過去是以明碼傳遞使 用者的帳號和認證密碼,因此若郵件伺服器遭到竊聽,則使用者的帳號和密碼即可能洩漏, 或者於郵件傳遞過程中竊取信件。因此,有人提出了基於 SSL 的 POP3 協定,稱為 POP3S 。本文將於第三節簡單介紹建立 POP3S 伺服器的方法。 ◎ WebMail 亦是郵件伺服器經常提供的服務,它可讓使用者於個人電腦的瀏覽器上收取並 閱讀信件,而無需下載信件到個人電腦中。通常,郵件伺服器的 WebMail 必須配合網頁伺 服器運作,因此網頁伺服器的安全性與 WebMail 有直接的關聯性。要提供安全的 WebMail ,最簡單的方式就是一併提供支援 SSL 加密的網頁伺服器。本文將於第四節簡單介紹一些 安全小技巧,以Open WebMail為例。 鑑於大部分的郵件伺服器均以 UNIX 為架設平台,因此本文選用 FreeBSD 4.x 作業系 統作為介紹的基本架構,針對以上三項服務提供一份安全的架構方案(Postfix + IMAP-UW + Open WebMail)。 二、建立安全的SMTP伺服器 在這一節中,我們將介紹如何以 Postfix 來建立安全的 SMTP 伺服器。何以選用 Postfix 而不使用 Sendmail 呢?這是由於 Sendmail 存在許多安全性問題,並且 Sendmail.cf 複 雜難懂。Wietse Venema 先生有鑑於此,就設計了一個足以取代 Sendmail 的軟體,因此 Postfix 就此而生。Postfix 無論在安全性、穩定性、效能、設定等方面均相當出色,並且 相容於 Sendmail,滿足原本 Sendmail 用戶的使用習慣。 一個安全的 SMTP 伺服器應當提供兩個功能:身分認證機制和資料加密傳輸機制。因為 本文是以 FreeBSD 為架構平台,因此下列安裝範例是以 FreeBSD 的通訊埠來安裝。 # Step 1. 停止 Sendmail 運作 shell> killall sendmail # Step 2. 由 FreeBSD 的通訊埠安裝 Postfix shell > cd /usr/port/mail/postfix shell > make install clean # 在出現的第一個選單中選擇 SASL 和 TLS # 在出現的第二個選單中選擇 PWCHECK # 之後的程序中會出現兩個選項,一個是問「是否將 postfix 加入 mail 群組?」,另一 個是問「是否在 /etc/mail/mailer.conf 中啟動 Postfix?」,請都選 y # 安裝過程中,會出現指示使用者進行下面 Step 3 和 Step 4 動作的訊息 # Step 3. 修改 /etc/rc.conf,加入以下設定,以讓 Postfix 取代 Sendmail: sendmail_enable="YES" sendmail_flags="-bd" sendmail_outbound_enable="NO" sendmail_submit_enable="NO" sendmail_msp_queue_enable="NO" # Step 4. 建立 /etc/periodic.conf 檔案,內容為: daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" # Step 5. 編輯 /usr/local/etc/postfix/main.cf 檔案,設定伺服器環境,通常需設定以 下四項: myhostname = your.host.name mydomain = your.domain myorigin = $myhostname alias_maps = hash:/usr/local/etc/postfix/aliases # Step 6. 建立 alias 資料庫 shell> postalias /usr/local/etc/postfix/aliases # Step 7. 設定 SASL 認證 # 修改/etc/group,將postfix加入cyrus群組: cyrus:*:60:postfix # 建立/usr/local/lib/sasl/smtpd.conf,內容為: pwcheck_method: pwcheck # 確定/usr/local/etc/rc.d/cyrus_pwcheck.sh存在下列一行: cyrus_pwcheck_enable="yes" # 啟動 cyrus_pwcheck: shell> /usr/local/etc/rc.d/cyrus_pwcheck start # 編輯/usr/local/etc/postfix/main.cf,加入: smtpd_recipient_restrictions = permit_sasl_autheNticated,check_relay_domains, permit_mynetworks smtpd_client_restrictions = permit_sasl_authenticated smtpd_sasl_auth_enable= yes smtpd_sasl_security_options= noanonymous smtpd_sasl_local_domain = $myhostname # Step 8. 加入SSL/TLS支援,編輯/usr/local/etc/postfix/main.cf,加入: smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes # 以下三行設定伺服器認證金鑰的位置,若無鑰匙,可自行以OpenSSL產生 # 產生鑰匙的方法請自行參閱相關文件,在此不多行贅述 smtpd_tls_key_file = /usr/local/etc/postfix/CA/server.pem smtpd_tls_cert_file = /usr/local/etc/postfix/CA/server.pem smtpd_tls_CAfile = /usr/local/etc/postfix/CA/server.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes mtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom # 9. 啟動Postfix shell> /usr/local/sbin/postfix start 至此,我們已啟動了一個支援身分認證及 SSL/TLS 加密傳輸的 SMTP 伺服器,此時 telnet 到 SMTP 所使用的 port 25 作測試,輸入 ehlo localhost 後將看到下面二行: 250-STARTTLS 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 有了此身分認證功能後,SMTP 伺服器將不會再轉送未經認證之使用者的信件,而只信 任通過認證的真正合法使用者,只要在 Outlook 帳號設定中的進階標籤裡,把「我的外寄 伺服器(SMTP)需要驗證」打勾,就可以使用身分認證機制。唯一的隱憂是合法使用者的 密碼外洩,並且被駭客用來從事不法行為。此時可在配合 SSL/TLS 的加密機制,讓駭客無 法竊聽使用者之帳號密碼,進而防止駭客盜用合法帳號。支援 SSL/TLS 加密的郵件伺服器 必須向其使用者宣導使用 SSL/TLS 來做寄信的動作,只要在 Outlook 帳號設定中的進階標 籤裡,把「外寄伺服器(SMTP),此伺服器需要加密連線(SSL)」打勾,就可以採用 TLS 加密連線了。至於其他的郵件客戶端軟體(如 Mozilla Mail),請參閱其文件,將 SMTP 設定為 TLS/SSL 加密連線。 三、建立安全的POP3伺服器 傳統的 POP3 協定並不提供 SSL 加密功能,因此隨後有人提出了 POP3S 協定來加強 POP3 的安全性。POP3S 為加上 SSL 支援的 POP3,預設使用的是 port 995 作為其加密傳 輸的預設通訊埠。 目前支援 POP3S 的 POP3 軟體仍然不多,在此介紹其中之一:IMAP-UW。IMAP-UW 是由 西雅圖華盛頓大學(University of Washington)所發展,提供 IMAP/POP3 協定,更重要 的是 IMAP-UW 亦提供了 IMAPS/POP3S 等 SSL 加密協定。以下簡單列出其安裝方法,一樣 是基於 FreeBSD 平台,並且使用通訊埠安裝: # Step 1. 安裝 IMAP-UW shell> cd /usr/ports/mail/imap-uw shell> make WITH_SSL=YES install clean # Step 2. 建立認證金鑰 shell> make cert # Step 3. 設定 /etc/inetd.conf,加入: pop3 stream tcp nowait root /usr/local/libexec/ipop3d ipop3d imap4 stream tcp nowait root /usr/local/libexec/imapd imapd pop3s stream tcp nowait root /usr/local/libexec/ipop3d ipop3d imaps stream tcp nowait root /usr/local/libexec/imapd imapd # Step 4. 設定 /etc/hosts.allow,加入: imapd : ALL : allow ipop3d : ALL : allow # Step 5. 設定 /etc/pam.conf,加入: imap auth required pam_unix.so imap account required pam_unix.so try_first_pass imap session required pam_deny.so pop3 auth required pam_unix.so pop3 account required pam_unix.so try_first_pass pop3 session required pam_deny.so # Step 6. 啟動服務 shell> killall -HUP inetd 完成上面步驟後,郵件伺服器的使用者即可享受以 SSL 加密傳輸的 POP3S 協定。郵件 伺服器必須宣導使用者使用該項服務,只要在Outlook帳號設定中的進階標籤裡,把「內送 伺服器(POP3),此伺服器需要加密連線(SSL)」打勾,就可以採用 SSL 加密連線了。至 於其他的郵件客戶端軟體(如Mozilla Mail),請參閱其文件,將 POP3 設定為 TLS/SSL 加密連線。 四、建立安全的WebMail 因為 WebMail 必須和網頁伺服器共同運作,因此 WebMail 要安全,就必須透過一個支 援 SSL 加密傳輸的網頁伺服器。 前面提到,我們使用 Open WebMail 來作為範例,它是一個以 CGI 寫成的 WebMail, 安裝完成後,其首頁位於 http://your.host.name/cgi-bin/openwebmail/openwebmail.pl 但直接連接該頁的話,使用者不一定會走 SSL 協定(HTTPS),透過下面這個小技巧,可以 讓使用者更加安全。 郵件伺服器不一定要以該連結為 WebMail 進入頁面,而可以對外公佈說,本 WebMail 的進入頁面位於 http://your.host.name/webmail/ 。此時,只要在網頁伺服器根目錄下建 立一個名為 webmail 的子目錄,並在其中放置一個名為 index.html 檔案(或其他網頁伺 服器的預設首頁檔名),其內容如下: <meta http-equiv="refresh" content="0;URL=https://your.host.name/cgi-bin/openwebmail/openwebmail.pl"> 上面的 HTML 語法所進行的動作是將使用者以 HTTPS 的協定導到真正的 Open WebMail 進入頁面。如此一來,大部分的使用者將會被自動導到支援 SSL 加密協定的頁面,並且享用 安全的 WebMail 使用環境。此外,這樣的網址也較原來那一大串網址好記。 參考資料 [1] [教學]Postfix+Cryus-SASL2+SSL/TLS+Courier-IMAP 實作, http://www.backup.idv.tw/phpBB2/viewtopic.php?t=683 [2] [教學]FreeBSD - Postfix + SMTP AUTH, http://www.backup.idv.tw/phpBB2/viewtopic.php?t=628 [3] 簡易 Mail Server 架設 -- Postfix 設定, http://linux.vbird.org/linux_server/0390postfix.php [4] 如何把 Sendmail 換成 Postfix, http://linux.tnc.edu.tw/techdoc/postfix-howto.htm [5] 使用FreeBSD建立安全的郵件系統-imap/pop篇 http://www.ascc.net/nl/90/1714/04.txt [6] HTML完全程式設計手冊 http://db.books.com.tw/exep/prod/booksfile.php?item=0010007995 x0
|