閱讀756 返回首頁    go 京東網上商城


如何在 Ubuntu 環境下搭建郵件服務器(三)

在本係列的最後,我們將詳細介紹如何在 Dovecot 和 Postfix 中設置虛擬用戶和郵箱。

歡迎回來,熱心的 Linux 係統管理員們! 在本係列的第一部分第二部分中,我們學習了如何將 Postfix 和 Dovecot 組合在一起,搭建一個不錯的 IMAP 和 POP3 郵件服務器。 現在我們將學習設置虛擬用戶,以便我們可以管理所有 Dovecot 中的用戶。

抱歉,還不能配置 SSL

我知道我答應過教你們如何設置一個受 SSL 保護的服務器。 不幸的是,我低估了這個話題的範圍。 所以,我會下個月再寫一個全麵的教程。

今天,在本係列的最後一部分中,我們將詳細介紹如何在 Dovecot 和 Postfix 中設置虛擬用戶和郵箱。 在你看來這是有點奇怪,所以我盡量讓下麵的例子簡單點。我們將使用純文本文件和純文本來進行身份驗證。 你也可以選擇使用數據庫後端和較強的加密認證形式,具體請參閱文末鏈接了解有關這些的更多信息。

虛擬用戶

我們希望郵件服務器上用的是虛擬用戶而不是 Linux 係統用戶。使用 Linux 係統用戶不能擴展,並且它們會暴露係統登錄賬號,給你的服務器帶來不必要的風險。 設置虛擬用戶需要在 Postfix 和 Dovecot 中編輯配置文件。我們將從 Postfix 開始。首先,我們將從一個幹淨、簡化的 /etc /postfix/main.cf 開始。移動你原始的 main.cf 到別處做個備份,創建一個新的幹淨的文件,內容如下:


  1. compatibility_level=2
  2. smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU)
  3. biff = no
  4. append_dot_mydomain = no
  5. myhostname = localhost
  6. alias_maps = hash:/etc/aliases
  7. alias_database = hash:/etc/aliases
  8. myorigin = $myhostname
  9. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
  10. mailbox_size_limit = 0
  11. recipient_delimiter = +
  12. inet_interfaces = all
  13. virtual_mailbox_domains = /etc/postfix/vhosts.txt
  14. virtual_mailbox_base = /home/vmail
  15. virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt
  16. virtual_minimum_uid = 1000
  17. virtual_uid_maps = static:5000
  18. virtual_gid_maps = static:5000
  19. virtual_transport = lmtp:unix:private/dovecot-lmtp0

你可以直接拷貝這份文件,除了 mynetworks 參數的設置 192.168.0.0/24,它應該是你的本地子網掩碼。

接下來,創建用戶和組 vmail 來擁有你的虛擬郵箱。虛擬郵箱保存在  vmail 的家目錄下。


  1. $ sudo groupadd -g 5000 vmail
  2. $ sudo useradd -m -u 5000 -g 5000 -s /bin/bash vmail

接下來重新加載 Postfix 配置:


  1. $ sudo postfix reload
  2. [sudo] password for carla:
  3. postfix/postfix-script: refreshing the Postfix mail system

Dovecot 虛擬用戶

我們會使用 Dovecot 的 lmtp 協議來連接到 Postfix。你可以這樣安裝:


  1. $ sudo apt-get install dovecot-lmtpd

main.cf 的最後一行涉及到 lmtp。複製這個 /etc/dovecot/dovecot.conf 示例文件來替換已存在的文件。再說一次,我們隻使用這一個文件,而不是 /etc/dovecot/conf.d 內的所有文件。


  1. protocols = imap pop3 lmtp
  2. log_path = /var/log/dovecot.log
  3. info_log_path = /var/log/dovecot-info.log
  4. ssl = no
  5. disable_plaintext_auth = no
  6. mail_location = maildir:~/.Mail
  7. pop3_uidl_format = %g
  8. auth_verbose = yes
  9. auth_mechanisms = plain
  10. passdb {
  11. driver = passwd-file
  12. args = /etc/dovecot/passwd
  13. }
  14. userdb {
  15. driver = static
  16. args = uid=vmail gid=vmail home=/home/vmail/studio/%u
  17. }
  18. service lmtp {
  19. unix_listener /var/spool/postfix/private/dovecot-lmtp {
  20. group = postfix
  21. mode = 0600
  22. user = postfix
  23. }
  24. }
  25. protocol lmtp {
  26. postmaster_address = postmaster@studio
  27. }
  28. service lmtp {
  29. user = vmail
  30. }

