返回文章列表

DNS 與郵件伺服器建置設定

本文介紹如何在 Proxmox 虛擬環境中設定 DNS 主從伺服器以及郵件伺服器,包含 BIND9 的安裝組態、DNS 紀錄設定、Postfix 與 Dovecot 的安裝與設定,並提供一些安全注意事項和測試方法。

系統管理 網路管理

在 Proxmox 虛擬環境中建置 DNS 叢集能提升服務的穩定性和可用性。我們先建立第二台虛擬機器作為 DNS 從屬伺服器,並安裝 BIND9。設定 named.confnamed.conf.options,特別要注意 allow-transfer 需設定為 none 以確保安全。接著設定 DNS 從屬區,指定主伺服器的 IP 位址,讓從屬伺服器能自動同步資料。設定完成後,使用 named-checkconf 檢查設定檔,並用 rndc reload 重新載入 BIND9。最後,透過 dig 命令測試 DNS 解析是否正常。除了命令列設定,也可以使用 Webmin 或 YaST 等圖形化工具管理 DNS 伺服器。設定郵件伺服器前,需先在 DNS 伺服器中新增 MX 紀錄和 A 紀錄,以確保郵件能正確路由。設定多個 MX 紀錄能實作負載平衡。別忘了設定反向區域檔的 PTR 紀錄,以提供反向解析。完成 DNS 設定後,在 Ubuntu 虛擬機器上安裝 Postfix 和 Dovecot。安裝 Postfix 時,需設定郵件伺服器型別、系統郵件名稱等選項。安裝 Dovecot 後,需重新啟動 Postfix,並檢查兩個服務的執行狀態和監聽埠口。最後,使用 Sendmail 測試郵件伺服器的基本功能。

設定 DNS 從屬伺服器

為了提供冗餘性,建議設定一個 DNS 從屬伺服器。當主 DNS 伺服器無法回應時,從屬伺服器可以接管請求。

建立第二個主機

依照前述步驟,建立另一個根據 Proxmox LXC 範本的主機,命名為 dns02,並分配 IP 位址 10.128.1.3/24

安裝並組態 BIND9

dns02 上安裝 BIND9,並編輯 named.confnamed.conf.options 設定檔,使其與主 DNS 伺服器的組態相似,但需將 allow-transfer 設定為 none

acl trusted {
    10.128.1.0/24;
};
options {
    directory "/var/cache/bind";
    recursion yes;
    allow-recursion { trusted; };
    allow-query { trusted; };
    allow-transfer { none; };
    forwarders {
        10.128.1.2;
        8.8.8.8;
    };
    ...
};

內容解密:

  1. acl trusted:定義了一個信任的 IP 位址範圍。
  2. allow-transfer { none; }:禁止將區域資料傳輸給其他伺服器。
  3. forwarders:指定了當本地 DNS 伺服器無法解析查詢時,應將查詢轉發到的上游 DNS 伺服器。

這樣就完成了 DNS 從屬伺服器的基本設定,提供了一個冗餘且穩定的 DNS 解析服務。

設定 DNS 從屬區(Slave Zone)條目

接下來,在 /etc/bind/named.conf.local(以 Ubuntu 為例)中設定區條目,這些條目看起來與 DNS 主伺服器上的區條目相似。然而,型別被設定為從屬(slave),並且主伺服器透過 IP 位址明確標識,如清單 3-11 所示。沒有傳輸(transfer)子句。

DNS 從屬伺服器區條目範例

zone "devops.lab" {
    type slave;
    file "/etc/bind/zones/devops.lab.zone";
    masters { 10.128.1.2; };
};

zone "128.10.in-addr.arpa" {
    type slave;
    file "/etc/bind/zones/10.128.zone";
    masters { 10.128.1.2; };
};

內容解密:

  • zone "devops.lab"zone "128.10.in-addr.arpa" 定義了兩個從屬區,分別用於正向解析和反向解析。
  • type slave; 表示這是一個從屬伺服器,它會從主伺服器取得區資料。
  • file "/etc/bind/zones/devops.lab.zone";file "/etc/bind/zones/10.128.zone"; 指定了儲存區資料的檔案路徑。
  • masters { 10.128.1.2; }; 指定了主伺服器的 IP 位址,從屬伺服器將從該位址取得區資料。

