動作

UbuntuMail

出自 Itsmw

簡介

文件概說

本文要介紹如何在 Ubuntu Linux 上建置完整的 Mail 伺服器,含 SMTP 、POP3 及 IMAP 以及各自的 SSL/TLS 加密協定方案。本文的作法與筆者實體書本所描述的略有差異,而且在此不討論 Mail Server 之運作架構,若要詳細說明的讀者還是以書本為主。

  • 文章限制
  1. 本文是以 Ubuntu 12.04 為範例,其他版本的做法可能會略有差異,若您仍堅持使用 ubuntu 11.04 請見最下方的補充說明。
  2. 本文是以 Postfix + Dovecot 為主架構,與筆者書本 Postfix + saslauthd + Dovecot 之作法有所差異。



環境要求

  • DNS 設定(作法可參考筆者拙著)
  1. 請先架妥 DNS 伺服器,
  2. 要有 mail.domain.name 及 IN A 記錄
  3. 要有 domain.name 之 MX 記錄
  4. 建議設妥 mail.domain.name 之 SPF TXT 記錄



套件說明

  • postfix: SMTP Server
  • dovecot-pop3d:POP3 / POP3s Server
  • dovecot-imapd:IMAP / IMAPs Server
  • dovecot-postfix
    結合 postfix 與 dovecot ,也使 postfix 建立起加密通道。



安裝設定

郵件伺服套件安裝

  • 切換成 root 身份
    user@mail:~$ sudo -i
  • 安裝 SMTP 及 POP3/IMAP 相關套件
    root@mail:~# apt-get install postfix dovecot-pop3d dovecot-imapd dovecot-postfix
    • General type of mail configuration: 【Internet Site】
    • System mail name: yhlab.myip.tw (輸入您的 domain name)


  • 經過以上步驟,已完成 smtp 及 pop3/imap 含各自之加密通道安裝,不須再為 ssl/tsl 做任何其他額外之設定。



郵件過濾安裝與設定

筆者建議 Postfix 郵件伺服器可以搭配 Amavis+Clamav+SpamAssassin 來處理日益嚴重的垃圾郵件問題,效果很好,依筆者主機而言,經過一定時間的學習,垃圾量每日平均不會超過 3 封。各套件角色解釋如下:

  • Amavis 與 postfix 封包交換:從 postfix 取得郵件封包,以方便進一步交給其他軟體處理
  • Clamav:接受 amavis 命令掃毒
  • SpamAssassin:以貝氏學習法(Bayesian Learning),強化郵件分類學習。

全部完成安裝後,「郵件封包」在主機內的運作方式如下:

postfix 25 -> Amavis+Clamav+SpamAssassin 10024 -> postfix 10025 -> 寄出 .or. 送至/var/mail


Ubuntu 11.04 - 12.04 安裝指令

  • 更新清單
    root@mail:~# apt-get update
  • 安裝相關套件
    root@mail:~# apt-get install amavisd-new spamassassin clamav clamav-daemon clamav-docs libclamunrar6 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop lha arj unrar zoo unzip cabextract




Amavis 設定

  • root@mail:~# vi /etc/amavis/conf.d/15-content_filter_mode (取消兩個 bypass 註解,如下所示)
use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # insure a defined return


  • root@mail:~# vi /etc/amavis/conf.d/20-debian_defaults (修改規則列, 紅字為建議修改項目)

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 3.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 10; # 認定可以刪除的垃圾信件
$sa_dsn_cutoff_level = 12; # spam level beyond which a DSN is not sent
......
$final_virus_destiny      = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny       = D_PASS; # 如果評分超過 sa_kill_level_deflt, 暫時通過以免誤判,但經過一段時間的手動學習並穩定後,要改成 discard
$final_bad_header_destiny = D_DISCARD; # False-positive prone (for spam)


  • root@mail:~# adduser clamav amavis
  • root@mail:~# adduser amavis clamav




spamassassin 設定

  • root@mail:~# vi /etc/default/spamassassin (把下面所列的兩個參數改成 1)
