本文示範在 RedHat Linux 7.1 環境下,使用開源軟體 Procmail 3.21 與 Qpopper 4.0 搭建支援大量用戶的高效能 POP3 伺服器,重點探討關鍵參數調優以維持最佳效能。
假設原始碼置於 /root:
# cd /root # tar xvfz qpopper4.0.3.tar.gz # cd qpopper4.0.3 # ./configure --enable-hash-spool=2 \ --enable-log-login \ --enable-server-mode \ --enable-fast-update \ --enable-shy \ --enable-spool-dir=/usr/mail \ --enable-specialauth # make # make install
--enable-specialauth:使用 /etc/shadow 密碼認證--enable-hash-spool=2:啟用二級 hash 目錄結構(/usr/mail/j/e/jephe),大幅提升大量用戶時檔案系統效能--enable-spool-dir=/usr/mail:指定信箱根目錄--enable-log-login:記錄成功 POP3 登入至 syslog--enable-server-mode + --enable-fast-update:避免傳統模式複製信箱至暫存檔的 I/O 開銷,增強效能--enable-shy:回應不顯示版本資訊,提升安全性編輯 /etc/xinetd.d/pop3(或 /etc/inetd.conf):
service pop3 {
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/lib/popper
server_args = qpopper -F -S -s -c -R -T120
port = 110
}
參數:-F 快速更新、-S 伺服器模式(適用無 shell 用戶)、-s 啟用日誌、-c 忽略大小寫、-R 關閉反向 DNS 查詢、-T120 逾時 120 秒。此配置下,用戶收信時僅鎖定信箱檔案、建立鎖檔 .jephe.pop、更新狀態並產生 .jephe.cache,避免整個信箱複製的額外 I/O。
非 RedHat 7.1 系統請修改 /etc/inetd.conf:
pop-3 stream tcp nowait.400 root /usr/local/sbin/popper -F -S -s -c -R -T120
nowait.400 中的 400 為每分鐘最大連線請求數。若 /etc/hosts.deny 設 ALL:ALL,需在 /etc/hosts.allow 加入 popper:ALL。
# cd /root # tar xvfz procmail-3.21.tar.gz # cd procmail-3.21 # vi src/authenticate.c
修改兩處:
#define MAILSPOOLDIR 改為 "/usr/mail/"#define MAILSPOOLHASH 改為 2(啟用二級 hash,與 Qpopper 一致)接著:
# mv /var/spool/mail /var/spool/mail.bak # make # make install # make install-suid
注意:先重命名 /var/spool/mail,否則編譯時會優先使用舊路徑與 hash 層級。若欲沿用舊路徑則無需修改 MAILSPOOLDIR。最後以 root 執行 procmail -v 驗證郵件路徑指向 /usr/mail/r/o/root。
無需分配 home 目錄,亦無需設為 /usr/mail/j/e:
# useradd jephe -c "Jephe Wu" -g mail -d /dev/null -s /bin/false
passwd 為 mailuser1 設定密碼(假設 abc123),記下 /etc/shadow 雜湊值(如 $1$G22Plicn$r5.bSe0U7DbaHN7tCevTR/)/tmp/password,每行 用戶名:雜湊值,可由 /etc/passwd 產生:cat /etc/passwd | awk -F: '{print $1}' | sed -e 's/$/:$1$G22Plicn$r5.bSe0U7DbaHN7tCevTR//'chpasswd < /tmp/password 批量設定Q:編譯 Qpopper 後仍需命令列加 -F -S?
A:順序關鍵,**-F 必須在 -S 之前**,才能正確啟用伺服器模式與快速更新。