使用 named-checkconf 檢查每個檔案是否出現語法錯誤:

root@dns02:~# named-checkconf /etc/bind/named.conf

如果一切正常(沒有輸出),則使用 rndc reload 重新載入 bind。如果收到「Server reload successful」回應,則表示已成功啟用 DNS 從屬伺服器。無需像在主伺服器上那樣手動建立帶有 A 和 PTR 記錄的區檔案,DNS 從屬伺服器將自動從主伺服器收集所有資訊。

測試 DNS 從屬伺服器

透過在主伺服器上組態的完全合格網域名稱主機名(如 workstation.devops.lab)上使用 dig 命令來測試新的從屬伺服器:

root@dns02:~# dig workstation.devops.lab @10.128.1.3

使用 @10.128.1.3 告訴 dig 使用從屬伺服器來解析主機資訊。記住,您不需要建立任何區檔案或區條目,從屬伺服器將從主伺服器取得這些資訊。它會定期更新以自動同步資訊。

輸出的結果應該類別似於清單 3-12。

dig 命令輸出範例

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> workstation.devops.lab @10.128.1.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29780
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 53b221dd5d0b4bf1da78de985e124493841383d1f103aab4 (good)
;; QUESTION SECTION:
;workstation.devops.lab. IN A
;; ANSWER SECTION:
workstation.devops.lab. 604800 IN A 10.128.1.10
;; AUTHORITY SECTION:
devops.lab. 604800 IN NS dns01.devops.lab.
devops.lab. 604800 IN NS dns02.devops.lab.
;; ADDITIONAL SECTION:
dns01.devops.lab. 604800 IN A 10.128.1.3
dns02.devops.lab. 604800 IN A 10.128.1.4
;; Query time: 0 msec
;; SERVER: 10.128.1.4#53(10.128.1.3)
;; WHEN: Sun Jan 05 20:18:26 UTC 2022
;; MSG SIZE rcvd: 168

內容解密:

  • ANSWER SECTION 顯示了 workstation.devops.lab 的 A 記錄 IP 位址為 10.128.1.10
  • ADDITIONAL SECTION 顯示了主 DNS 伺服器和從屬 DNS 伺服器的資訊。

透過執行 dig -x 命令測試反向解析:

root@dns02:~# dig -x 10.128.1.10 @10.128.1.3

這應該傳回 10.128.1.10 的主機名,即 workstation.devops.lab

請務必將主 DNS 和從屬 DNS 的 IP 位址(10.128.1.210.128.1.3)新增到您未來建立的所有虛擬機器和實體主機的 /etc/resolv.conf 檔案(或網路設定)中。這將使它們能夠透過您的 DNS 伺服器解析您的私有網域名稱。

圖形化 DNS 部屬與管理

除了透過命令列手動設定 DNS 和編輯各種 named.conf 檔案外,您還可以使用 Webmin,或者如果您使用的是 openSUSE,您可以利用 YaST 組態工具。

Webmin 的 DNS 模組(如圖 3-5 所示)使您能夠快速佈署 bind 和組態您的 DNS 主伺服器和從屬伺服器。它也是檢查您的組態的好方法。有關如何在特定平台上安裝和使用 Webmin 的詳細資訊,請參閱本文後續章節或存取 www.webmin.com/deb.html

Webmin DNS 設定介面

此圖示呈現了 Webmin 對 BIND DNS Server 組態的控制介面,允許管理 bind 和 named 的各個方面,包括建立主區和從屬區。

在 openSUSE 上使用 dhcp_dns_server模式安裝 DNS 時,它會安裝 bind 和 named 所需的所有套件,並提供一個稱為 TUI(根據文字的使用者介面)的 YaST dns-server 工具(如圖 3-6 所示)。此工具管理您手動建立的所有檔案和條目,是編輯組態的好方法。

YaST DNS 管理工具

此圖示展示了 openSUSE 中的 YaST DNS 管理工具,可以簡化 DNS 設定和新增主機名。

