如何在 Ubuntu 環(huán)境下搭建郵件服務(wù)器(三)
在本系列的***,我們將詳細(xì)介紹如何在 Dovecot 和 Postfix 中設(shè)置虛擬用戶和郵箱。
歡迎回來,熱心的 Linux 系統(tǒng)管理員們! 在本系列的***部分和第二部分中,我們學(xué)習(xí)了如何將 Postfix 和 Dovecot 組合在一起,搭建一個(gè)不錯(cuò)的 IMAP 和 POP3 郵件服務(wù)器。 現(xiàn)在我們將學(xué)習(xí)設(shè)置虛擬用戶,以便我們可以管理所有 Dovecot 中的用戶。
抱歉,還不能配置 SSL
我知道我答應(yīng)過教你們?nèi)绾卧O(shè)置一個(gè)受 SSL 保護(hù)的服務(wù)器。 不幸的是,我低估了這個(gè)話題的范圍。 所以,我會(huì)下個(gè)月再寫一個(gè)全面的教程。
今天,在本系列的***一部分中,我們將詳細(xì)介紹如何在 Dovecot 和 Postfix 中設(shè)置虛擬用戶和郵箱。 在你看來這是有點(diǎn)奇怪,所以我盡量讓下面的例子簡單點(diǎn)。我們將使用純文本文件和純文本來進(jìn)行身份驗(yàn)證。 你也可以選擇使用數(shù)據(jù)庫后端和較強(qiáng)的加密認(rèn)證形式,具體請(qǐng)參閱文末鏈接了解有關(guān)這些的更多信息。
虛擬用戶
我們希望郵件服務(wù)器上用的是虛擬用戶而不是 Linux 系統(tǒng)用戶。使用 Linux 系統(tǒng)用戶不能擴(kuò)展,并且它們會(huì)暴露系統(tǒng)登錄賬號(hào),給你的服務(wù)器帶來不必要的風(fēng)險(xiǎn)。 設(shè)置虛擬用戶需要在 Postfix 和 Dovecot 中編輯配置文件。我們將從 Postfix 開始。首先,我們將從一個(gè)干凈、簡化的 /etc /postfix/main.cf 開始。移動(dòng)你原始的main.cf 到別處做個(gè)備份,創(chuàng)建一個(gè)新的干凈的文件,內(nèi)容如下:
- compatibility_level=2
- smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU)
- biff = no
- append_dot_mydomain = no
- myhostname = localhost
- alias_maps = hash:/etc/aliases
- alias_database = hash:/etc/aliases
- myorigin = $myhostname
- mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
- mailbox_size_limit = 0
- recipient_delimiter = +
- inet_interfaces = all
- virtual_mailbox_domains = /etc/postfix/vhosts.txt
- virtual_mailbox_base = /home/vmail
- virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt
- virtual_minimum_uid = 1000
- virtual_uid_maps = static:5000
- virtual_gid_maps = static:5000
- virtual_transport = lmtp:unix:private/dovecot-lmtp0
你可以直接拷貝這份文件,除了 mynetworks 參數(shù)的設(shè)置 192.168.0.0/24,它應(yīng)該是你的本地子網(wǎng)掩碼。
接下來,創(chuàng)建用戶和組 vmail 來擁有你的虛擬郵箱。虛擬郵箱保存在 vmail 的家目錄下。
- $ sudo groupadd -g 5000 vmail
- $ sudo useradd -m -u 5000 -g 5000 -s /bin/bash vmail
接下來重新加載 Postfix 配置:
- $ sudo postfix reload
- [sudo] password for carla:
- postfix/postfix-script: refreshing the Postfix mail system
Dovecot 虛擬用戶
我們會(huì)使用 Dovecot 的 lmtp 協(xié)議來連接到 Postfix。你可以這樣安裝:
- $ sudo apt-get install dovecot-lmtpd
main.cf 的***一行涉及到 lmtp。復(fù)制這個(gè) /etc/dovecot/dovecot.conf 示例文件來替換已存在的文件。再說一次,我們只使用這一個(gè)文件,而不是 /etc/dovecot/conf.d 內(nèi)的所有文件。
- protocols = imap pop3 lmtp
- log_path = /var/log/dovecot.log
- info_log_path = /var/log/dovecot-info.log
- ssl = no
- disable_plaintext_auth = no
- mail_location = maildir:~/.Mail
- pop3_uidl_format = %g
- auth_verbose = yes
- auth_mechanisms = plain
- passdb {
- driver = passwd-file
- args = /etc/dovecot/passwd
- }
- userdb {
- driver = static
- args = uid=vmail gid=vmail home=/home/vmail/studio/%u
- }
- service lmtp {
- unix_listener /var/spool/postfix/private/dovecot-lmtp {
- group = postfix
- mode = 0600
- user = postfix
- }
- }
- protocol lmtp {
- postmaster_address = postmaster@studio
- }
- service lmtp {
- user = vmail
- }
***,你可以創(chuàng)建一個(gè)含有用戶和密碼的文件 /etc/dovecot/passwd。對(duì)于純文本驗(yàn)證,我們只需要用戶的完整郵箱地址和密碼:
- alrac@studio:{PLAIN}password
- layla@studio:{PLAIN}password
- fred@studio:{PLAIN}password
- molly@studio:{PLAIN}password
- benny@studio:{PLAIN}password
Dovecot 虛擬用戶獨(dú)立于 Postfix 虛擬用戶,因此你需要管理 Dovecot 中的用戶。保存所有的設(shè)置并重啟 Postfix 和 Dovecot:
- $ sudo service postfix restart
- $ sudo service dovecot restart
現(xiàn)在讓我們使用老朋友 telnet 來看下 Dovecot 是否設(shè)置正確。
- $ telnet studio 110
- Trying 127.0.1.1...
- Connected to studio.
- Escape character is '^]'.
- +OK Dovecot ready.
- user molly@studio
- +OK
- pass password
- +OK Logged in.
- quit
- +OK Logging out.
- Connection closed by foreign host.
現(xiàn)在一切都好!讓我們用 mail 命令,發(fā)送測試消息給我們的用戶。確保使用用戶的完整電子郵箱地址而不只是用戶名。
- $ mail benny@studio
- Subject: hello and welcome!
- Please enjoy your new mail account!
- .
***一行的英文句點(diǎn)表示發(fā)送消息。讓我們看下它是否到達(dá)了正確的郵箱。
- $ sudo ls -al /home/vmail/studio/benny@studio/.Mail/new
- total 16
- drwx------ 2 vmail vmail 4096 Dec 14 12:39 .
- drwx------ 5 vmail vmail 4096 Dec 14 12:39 ..
- -rw------- 1 vmail vmail 525 Dec 14 12:39 1481747995.M696591P5790.studio,S=525,W=540
找到了。這是一封我們可以閱讀的純文本文件:
- $ less 1481747995.M696591P5790.studio,S=525,W=540
- Return-Path: <carla@localhost>
- Delivered-To: benny@studio
- Received: from localhost
- by studio (Dovecot) with LMTP id V01ZKRuuUVieFgAABiesew
- for <benny@studio>; Wed, 14 Dec 2016 12:39:55 -0800
- Received: by localhost (Postfix, from userid 1000)
- id 9FD9CA1F58; Wed, 14 Dec 2016 12:39:55 -0800 (PST)
- Date: Wed, 14 Dec 2016 12:39:55 -0800
- To: benny@studio
- Subject: hello and welcome!
- User-Agent: s-nail v14.8.6
- Message-Id: <20161214203955.9FD9CA1F58@localhost>
- From: carla@localhost (carla)
- Please enjoy your new mail account!
你還可以使用 telnet 進(jìn)行測試,如本系列前面部分所述,并在你最喜歡的郵件客戶端中設(shè)置帳戶,如 Thunderbird,Claws-Mail 或 KMail。
故障排查
當(dāng)郵件工作不正常時(shí),請(qǐng)檢查日志文件(請(qǐng)參閱配置示例),然后運(yùn)行 journalctl -xe。 這時(shí)會(huì)提供定位輸入錯(cuò)誤、未安裝包和可以 Google 的短語等所有需要的信息。
接下來?
假設(shè)你的 LAN 名稱服務(wù)配置正確,你現(xiàn)在有一臺(tái)很好用的 LAN 郵件服務(wù)器。 顯然,以純文本發(fā)送消息不是***的,不支持互聯(lián)網(wǎng)的郵件也是絕對(duì)不可以的。 請(qǐng)參閱 Dovecot SSL 配置和 Postfix TLS 支持,VirtualUserFlatFilesPostfix 涵蓋了 TLS 和數(shù)據(jù)庫后端。并請(qǐng)期待我之后的 SSL 指南。這次我說的是真的。