萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

高效能 Linux POP3 伺服器建置:Procmail + Qpopper 完整配置實戰

一、概述

本文示範在 RedHat Linux 7.1 環境下,使用開源軟體 Procmail 3.21 與 Qpopper 4.0 搭建支援大量用戶的高效能 POP3 伺服器,重點探討關鍵參數調優以維持最佳效能。

二、軟體取得

三、Qpopper 編譯與配置

假設原始碼置於 /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:回應不顯示版本資訊,提升安全性

xinetd/inetd 整合

編輯 /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。

四、Procmail 編譯與配置

# cd /root
# tar xvfz procmail-3.21.tar.gz
# cd procmail-3.21
# vi src/authenticate.c

修改兩處:

  1. #define MAILSPOOLDIR 改為 "/usr/mail/"
  2. #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。

五、建立 POP3 用戶

無需分配 home 目錄,亦無需設為 /usr/mail/j/e:

# useradd jephe -c "Jephe Wu" -g mail -d /dev/null -s /bin/false

批量建立用戶並設定相同密碼

  1. 先用 passwd 為 mailuser1 設定密碼(假設 abc123),記下 /etc/shadow 雜湊值(如 $1$G22Plicn$r5.bSe0U7DbaHN7tCevTR/)
  2. 建立 /tmp/password,每行 用戶名:雜湊值,可由 /etc/passwd 產生:
    cat /etc/passwd | awk -F: '{print $1}' | sed -e 's/$/:$1$G22Plicn$r5.bSe0U7DbaHN7tCevTR//'
  3. 執行 chpasswd < /tmp/password 批量設定

六、常見問題 FAQ

Q:編譯 Qpopper 後仍需命令列加 -F -S?
A:順序關鍵,**-F 必須在 -S 之前**,才能正確啟用伺服器模式與快速更新。

copyright © 萬盛學電腦網 all rights reserved