嘗試這些選項以瞭解如何調整和擴充套件 DNS 組態以滿足您的需求。本章中佈署的內容足以滿足本文的其他部分,但 bind 和 named 的功能遠不止於此。

設定電子郵件伺服器

在 Gmail、Office 365 和 Yahoo 等雲端服務時代,很容易忘記不久前人們還在執行和維護自己的電子郵件伺服器。儘管公共雲端服務強大且廣泛使用,但擁有自己的內部郵件服務對於傳送和接收日誌通知、與聊天或軟體開發工具整合或僅在實驗室環境中進行通訊非常有用。

在本章中,您將安裝兩個開源電子郵件工具:Postfix 和 Dovecot。它們將使您能夠在實驗室網路中的任何機器之間傳送和接收電子郵件。Postfix 提供由簡單郵件傳輸協定(SMTP)使用的傳送機制。Dovecot 提供 IMAP 和 POP3 功能,用於接收電子郵件。IMAP 允許本地電子郵件客戶端接收訊息並將其儲存在遠端伺服器上。POP3 從伺服器提取電子郵件,以便訊息僅儲存在本地郵件客戶端機器上。在這兩者中,IMAP 已成為電子郵件的標準。擁有本地和遠端伺服器上的電子郵件副本意味著您可以同時從多個裝置存取所有電子郵件,無論是獨立的 PC、智慧型手機還是根據網頁的電子郵件工具,如 RainLoop。在本章中,您將佈署 IMAP,但您可以隨意嘗試 POP3。如果您希望能夠離線檢視電子郵件,或者頻寬是一個問題,那麼 POP3 可能是一個不錯的選擇。

設定電子郵件伺服器的DNS支援

在建立電子郵件伺服器之前,需要設定DNS伺服器以處理電子郵件。DNS提供了一種特定的MX記錄型別,用於管理電子郵件伺服器。當傳送電子郵件時,遠端郵件傳輸代理(MTA)會查詢目的網域名稱的MX記錄,並獲得電子郵件伺服器的主機名稱,然後嘗試建立SMTP連線。

新增MX記錄和A記錄

要設定電子郵件伺服器,需要在DNS組態中新增MX記錄和A記錄。首先,登入dns01.devops.lab伺服器,並編輯正向位址記錄檔(/etc/bind/zones/devops.lab.zone)。在NS記錄條目下方新增一行,如下所示:

devops.lab. IN MX 0 mail.devops.lab.

這行記錄標識了電子郵件伺服器的網域名稱(devops.lab)、記錄型別(MX)、優先順序(0)和主機名稱(mail.devops.lab)。優先順序0代表最高優先順序,表示在有多個電子郵件伺服器的情況下,優先使用mail.devops.lab。

MX記錄格式說明

  • devops.lab.:網域名稱
  • IN:表示Internet類別
  • MX:表示郵件交換記錄
  • 0:優先順序,數字越小優先順序越高
  • mail.devops.lab.:郵件伺服器的主機名稱

接下來,需要新增一個A記錄,將主機名稱mail.devops.lab.對映到指定的IP地址(例如10.128.1.5):

mail.devops.lab. IN A 10.128.1.5

為什麼需要A記錄?

MX記錄不包含IP地址,因此其他主機無法直接透過MX記錄找到電子郵件伺服器。A記錄用於將主機名稱解析為IP地址,使其他主機能夠找到並連線到電子郵件伺服器。

設定負載平衡

如果需要設定多個電子郵件伺服器以實作負載平衡,可以新增多個MX記錄,並為每個MX記錄指定相同的優先順序,但指向不同的A記錄主機。例如:

devops.lab. IN MX 10 mail1.devops.lab.
devops.lab. IN MX 10 mail2.devops.lab.

修改反向區域檔

除了修改正向區域檔,還需要修改反向區域檔(/etc/bind/zones/10.128.zone),新增PTR記錄,以提供反向解析:

5.1 IN PTR mail.devops.lab.

這裡的5.1對應於IP地址10.128.1.5

套用變更並測試

修改完成後,記得遞增區域檔中的序列號(serial),然後重新載入DNS設定:

$ sudo rndc reload

測試DNS解析是否正確:

$ ping -c 5 mail.devops.lab
$ dig devops.lab MX

