台灣大學計資中心 陳永樵 chenyc@ntu.edu.tw Mail Server建置與 管理維護 台灣大學計資中心 陳永樵 chenyc@ntu.edu.tw
Outline 電子郵件系統架構介紹 電子郵件系統建置 – sendmail 郵件系統的維護與管理
Part I 電子郵件系統架構介紹
電子郵件系統架構介紹 電子郵件概念 電子郵件傳送程序 直接利用SMTP寄信
電子郵件概念
Mail User Agent 使用者直接執行,用來讀取,撰寫郵件的程式 例如:/bin/mail, elm, outlook, netscape composer
Mail Transfer Agent 在主機之間轉送郵件訊息 由MUA將訊息交給MTA,使用者通常不需直接執行MTA SMTP (Simple Mail Transfer Protocol) Sendmail, qmail, postfix …
Mail Delivery Agent 將從MTA接到的郵件訊息放置在接收者的mailbox中 /bin/mail, /bin/sh, mail.local, procmail … 郵件可被傳遞給 A person 另一個email address A file mailbox A program Filter
Email delivery End-to-end delivery Mail gateway Based on TCP/IP end-to-end connectivity 保證每個訊息被成功遞送到接收端主機上之前,在傳送端主機上會存有備份 Mail gateway 訊息傳送會經過多個mail gateways Disadvantages Unreliability Delay Advantage interoperability
電子郵件傳輸
TCP/IP standards for email service The Format for mail messages Header and body separated by a blank line Header -- keyword : value From : <email address> To : <email address> The details of email exchange SMTP: specifies how the underlying mail delivery system passes messages across an internet from one machine to another
SMTP 每個SMTP session由一個client和一個server組成 SMTP牽涉client與server間一連串訊息交換 HELO, MAIL, RCPT, DATA, QUIT
直接利用SMTP寄信
john@hostA:~> telnet hostB 25 Trying 140.112.2.3... Connected to hostB.ntu.edu.tw. Escape character is '^]'. 220 hostB.ntu.edu.tw ESMTP Sendmail 8.9.3/8.9.3; Wed, 4 Jul 2001 15:45:58 +0 CST) helo hostA 250 hostB.edu.tw Hello john@hostA.ntuedu.tw [140.112.3.75], pleased to meet you mail from: <john@hostB.ntu.edu.tw> 250 <john@hostB.ntu.edu.tw>... Sender ok rcpt to: <john@hostC.ntu.edu.tw> 250 <john@hostC.ntu.edu.tw>... Recipient ok data 354 Enter mail, end with "." on a line by itself test . 250 UAA02587 Message accepted for delivery quit
From john@hostB. ntu. edu From john@hostB.ntu.edu.tw Wed Jul 4 15:45:58 2001 Received: from hostB.ntu.edu.tw (hostB [140.112.2.3]) by hostC.ntu.edu.tw (8.8.5/8.8.5) with ESMTP id UAA05162 for <john@hostC.ntu.edu.tw>; Wed, 4 Jul 2001 15:45:58 +0800 (CST) Received: from hostA (john@hostA.ntu.edu.tw [140.112.3.75]) by hostB.ntu.edu.tw (8.8.8/8.8.8) with SMTP id UAA02587 for <john@hostC.ntu.edu.tw>; Web, 4 Jul 2001 15:45:58 +0800 (CST) Date: Wed, 4 Jul 2001 15:45:58 +0800 (CST) From: staff <john@hostB.ntu.edu.tw> Message-Id: 199805211246.UAA02587@hostB.ntu.edu.tw test
郵件傳遞流程 hostA上的user1用MUA寫了一封信,寄給user2@hostC 這封信立刻郊遊MTA送往hostC hostA上的MTA與hostC上的MTA透過SMTP交談,轉送彼此的信件 當信件無法立刻送往hostC時,MTA將信件暫存到系統的Mail Queue等過一段時間載送 hostC上的MTA收到信件後,首先判斷這封信件的目的地是否為hostC,如果不是則MTA再往其他的host送,如果這封信件的目的地是hostC,將其交由本地MDA處理 本地MDA將信件寫入系統信箱目錄中的user2檔案 hostC上的user2用MUA讀取系統信箱,然後信件被存到使用者個人信箱中
Mail Retrieval and Mailbox Manipulation Protocols Post Office Protocol (POP3) POP3 client creates a TCP connection to a POP3 server on the mailbox computer Internet Message Access Protocol (IMAP4) User can obtain info about msg or examine header without retrieving the entire msg Partial retrieval
MIME Multipurpose Internet Mail Extensions Allow transmission of non-ASCII data through email Each MIME message includes info The type of the data The encoding used From: bill@acollege.edu To: john@example.com MIME-Version: 1.0 Content-Type: image/gif Content-Transfer-Encoding: base64 ……
郵件路由 – Mail and DNS DNS Mail eXanger (MX) record MX records can point to hosts in different domains a MX record must point to a hostname that has an A record hostA IN MX 10 hostB <- illegal IN MX 20 hostC hostB IN MX 10 hostC hostC IN A 123.45.67.8
MX to CNAME causes extra lookups MX records are nonrecursive hostA IN MX 10 hostB hostB IN MX 10 hostB IN MX 20 hostC Wildcard MX records ; domain is sub.dc.gov *.dc.gov. IN MX 10 hostB.dc.gov *.sub.dc.gov. IN MX 10 hostC.dc.gov hostA IN MX hostB hostB IN A 123.45.67.8 hostC IN A 123.45.67.9
Mail Relay hostC. IN. MX. 50. hostB. cc. ntu. edu. tw. hostC. IN. MX Mail Relay hostC IN MX 50 hostB.cc.ntu.edu.tw. hostC IN MX 100 hostD.cc.ntu.edu.tw.
區分Email流量型態 Outgoing traffic Incoming traffic Email that originate from our server Incoming traffic Email that bypass/destined to our server
Patterns of modern email traffic 從前 大多是 one-to-one email 部分是one-to-many, mailing lists Email內容主要是文字 最近 大量的one-to-many emails Email內容包含巨大的圖片和多媒體檔案
電子郵件接收系統運作圖 網際網路 SMTP-server SMTP server (1) (1b) (1c) 硬碟 POP3/IMAP server (2) 瀏覽程式 MSIE , Netscape
外送電子郵件系統運作示意圖 Internet 網際網路 SMTP server (2) 電子郵件傳送 server SMTP-server (1) MSIE, Netscape 等 瀏覽程式
Email Forwarders 將所有外送流量轉送到forwarder 減輕email伺服器的負擔 要求使用者直接設定正確的SMTP伺服器 架設考量 較快的網路連線 較快較可靠的機器
Mail 的寄送- 直接傳送模式 Internet outgoing Local SMTP Server
Mail 的寄送- 間接傳送模式 Internet 區網中心 Mail Forwarder
增加email service的可靠性 建置備份或relay伺服器 利用DNS的MX records 放置於不同的網段 放置於不同的地點 透過不同的ISP 利用DNS的MX records
Mail 的接收- 直接傳送模式 Internet incoming Local SMTP Server
Mail 的接收- 混成傳送模式 Internet 區網中心 Mail Relay
郵件系統架構的重要性 為了釐清問題所在 為了指出並解決可能的瓶頸 教育使用者向正確的負責人投訴
建置可靠的郵件系統 穩定的網路連線 穩定的DNS服務 穩定的郵件伺服器 分散且負載平衡的伺服器 獨立的outgoing forwarder 硬體/作業系統/軟體(sendmail) 分散且負載平衡的伺服器 藉由DNS round-robin機制的負載平衡 獨立的outgoing forwarder Backup servers relay servers 正確的DNS MX records設定
台大郵件伺服器架構 舊帳號 新帳號 外送伺服器:smtp.ntu, smtps.ntu 老師:ccms 師生員工:ms.cc, ms1.cc, ms2.cc 新帳號 學生(依學號):ms86.ntu, ms87.ntu, ms88.ntu, ms89.ntu, ms90.ntu 老師職員:ms.ntu 校友:alumni.ntu 外送伺服器:smtp.ntu, smtps.ntu Relay伺服器:relay1-gw.tp1rc.edu.tw
Part II 電子郵件系統建置 sendmail
Sendmail Web site: ftp site: Latest version Book: www.sendmail.org www.sendmail.net www.sendmail.com ftp site: ftp.sendmail.org Latest version Sendmail 8.11.4 Book: O’Reilly bible: sendmail
Sendmail – three important parts The Configuration file The Queue Directory The Aliases and mailing lists
Configuration files /etc/mail main configuration file sendmail.cf relay control files relay-domains (text file) access (database) alias definition file aliases (text file or database)
sendmail.cf 檔案中定義 Example: 運作需要之所有檔案與目錄的位置 許多選項,可設定sendmail的運作方式 改寫地址的規則與規則集 Example: O AliasFile=/etc/mail/aliases O QueueDirectory=/var/spool/mqueue FR–o /etc/mail/relay-domains DSsmtp.ntu.edu.tw
aliases Sample: Mandatory aliases Five forms of aliases postmaster: root MAILER-DAEMON: postmaster Five forms of aliases John_Adams: adamj admin: root, sysadmin@server staff: :inclue:/etc/mail/list/staff.list nobody: /dev/null ftphelp: |/usr/local/bin/sendhelp
Alias運作機制
relay-domains Sample: 140.112 ntu.edu.tw 140.112.228.147 reject
/etc/mail/access 在檔案中加入要擋信的來源 Update: <Source IP/Domain/User> <處理方法> 處理方法: RELAY :允許使用 REJECT :拒絕使用 DISCARD :收下後丟棄 OK :在已經被設定為REJECT的Domain中網開一面 550 <message>:將連線拒絕,並傳送<message>訊息給對方 Update: makemap hash access.db < /etc/mail/access
sendmail.cw Specify the names of hosts for which we receive email In sendmail.cf Fw/etc/mail/sendmail.cw 以台大ccms.ntu.edu.tw為例 ccms -> 必須配合/etc/resolv.conf定義本地domain ccms.ntu.edu.tw -> 此設定較有效率
Smart Relay /etc/mail/sendmail.cf DSsmtp.ntu.edu.tw
Part III 郵件系統維護與管理
Anti-Relay & Anti-SPAM 讓Mail Server除了本地所允許的轉信區域以外,不替其他人轉送信件 Anti-SPAM 當Mail Server接到某來源IP送來的信件,經過比對之後發現該IP在系統的黑名單中,不管該信件的目的地為何處,一律拒絕其連線
Mail Relay Sendmail 8.9.0以後已經改掉「無條件幫其他機器轉送信件」的特性 設定為某些domain轉信 建議sendmail 8.8.x之前的版本更新 設定為某些domain轉信 sendmail.cf中的設定 FR-o /etc/mail/relay-domains 將要代為轉信的domain寫入relay-domains檔案中 一行一個domain
防範SPAM SPAM Send Phenomenal Amounts of Mail 不請自來的垃圾郵件 浪費使用者時間 佔用Internet頻寬 耗費郵件伺服器的資源
防堵Incoming SPAM 系統層面防堵SPAM的措施 MTA上是最適合防堵SPAM的地方 Sendmail 8.9版以後提供內建的anti-spam及anti-relay規則,及功能強大的過濾功能 參考http://www.sendmail.org/antispam.html
Anti-SPAM on MTA 如何判斷哪些訊息屬於spam 如何處理被分類為spam的訊息 防堵無法解析的主機 防堵已知的spam來源 接受後丟棄該訊息 接受後退回該訊息 以發生永久錯誤退回該訊息 以發生暫時錯誤退回該訊息
利用Filter過濾spam 系統層面 使用者層面 利用anti-spam filter 遏止其他人送來spam郵件
避免outgoing SPAM 避免本地domain成為SPAM的散發來源 避免被外來者濫用 注意本地使用者的行為 控制郵件relay功能 監控使用者傳送信件的數量 防止本地使用者透過其他允許relay之郵件主機寄送郵件 在router上以acl阻擋本地使用者通往Internet上任何主機port 25的連接
Anti-SPAM reference Newsgroups Web sites Spammer list News.admin.net-abuse.* Web sites http://www.edu.tw/tanet/spam.html http://www.sendmail.org/antispam.html http://www.ecofuter.org/jmemail.html Spammer list BadMailFrom Spam list http://www.webeasy.com/w2/spam/ Network Abuse Clearninghouse http://www.abuse.net/
Sendmail log /etc/syslog.conf /var/log/maillog mail.info /var/log/maillog /var/log/maillog date host sendmail[pid]: qid: what=value… delay=, from=, to=, stat=, size= 可得知郵件伺服器的運作狀況 根據log予以統計運算,以追蹤異常使用
Sendmail統計數據 根據log進行統計 sendmail.st檔案 利用from=和size=類計每個使用者某段期間內傳送的訊息量 sendmail.cf中定義StatusFile O StatusFile=/etc/sendmail/sendmail.st 利用mailstats程式顯示其中的統計數據 利用cron功能收集每天的統計資料 必須每天將sendmail.st檔案內容清空 在crontab中設定