最後,你可以創建一個含有用戶和密碼的文件 /etc/dovecot/passwd。對於純文本驗證,我們隻需要用戶的完整郵箱地址和密碼:


  1. alrac@studio:{PLAIN}password
  2. layla@studio:{PLAIN}password
  3. fred@studio:{PLAIN}password
  4. molly@studio:{PLAIN}password
  5. benny@studio:{PLAIN}password

Dovecot 虛擬用戶獨立於 Postfix 虛擬用戶,因此你需要管理 Dovecot 中的用戶。保存所有的設置並重啟 Postfix 和 Dovecot:


  1. $ sudo service postfix restart
  2. $ sudo service dovecot restart

現在讓我們使用老朋友 telnet 來看下 Dovecot 是否設置正確。


  1. $ telnet studio 110
  2. Trying 127.0.1.1...
  3. Connected to studio.
  4. Escape character is '^]'.
  5. +OK Dovecot ready.
  6. user molly@studio
  7. +OK
  8. pass password
  9. +OK Logged in.
  10. quit
  11. +OK Logging out.
  12. Connection closed by foreign host.

現在一切都好!讓我們用 mail 命令,發送測試消息給我們的用戶。確保使用用戶的完整電子郵箱地址而不隻是用戶名。


  1. $ mail benny@studio
  2. Subject: hello and welcome!
  3. Please enjoy your new mail account!
  4. .

最後一行的英文句點表示發送消息。讓我們看下它是否到達了正確的郵箱。


  1. $ sudo ls -al /home/vmail/studio/benny@studio/.Mail/new
  2. total 16
  3. drwx------ 2 vmail vmail 4096 Dec 14 12:39 .
  4. drwx------ 5 vmail vmail 4096 Dec 14 12:39 ..
  5. -rw------- 1 vmail vmail 525 Dec 14 12:39 1481747995.M696591P5790.studio,S=525,W=540

找到了。這是一封我們可以閱讀的純文本文件:


  1. $ less 1481747995.M696591P5790.studio,S=525,W=540
  2. Return-Path: <carla@localhost>
  3. Delivered-To: benny@studio
  4. Received: from localhost
  5. by studio (Dovecot) with LMTP id V01ZKRuuUVieFgAABiesew
  6. for <benny@studio>; Wed, 14 Dec 2016 12:39:55 -0800
  7. Received: by localhost (Postfix, from userid 1000)
  8. id 9FD9CA1F58; Wed, 14 Dec 2016 12:39:55 -0800 (PST)
  9. Date: Wed, 14 Dec 2016 12:39:55 -0800
  10. To: benny@studio
  11. Subject: hello and welcome!
  12. User-Agent: s-nail v14.8.6
  13. Message-Id: <20161214203955.9FD9CA1F58@localhost>
  14. From: carla@localhost (carla)
  15. Please enjoy your new mail account!

你還可以使用 telnet 進行測試,如本係列前麵部分所述,並在你最喜歡的郵件客戶端中設置帳戶,如 Thunderbird,Claws-Mail 或 KMail。

故障排查

當郵件工作不正常時,請檢查日誌文件(請參閱配置示例),然後運行 journalctl -xe。 這時會提供定位輸入錯誤、未安裝包和可以 Google 的短語等所有需要的信息。

原文發布時間為:2017-01-04

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-31 11:03:29

  上一篇:go  在 Ubuntu 中用 UFW 配置防火牆
  下一篇:go  在 Ubuntu 中使用 NTP 進行時間同步