ENABLED=1
CRON=1
  • root@mail:~# service spamassassin restart
  • root@mail:~# service amavis restart



Postfix 的 main.cf 及 master.cf 修改

  • root@mail:~# vi /etc/postfix/main.cf (在檔尾新增下面兩行)
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings


  • root@mail:~# vi /etc/postfix/master.cf(在檔尾新增下面這幾行;注意 ubuntu 11.04 與 12.04 參數不同,此處是 12.04 的範例)


amavis      unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks


  • root@mail:~# service postfix restart


  • root@dns:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address         Foreign Address        State       PID/Program name 
tcp        0      0 127.0.0.1:10024       0.0.0.0:*              LISTEN     1748/amavisd (maste
tcp        0      0 127.0.0.1:10025       0.0.0.0:*              LISTEN     839/master 
tcp        0      0 127.0.0.1:3306        0.0.0.0:*              LISTEN     4400/mysqld 
tcp        0      0 0.0.0.0:110           0.0.0.0:*              LISTEN     653/xinetd   
tcp        0      0 220.130.230.76:53     0.0.0.0:*              LISTEN     30549/named 
tcp        0      0 127.0.0.1:53          0.0.0.0:*              LISTEN     30549/named
tcp        0      0 0.0.0.0:21            0.0.0.0:*              LISTEN     4579/vsftpd 
tcp        0      0 0.0.0.0:22            0.0.0.0:*              LISTEN     4561/sshd 
tcp        0      0 0.0.0.0:25            0.0.0.0:*              LISTEN     839/master 
tcp        0      0 127.0.0.1:953         0.0.0.0:*              LISTEN     30549/named 
tcp        0      0 0.0.0.0:1723          0.0.0.0:*              LISTEN     20233/pptpd         
tcp6       0      0 :::80                 :::*                   LISTEN     29064/apache2
tcp6       0      0 :::22                 :::*                   LISTEN     4561/sshd     
tcp6       0      0 ::1:953               :::*                   LISTEN     30549/named
tcp6       0      0 :::443                :::*                   LISTEN     29064/apache2



Postfix 設定檔重要參數簡介

  • postfix 主設定檔
    • /etc/postfix/main.cf
    • /etc/postfix/master.cf
    • 若沒特別指定,以下所述之設定值專指 main.cf


  • myhostname = mail.yhlab.myip.tw
    檢查 myhostname,若安裝主機時設定主機名為「dns.yhlab.myip.tw」,在此修改成 mail 比較好


  • relayhost =
    若有硬體式郵件過濾器,要把寄出的信,轉送給它過濾,要在 relayhost 上設定該機之 IP 位址,預設保持空白就好。


  • 允許 relay 信件之相關設定
  1. mynetwork =127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    依 IP 範圍判斷,預設只能從本機寄出。可以額外加上學校的網段,允許此段的 IP 的 Mail Client (outlook/thunderbird...)皆可寄信
    mynetwork = 203.68.102.0/24 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  2. #myorigin = /etc/mailname
    依本機之網域名稱來判斷是否可以寄信,而不管寄信的 IP 位址。預設是關閉,若要打開本選項,一定要防密碼字典攻擊並使用 SSL 安全登入才可。預設已經把安裝時所輸入的「System mail name 」加入 /etc/mailname 之內,若有其他允許 relay 的 domain name ,也可以在此新增。


  • mydestination =
    這參數是用來註明可收信的 hostname,例如:收件者是 user@yhlab.myip.tw 的話,那麼就要在此加上「yhlab.myip.tw 」
    • 預設可能是
      mydestination = yhlab.myip.tw, localhost.myip.tw, localhost
    • 建議改成
      mydestination = yhlab.myip.tw, mail.yhlab.myip.tw 就好


  • home_mailbox = Maildir/
    本參數的意思是:「SMTP Server 收信之後要放那兒?」,建議將其註解掉,使其恢復預設值:「/var/mail」底下
    #home_mailbox = Maildir/




Ubuntu 12.04 Dovecot 設定檔架構與修改

Dovocot 自 11.10 起改用 V2.x 版,因此設定結構有大幅度的變化,自然 12.04 也是沿用此一架構。不過使用者在 ubuntu 12.04 下不必太過擔心,一般而言,只要用 apt-get 安裝指令安裝完,若無特定需求,直接就可啟用。

Dovecot v2 設定架構

以下參數之預設值是以 Linux 系統帳號為認證基礎,架構如下:

.
├── auth.d
├── conf.d
│   ├── 10-auth.conf		#認證方式:
│   ├ 	disable_plaintext_auth	#是否允許在沒 SSL/TLS 下以明碼認證  
│   ├ 	auth_mechanisms		#認證機制,塔配上面參數使用
│   ├── 10-director.conf
│   ├── 10-logging.conf
│   ├── 10-mail.conf		#mail_location
│   ├── 10-master.conf
│   ├── 10-ssl.conf		#預設已有加密通道,但可設 ssl = no 關閉
│   ├── 15-lda.conf
│   ├── 20-imap.conf
│   ├── 20-pop3.conf		#為相容 outlook 之 pop3_client_workarounds 設定區
│   ├── 90-acl.conf
│   ├── 90-plugin.conf
│   ├── 90-quota.conf		#空間限制的 Plugin
│   ├── 90-sieve.conf		#過濾信的 Plugin
│   ├── auth-deny.conf.ext
│   ├── auth-master.conf.ext
│   ├── auth-passwdfile.conf.ext
│   ├── auth-static.conf.ext
│   ├── auth-system.conf.ext	#以 Linux 本機帳號認證之設定
│   └── auth-vpopmail.conf.ext
├── dovecot.conf			#主控檔, listen on ipv4 or ipv6 參數在此
├── dovecot-db.conf.ext
├── dovecot-dict-sql.conf.ext
├── dovecot-sql.conf.ext
└── README




設定注意事項

  • 主控檔:/etc/dovecot/dovecot.conf
    • 這裡已變成引入各設定檔的主控區
    • 不必再針對 protocols 設定參數,它已改成全自動偵測,有了 ssl = yes ,自然會有 993/995;移除 dovecot-imapd 自然就不會有 TCP 143 埠的監聽,總言之,一切皆自動化了。因此不必再加「protocols = pop3 pop3s imap imaps」,這個參數了。
    • 在 12.04 預設會同時在 IPv4 及 IPv6 監聽,若只想在 IPv4 提供服務,要打開本參數,要改成:
      listen = *
  • /etc/dovecot/conf.d/10-auth.conf 設定認證方式
    • 預設會引入 /etc/dovecot/conf.d/auth-system.conf.ext 以主機上的帳密做認證


  • 依需求修改 /etc/dovecot/conf.d/01-mail-stack-delivery.conf 

# SMTP Server 的收信位置,建議改到 /var/mail 底下
# mail_location = maildir:~/Maildir
mail_location = mbox:~/mail:INBOX=/var/mail/%u

# 若因為 gmail 的 pop3 取外信,加密不接受自我簽證,要讓 dovecot 啟用 110/143 以明碼的方式登入
disable_plaintext_auth = NO




修改 /var/mail 之資料夾權限

在 postfix + dovecot + dovecot-postfix 的安裝方式下,要特別去修改 /var/mail 的資料夾權限為 1777 否則,會寫不進入。

  1. root@mail:~# cd /var
  2. root@mail:/var# chmod 1777 mail



Ubuntu 11.04 補充說明

 在 Ubuntu 11.04 下安裝郵件系統,只要注意下面這兩個差異點。



Ubuntu 11.04 下的 /etc/postfix/master.cf 請依下面設定

amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1



Ubuntu 11.04 下的 Dovecot 設定簡介

  • 在 Ubuntu 11.04 仍是以 /etc/dovecot/dovecot.conf 為主要設定檔,所有要改的參數均在此修改即可
.
├── auth.d
│   └── 01-mail-stack-delivery.auth
├── conf.d
│   └── 01-mail-stack-delivery.conf
├── dovecot.conf
├── dovecot.conf.bak
├── dovecot-db-example.conf
├── dovecot-dict-sql-example.conf
├── dovecot-ldap.conf
└── dovecot-sql.conf


參數解說,藍色字是要修改的部分

  • dovecot.conf 是主要設定區,大多數參數寫在其內
    • protocols = imap pop3 imaps pop3s
      不要再改這裡了,改由 conf.d/01-mail-stack-delivery.conf 控制
    • #disable_plaintext_auth = yes
      不要再改這裡了,改由 conf.d/01-mail-stack-delivery.conf 控制
    • #listen = *
      11.04 預設只在 IPv4 LISTEN, 若想同時在 IPv4 及 IPv6 下服務,打開本參數,並修改參數成
      listen = *, [::]
    • mail_privileged_group = mail
      若要使用 /var/mail 為 SMTP 收件時的儲存區,那麼打開此參數
    • mechanisms = plain
    • passdb pam { }
    • userdb passwd { }


  • conf.d/01-mail-stack-delivery.conf 這個設定檔已補足了大多數的額外參數
    • protocols = imap pop3 imaps pop3s managesieve
    • #disable_plaintext_auth = yes 這裡是指,若沒 ssl/tsl 時,是否關閉明碼認證,不關閉的話就是允許,因此建議改成
      disable_plaintext_auth = no
    • ssl = yes
    • mail_location = maildir:~/Maildir
      SMTP Server 的收信位置,建議改到 /var/mail 底下
      mail_location = mbox:~/mail:INBOX=/var/mail/%u
    • auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
    • pop3_client_workarounds = outlook-no-nuls oe-ns-eoh (使 outlook 可以相容)






各套件的啟動管理

為建立一個具過濾功能的郵件伺服器,本文共安裝了 postfix, amavis, clamav, spamassassin 及 dovecot 共四個 Server 套件,它們在安裝完畢時,預設會伴隨開機而啟動。若想變更開機是否啟動,若臨時要中止執行,請見本章分解。請先瀏覽本站「Ubuntu 服務啟動管理」一文,再來繼續了解上述各套件啟動管理的具體做法。




手動啟動關閉

  • 語法:「service 服務名 start|stop」,例:
    • service postfix start → 啟動 postfix 服務
    • service postfix stop → 關閉 postfix 服務
  • 其他服務皆依此類推,只是 clamav 的服務名叫「 clamav-daemon 」要注意一下。



伴隨開機而啟動服務

  • 請先確定 dialog , rcconf 套件是否安裝完畢
  • 除了 dovecot 是採用 upstart 的方式,必須直接修改 /etc/init/dovecot.conf 來做控制外,其他都可以用 rcconf 來選擇切換。



防止密碼字典攻擊 Fail2Ban 設定

 請參考本站「猜密碼攻擊Fail2Ban一文的說明介紹,阻擋網路惡意程式對 postfix 與 dovecot 密碼猜測工作。



本文小檔案

題名: Title::Ubuntu Mail Server
作者: Creator::itsmw作者群
主題/關鍵詞: Subject::Mail Server, SMTP, postfix, POP3, IMAP, dovecot
簡述: Description::在 Ubuntu 上建置 Mail 伺服器
出版者: Publisher::MyIP itsmw 計畫
其他參與者: Contributor::itsmw作者群
日期: Date::2011-11-2
文件類型: Type::08伺服器軟體
資料格式: Format::text/html
文件識別代號: Identifier::http://myip.tw/itsmw/index.php?title=UbuntuMail
來源: Source::http://myip.tw/itsmw/
語言: Language::zh-TW
相關資源: Relation::http://myip.tw/itsmw/
文件涵蓋範圍: Coverage::Linux平台
版權規範: Rights::GNU Free Documentation License 1.2