Qmail是一款運行于類Unix操作系統的郵件傳送代理軟件,由丹尼爾·伯恩斯坦(Daniel J. Bernstein)編寫,旨在提供比Sendmail更為安全的選擇。Qmail以其安全特性著稱,其作者曾懸賞500美元尋找其安全漏洞,直至2006年無人領獎。Qmail的主要競爭對手包括Exim和Postfix。
特性
安全性
Qmail最初發布時,它是第一個考慮到安全性的郵件傳輸代理;此后,其他安全意識強的MTA也相繼問世。相比之下,Qmail的前身Sendmail并非以安全為目標設計,因此一直是攻擊者的目標。與sendmail不同,Qmail采用了模塊化架構,其各個組件之間相互不信任;例如,Qmail的SMTP監聽組件運行時使用的憑證不同于隊列管理器或SMTP發送器。此外,Qmail還實現了針對C標準庫的安全意識增強版,因此未受到堆棧溢出、格式字符串攻擊或臨時文件競爭條件的影響。
性能
Qmail發布時,其性能顯著優于Sendmail,尤其是在批量郵件任務(如郵件列表服務器)方面。Qmail最初的設計目的是管理大型郵件列表。
簡潔性
Qmail推出時,Sendmail的配置復雜度極高,而Qmail易于配置和部署。
創新
Qmail鼓勵使用多項創新,包括Bernstein發明的Maildir格式,該格式將個人電子郵件拆分為單獨的文件。與mbox格式相比,Maildir避免了許多鎖定和并發問題,并且可以通過NFS安全地提供。Qmail還可以交付至mbox郵箱。Qmail還引入了用戶可控的通配符郵箱的概念,允許用戶公開多個郵件地址供郵件列表和垃圾郵件管理使用。Qmail還推出了Quick Mail Transport Protocol (QMTP)和Quick Mail Queuing Protocol (QMQP)等創新。
模塊化
Qmail幾乎是一個完全模塊化的系統,其中每個主要功能與其他主要功能分開。只要新模塊保持與原始模塊相同的接口,就很容易替換Qmail系統中的任何一部分。
爭議
安全獎勵與Georgi Guninski的漏洞
1997年,Bernstein提供了500美元的獎勵,以獎勵首次發現最新軟件版本中可驗證的安全漏洞的人。2005年,安全研究員Georgi Guninski發現了Qmail中的整數溢出漏洞。在64位平臺上,如果默認配置有足夠的虛擬內存,則向Qmail某些組件發送大量數據可能導致遠程代碼執行。Bernstein爭辯說這不是實際攻擊,因為他認為沒有任何現實世界的Qmail部署會受到影響。配置Qmail組件的資源限制可以緩解這一漏洞。2007年11月1日,Bernstein將獎勵提高到了1000美元。第二天的一次幻燈片演示中,Bernstein指出,十年歷史的Qmail-1.03中只有四個“已知錯誤”,并且都不是“安全漏洞”。他認為Guninski發現的錯誤是一種“潛在的計數器溢出”。“幸運的是,計數器的增長受到了內存的限制,而這又取決于配置?!?020年5月19日,Qualys發布了針對Guninski漏洞的有效利用,但利用作者聲稱他們未能獲得獎勵,因為他們提出的利用包含了額外的環境限制。
更新頻率
核心Qmail包已有多年未更新。新功能最初由第三方補丁提供,其中最重要的一些補丁后來合并成了一個名為netqmail的元補丁。
標準合規性
Qmail不是作為Sendmail的直接替代品設計的,因此在所有情況下都不會表現出與Sendmail完全相同的行為。在某些情況下,這種行為差異成為了批評的理由。例如,Qmail的回退消息(稱為QSBMF)格式與IETF在RFC 1894中規定的交付狀態通知的標準格式不同,后者后來升級為草案標準RFC 3464,并推薦在SMTP規范中使用。Qmail的一些功能因其引入的郵件轉發復雜性而受到批評;例如,Qmail的“通配符”交付機制及其安全設計使其無法在SMTP事務期間拒絕偽造或不存在的發件人的消息。過去,這些差異可能使Qmail在濫用為垃圾郵件中繼時表現不同,盡管現代垃圾郵件交付技術受回退行為的影響較小。
版權狀況
Qmail于2007年11月進入公共領域。在此之前,Qmail是無許可證軟件,僅在滿足某些限制(主要是兼容性)的情況下才允許以源代碼形式或預編譯形式(“var-qmail”包)分發。這種非典型的許可安排使Qmail根據某些指南(如DFSG)被視為非免費軟件,并引起了爭議。Qmail是唯一廣泛部署的公共領域軟件消息傳輸代理(MTA)。
使用方法
目錄
安裝部署
準備工作
LAMP殘留
上傳所需安裝包
檢查DNS配置
設置或關閉防火墻
卸載已有的郵件系統
解壓縮netqmail-1.05.tar.gz
安裝daemontools
安裝ucspi-tcp
創建所需的用戶
準備安裝qmail
qmail編譯安裝
設置管理員的郵箱地址
開啟SPF設置
添加qmail的幫助手冊
為qmail服務建立監控目錄和日志文件
檢查服務
安裝vpopmail
檢查服務
用POP3和SMTP測試
安裝qmailadmin
過程
Qmail的安裝
1. 獲取Qmail程序。
Qmail是自由軟件,在Internet上可以獲得它的源代碼(C源代碼)及基于各種平臺和操作系統的二進制文件。二進制文件可以不須編譯直接使用,但要注意選擇與您的平臺和操作系統版本一致的文件,否則可能不能使用。源代碼可以在您的任何環境下工作(unix)但需要自己進行編譯安裝。這里我們選擇源代碼。從Internet上下載的源代碼通常是以tar程序打的包然后再用壓縮軟件進行壓縮。如:qmail-1.03.tar.gz 這里使用的是gzip進行壓縮的(假設你的機器上已安裝了gzip)。使用 gzip -d qmail-1.03.tar.gz 解壓縮成qmail-1.03.tar 然后再用tar -xvf qmail-1.03.tar解包成qmail-1.03目錄。那么源代碼文件均在此目錄中了。
2. 編譯安裝Qmail。
Qmail源代碼文件中有幾個配置文件可以修改以適合您的環境。
conf-qmail :此文件包含Qmail的安裝目錄,默認值是 /var/qmail/
conf-users:此文件包含Qmail需要使用的用戶,默認用戶是 root,alias,(這兩個用戶在unix下應該已經由系統建立好了,下面的用戶應該自己創)qmails,qmaild,qmaill, qmailr,qmailq,qma-ilp。
conf-groups:此文件包含Qmail 需要使用的組,默認的組為qmail(qmails,qmaild,qmaill,qmailr,qmailq,qmailp要屬于此組)。
conf-cc:此文件包含Qmail使用的編譯器,默認使用cc編譯器,如須使用其它C編譯器,應該將其替換為此編譯器如 gcc.
conf-ld:此文件包含Qmail使用的編譯器,默認使用cc編譯器,如須使用其它C編譯器,應該將其替換為此編譯器如 gcc
在進行安裝前系統應該已經安裝了make命令。
定制好這些文件后,在/var/qmail/下使用命令:make。make命令將編譯源代碼、連接.obj 文件。如果此過程中斷或出錯,應參考上面配置文件正確與否。用戶和組建立的正確與否。如果此過程沒有問題使用命令:make check setup。此命令將安裝所有文件到/var/qmail/(在執行此命令前先用 makedir /var/qmail 創建該目錄)下。
另外需要安裝checkpasswd,它的獲得和安裝和Qmail一樣。此程序用于用戶使用POP3協議收取郵件時對用戶的密碼驗證。
Qmail的初級配置
Qmail安裝好了以后將在/var/qmail/下生成若干文件和目錄。
1. 用vi編輯器打開文件 /etc/inetd.conf,并在文件尾添加如下行:
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env
tcp-env /var/qmail/bin/qmail-smtpd (和上面一行同在一行)
pop3 stream tcp nowait root /var/qmail/bin/qmail-popup
qmail-popup yourname /bin/checkpassword
/var/qmail/bin/qmail-pop3d Maildir(和上面兩行同在一行)
其中yourname是您的完整的Internet主機名,Maildir 是采用的郵箱格式(這里我們使用較流行的Maildir格式)
2. 檢查/etc/services文件中是否有如下兩行,如沒有則添加進去:
smtp 25/tcp mail
pop3 110/tcp # Post Office
3. DNS中有關Qmail的設置.
如果Qmail的郵件是與Internet上的其它郵件服務器交互的話(否則只能此服務器的郵件用戶相互收發郵件了),還需要在DNS服務器中設置有關 Qmail的條目(如果使用別人的DNS服務器,應向DNS管理員申請添加條目)即添加一條關于郵件交換的條目(具體的設置請向DNS管理員咨詢)
4. 控制文件的創建
Qmail的控制文件放在/var/qmail/control/下,如果不與Internet上的郵件服務器互傳郵件的話,需要配置很多的文件。否則最簡單的只需配置一個文件:me
它的內容是此郵件服務器的完整Internet主機名即:yourname
郵件用戶的創建
郵件用戶就是系統用戶,所以您應該向系統添加用戶,為了安全和管理的需要,最好創建一個E-mail用戶組,將E-mail用戶歸屬于此組,創建用戶目錄時最好在同一個文件系統下創建在同一個目錄下(當然此文件系統不夠大時可以創建在其它文件系統的某個目錄下)
然后,在每個用戶的初始目錄下用命令:/var/qmail/bin/maildirmake創建郵箱目錄并賦予適當的權限,您可以使用Shell腳本來完成每個用戶郵箱的創建,下面是此腳本的一個簡單的例子:
if test $1
then
echo "Creating $1's directory and file..."
useradd -d /usr/email-users/$1 -g emusers -s /bin/passwd $1
cd /usr/email-users/
mkdir $1
chown $1 $1
cd $1
/var/qmail/bin/maildirmake Maildir
echo ./Maildir/ > .qmail
chown $1 Maildir
chown $1 Maildir/*
chown $1 .qmail
echo "Please input $1's email password"
passwd $1
echo "$1's account has been created!!!"
else
echo "Please input the user'name!"
fi
系統管理員可以使用emuadd email_user_name (此腳本的文件名,并將此文件存放在/bin下)來傳建email_user_name的郵箱
Qmail系統的使用
當上述過程結束后重新啟動計算機。
在郵件客戶端程序中設置如下:(假如E-mail服務器的主機名為your,name,DNS中設置的郵件交換管理的域為mail.domain,注意:通常mail.domain與.name相同,以E-mail用戶user為例)
電子郵件地址:user@mail.domain
SMTP服務器地址:yourname
POP3服務器地址:yourname
POP3賬號:user
POP3賬號密碼:(由管理員給你,可以自己修改)
啟動設置
Qmail 運行有兩種方式。tcpserver,xinet。當域名解析有問題的時候,tcpserver運行會有問題。
qmail1.0.8,ucspi-tcp-0.88
(1) tcpserver方式
pop3 設置
/usr/local/bin/tcpserver -P -H -R 0 pop-3 /var/qmail/bin/qmail-popup /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger &
smtpd 設置
/usr/local/bin/tcpserver -H -R -t 1 -v -P -x/etc/qmail/tcp.smtp.cdb -u 511 -g 506 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true | /var/qmail/bin/splogger &
(2) xinetd方式
/etc/xinetd.d/pop3-3
service pop-3
{
disable = no
socket_type = stream
wait = no
user = root
server = /var/qmail/bin/qmail-popup
nice = 10
server_args = home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
}
/etc/xinetd.d/smtp
service smtp
{
disable = no
socket_type = stream
wait = no
user = vpopmail
server = /var/qmail/bin/qmail-smtpd
nice = 10
server_args = /home/vpopmail/bin/vchkpw /bin/true
}
參考資料 >
qmail.全知識.2024-11-06
快速、安全、免費的郵件服務器.west999.2024-11-06
深度剖析 Qmail郵件系統的安全分析和改進研究.51CTO.2024-11-06