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发现的错误是一种“潜在的计数器溢出”。“幸运的是,计数器的增长受到了内存的限制,而这又取决于配置。”2020年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
cd $1
/var/qmail/bin/maildirmake Maildir
echo ./Maildir/ \u003e .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\u003e\u00261 | /var/qmail/bin/splogger \u0026
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 \u0026
/etc/xinetd.d/pop3-3
service pop-3
{
disable = no
socket_type = stream
wait = no
server = /var/qmail/bin/qmail-popup
nice = 10
server_args = home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir \u0026
}
/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
}