檢查dig命令的輸出,確保ANSWER SECTION顯示正確的主機名稱和優先順序。

使用靜態IP的重要性

使用靜態IP地址而非動態分配的IP地址,有助於保持電子郵件伺服器的穩定性和可預測性,避免因IP地址變更導致的連線問題。

為什麼靜態IP更好?

  • 穩定性:靜態IP不會變更,減少了因IP變更導致的服務中斷。
  • 可管理性:便於管理和組態網路裝置和服務。

完成這些步驟後,您的DNS伺服器就已經組態好了對電子郵件伺服器的支援,接下來就可以進行電子郵件伺服器的安裝和組態。

在Ubuntu上安裝與設定Postfix與Dovecot郵件伺服器

本章節將指導如何在Ubuntu虛擬機器上安裝並設定Postfix與Dovecot,以建立一個基本的電子郵件伺服器。

準備工作

首先,需要建立一個新的Ubuntu虛擬機器,並為其分配適當的資源,如32GB的儲存空間、至少一個CPU核心和1,024MB的RAM。同時,設定DNS伺服器為10.128.1.3和10.128.1.4,這些是devops.lab網域的名稱伺服器。虛擬機器建立完成後,啟動它並透過主控台登入。

驗證網路設定

重新啟動虛擬機器以確保所有更新的設定被正確應用。然後,從其他機器ping郵件伺服器的IP地址,以測試其網路連線是否正常。

SSH登入與系統更新

透過SSH登入到mail.devops.lab主機:

更新套件函式庫並升級系統至最新版本,為了確保系統的一致性,順便重新啟動系統:

$ sudo apt update && sudo apt upgrade -y

新增系統使用者

為了能夠傳送和接收電子郵件,需要新增系統使用者。這些使用者的帳號和密碼將被用於稍後設定的電子郵件客戶端(如Evolution)。新增使用者的指令如下:

$ sudo adduser jadams

此指令會提示輸入密碼和其他相關資訊。在Ubuntu下,adduser指令會自動為使用者建立/home目錄,並設定預設的Shell為Bash。如果使用的是其他Linux發行版,可能需要使用useradd -m <username>指令來建立使用者,並使用passwd指令來設定密碼。

驗證使用者目錄設定

確保使用者的/home目錄存在,並且該目錄的所有權屬於該使用者。可以使用以下指令檢查:

$ ls /home/
$ ls -la /home

如果發現使用者的家目錄所有權不正確,可以使用chown指令進行修正:

$ sudo chown jadams:jadams /home/jadams -R

安裝Postfix

Postfix是一個郵件傳輸代理(MTA),主要負責傳送電子郵件,通常以SMTP協定運作。首先,安裝Postfix:

$ sudo apt install postfix

如果Postfix已經安裝,可以執行dpkg-reconfigure指令來重新設定:

$ sudo dpkg-reconfigure postfix

在設定過程中,需要根據提示選擇合適的選項,包括:

  • 一般郵件設定型別:選擇「Internet Site」。
  • 系統郵件名稱:輸入「devops.lab」。
  • root郵件收件人:設定為之前新增的使用者名稱。
  • 其他接受郵件的目的地:保留預設值。
  • 是否強制同步更新郵件佇列:選擇「No」。
  • 本地網路:除了預設的localhost IP範圍外,新增lab網路的IP範圍(例如10.128.1.0/24)。
  • 信箱大小限制:設定為0,表示無限制。
  • 本地地址擴充字元:預設為「+」。
  • 要使用的網路協定:可選擇全部、IPv6或IPv4。

完成Postfix的設定後,其設定資訊將被儲存在/etc/postfix/main.cf檔案中。如需手動編輯此檔案,請記得重新載入Postfix服務以使變更生效:

$ sudo service postfix reload

設定解密:

此步驟涉及多個重要設定的選擇,包括郵件伺服器的型別、系統郵件名稱等。正確設定這些選項對於確保郵件伺服器的正常運作至關重要。特別是「本地網路」的設定,它決定了哪些網路可以存取郵件伺服器。將lab網路的IP範圍加入其中,可以確保實驗室內的機器能夠順利傳送和接收電子郵件。

後續步驟

完成Postfix的安裝和基本設定後,下一步是安裝和設定Dovecot,以便提供IMAP/POP服務,讓使用者能夠從電子郵件客戶端存取郵件。Dovecot的設定涉及指定郵件存放的位置、驗證機制等。具體的安裝和設定步驟將在下一章節中詳細介紹。

後續步驟解密:

Dovecot是一個強大且靈活的IMAP和POP3伺服器,能夠與Postfix協同工作,提供完整的電子郵件服務解決方案。正確設定Dovecot對於實作安全的電子郵件存取和管理至關重要。透過與Postfix的整合,可以建立一個功能完備的電子郵件系統,滿足實驗室或生產環境的需求。

設定電子郵件伺服器的完整:Dovecot 安裝與設定

在前面的章節中,我們已經完成了 Postfix 的基本設定,現在是時候安裝 Dovecot 來提供 IMAP 和 POP3 電子郵件服務。Dovecot 負責接收電子郵件,無論是本地還是遠端電子郵件客戶端,如 Evolution。Postfix 只負責傳送電子郵件,而 Dovecot 則是接收電子郵件的關鍵。

為何需要 Dovecot?

在生產環境中,您可能會在不同的伺服器上分別安裝 Postfix 和 Dovecot。Postfix 伺服器負責處理整個網域的電子郵件傳送工作,而 Dovecot 伺服器則負責接收和儲存所有傳入、傳出、草稿和垃圾郵件。

在 Ubuntu 上安裝 Dovecot

要在 Ubuntu 上安裝具有 IMAP 和 POP3 功能的 Dovecot,您需要安裝三個套件:

$ sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

安裝完成後,您不需要修改預設的組態設定。

安裝完成後的步驟

安裝完成後,請重新啟動 Postfix:

$ sudo systemctl restart postfix

確保 Postfix 和 Dovecot 執行正常:

$ systemctl status dovecot
$ systemctl status postfix

每個命令都應該輸出大量的資訊。檢查服務是否執行正常。

驗證服務是否執行

要確認 Postfix 和 Dovecot 是否正在監聽正確的埠,請使用 lsof 命令:

$ sudo lsof -i -P -n | grep LISTEN
sshd 1108 root 3u IPv4 30818 0t0 TCP *:22 (LISTEN)
master 1426 root 4u IPv4 30820 0t0 TCP *:25 (LISTEN)
dovecot 1922 root 4u IPv4 56361 0t0 TCP *:143 (LISTEN)
--snip--

這個輸出表明 ssh、master(Postfix)和 imap(Dovecot)服務正在監聽各自的埠,分別是 22、25 和 143。

電子郵件伺服器的安全注意事項

設定電子郵件伺服器時,您需要注意一些嚴重的安全風險。雖然您的實驗環境與網際網路隔離,但仍需要注意這些問題。

使用安全的埠

在生產環境中,您應該使用更安全的埠。例如,TLS 使用埠 587,SSL 使用埠 465。對於 Dovecot,安全的加密設定將使用埠 993 而不是 143。

防火牆設定

您可以選擇在 Proxmox 級別停用防火牆過濾,或使用 ufw(Uncomplicated Firewall)等工具在伺服器上設定防火牆規則。這是一個好習慣。如果您的伺服器埠完全開放,很容易被駭客利用。

Sendmail 的安全風險

Sendmail 工具使傳送偽造的電子郵件訊息變得非常容易。如果惡意行為者獲得了對您的電子郵件伺服器的存取許可權,他們就可以做同樣的事情。

初始化電子郵件服務測試

在設定完整的電子郵件客戶端之前,讓我們使用一個名為 Sendmail 的簡單命令列應用程式測試您的郵件伺服器的功能。

安裝 Sendmail

Sendmail 通常會自動安裝在許多 Linux 系統上,但請執行 which 命令檢查它是否存在於您的系統上:

$ which sendmail
/usr/sbin/sendmail

如果 Sendmail 尚未安裝,請安裝它:

$ sudo apt install sendmail

Sendmail 是一個命令列工具,使用起來並不直觀。要實際傳送電子郵件,您需要在訊息末尾輸入 CTRL + d。