Qmail install on Debian5
时间:2010-06-28 来源:zlj2208
Qmail install on Debian5
zlj2208
2010-01-08
转载请注明!
ChangLog:
2010-02-01:增加Dovecot 部分
2010-02-02:增加反病毒模块安装
2010-06-28:修正部分文字描述
本文档主要针对Debian系统编写,大部分CentOS系统也基本适用。
最近看到论坛中有很几个朋友在搞qmail,遇到了很多问题,将以前的文档整理一下。由于不做SA了,没有可以随便折腾的服务器了,昨天在晚上在家里的虚拟机上安装了,将文档完善了一下,希望对初学这有帮助。 这是Qmail的最基本安装,POP3服务使用qmail自带的,如果不满足需求可以使用dovecot做为POP3和IMAP服务器,dovecot很优秀,维护也比较及时;这里也没有反垃圾邮件模块的加入,由于篇幅原因这里就不写了。 对于初学者来讲,建议先看看mail相关的RFC文档,然后搞明白各个软件之间的关系。搞清关系后,出现问题解决起来能有更清晰的思路。 Qmail 是非常优秀的Mail服务器软件,但是现在已经很多年没有更新了,如果建立一个完整的一套邮件系统需要打很多的第三方补丁。如果想系统学习邮件系统级,我还是建议大家使用Postfix 。Postfix维护比较即时,功能也很多,我使用Postfix的体会是,只有你想不到的,没有Postfix做不到的。 有很多Qmail的Fans或组织提供了整合的Qmail解决方案,可以参以下内容: http://www.qmailtoaster.com http://qmail.jms1.net http://www.inter7.com/vpopmail http://www.igenus.org http://www.lifewithqmail.org
本文档编辑、生成PDF均使用OpenOffice3.2.0完成。
系统为Debian5
准备工作
卸载exim4
安装编译器
2).建立Qmail目录
3).建立qmail和vpopmail需要的用户
建立qmail需要的用户
建立vpopmail需要的用户和组
4).下载qmail软件包
5).下载qmail补丁
6).为netqmail-1.06打补丁
7).修改CA的过期时间,给他设置成10年,够多了吧
8 ).如果不想让qmail支持CRAM_MD5认证方式修改下面文件
/usr/local/src/netqmail-1.06/qmail- smtpd.c
将下面代码
改成
9).编译安装qmail
10).配置qmail
如果正确配置了dns
如果没配置dns使用下面命令
可以使用下面命令得到fqdn主机名
Qmail安装完毕.
ucspi-tcp 是代替inetd的一套程序。
程序安装的位置为: /usr/local/bin
ucspi-tcp安装完毕.
daemontools是一套管理UNIX服务的工具。
6. 安装vpopmail
1). 准备工作
测试vpopmail用户是否能够连接数据库
2). 编译安装vpopmail
3).建立虚拟域和虚拟用户
4).检查虚拟用户是否建立正确
下面为输出信息
建立 /var/qmail/bin/qmailctl 启动脚本
赋予脚本执行权限,并建立相关连接
然后建立log文件目录
1). 建立 /var/qmail/rc 文件
2). 建立 qmail-send 脚本
建立 /var/qmail/supervise/qmail-send/run 文件
建立 /var/qmail/supervise/qmail-send/log/run 文件
3).建立 qmail-smtpd 脚本
建立 /var/qmail/supervise/qmail-smtpd/run 文件
建立 concurrencyincoming 控制文件
注意: 根据你的操作系统和硬件平台的不同, 可能需要调整softlimit命令的的内存限制参数. 如果你的系统出现连接25端口失败和无法接收远程系统发送的邮件, 或者看到了类似下面这样的错误消息:
试一下把这个参数调整到4000000或者更大.
建立 /var/qmail/supervise/qmail-smtpd/log/run 文件
4). 配置pop3脚本
建立 /var/qmail/supervise/qmail-pop3d/run 文件
建立 /var/qmail/supervise/qmail-pop3d/log/run 文件
5).设置脚本的可执行权限
6).建立 supervise 目录到 /service 目录的链接
/service 目录是 daemontools 安装时建立的目录.
注意: 建立这个链接之后 qmail 系统会很快自动被启动起来。
7).SMTP访问控制
允许本地主机通过SMTP方式发送邮件,/etc/tcp.smtp 为tcprules的配置文件,如果配置可以设定哪些IP允许访问,哪些IP不允许访问。
8).启动qmail服务器方法
可以使用qmailctl命令来控制qmail的启动、运行、查看状态等。
启动qmail
停止qmail
重启动qmail
查看qmail状态
查看qmail队列
9).使用qmail的sendmail程序替换原有的sendmail程序
10).建立系统别名文件
建立这些系统别名, 取决于你想让这些邮件发送到哪里(一个本地用户或者一个远程地址)并且适当的创建一个.qmail 文件集合. 举个例子, 加入你想让本地用户 dave 接收发给系统管理员和邮件管理员的邮件, 就这么作:
11).重启动qmail
检查进行是否存在
大概存在的进程
建立base64编码脚本/usr/local/bin/base64.pl
赋予脚本执行权限
测试发邮件
通过以下日志可以使用下面命令,查看准确时间
Smtpd日志文件 /var/log/qmail/smtpd/current
send日志文件 /var/log/qmail/send/current
pop3d日志文件 /var/log/qmail/pop3d/current 查看日志
日志内容如下
查看日志
日志内容如下
查看日志
日志内容如下
vpopmail日志文件 /var/log/mail.log
2). 编译安装doevcot
3). 建立dovecot用户
1). 建立dovecot配置文件
如果在编译时候没有指定配置文件的位置,那么会在 /usr/local/etc/ 路径下生成配置文件的样例,可以用来参考,文件名为dovecot.conf 。dovecot的配置相对比较简单,可以参照dovecot的官方wiki进行配置,上面内容很详细。
建立 /usr/local/etc/dovecot.conf 文件,内容如下:
2). 建立dovecot运行是需要的目录
3). 建立dovecot启动脚本
dovecot的安装包中有一个Sys V风格的脚本,将其复制到 /etc/init.d/ 目录下,并赋予执行权限即可。
在启动 dovecot 的时候会有下面一些提示:
如果不想在启动的时候出现这些信息,按照如下方法修改启动脚本
在 /etc/init.d/dovecot 脚本中找到 start 和 restart 部分进行修改。
将start 和restart中的 $DAEMON 做下面修改:
改成
2). 停止dovecot
3). 重启动dovecot
4). 重新加载 dovecot 配置
Qmail Scanner (或者 SimScan )的区别在于Qmail Scanner是用 perl 写的,SimScan 是用 C 写的,本例已 SimScan 为例。
由于邮件病毒防护和反垃圾邮件比较复杂,根据自己的需要,还需要调整相关参数。
官方网站:http://www.clamav.net/
在Debian系统中,默认SpamAssassin 是不启动的,所以想启动SpamAssassin 需要修改SpamAssassin的配置文件: /etc/default/spamassassin
改成
修改 SpamAssassin 配置文件 /etc/mail/spamassassin/local.cf
< /font>定义垃圾邮件标题
定一垃圾邮件分数
下载地址:http://pldaniels.com/ripmime/
添加默认规则
建立 /var/qmail/control/simcontrol 文件,增加如下内容
在命名行执行下面两个命令
开启SicScan
修改 /etc/tcp.smtp 文件,增加如下内容
重新生成cdb文件
如需要打开 SimScaner 的日志,修改smtp run脚本 /var/qmail/supervise/qmail-smtpd/run ,SIMSCAN_DEBUG 日志调试级别 0-4 ,数值越大越详细;SIMSCAN_DEBUG_FILES是病毒扫描的调参数。
使用ThunderBird 或者其他的邮件客户端发送邮件,看邮件日志是否有内容过滤的相关信息。同时查看邮件信头,如果配置正确信头中会有相关的记录。
以上是基本步骤,具体内容可以参考每个软件的帮助文档,里面有非常详细的介绍。
Webmail有很多种,如: Squirrelmail、OpenWebmail、Horde-webmail、Roundcubemail、Extmail等。找个适合自己的吧,先不写了,等有时间在写。
zlj2208
2010-01-08
转载请注明!
ChangLog:
2010-02-01:增加Dovecot 部分
2010-02-02:增加反病毒模块安装
2010-06-28:修正部分文字描述
本文档主要针对Debian系统编写,大部分CentOS系统也基本适用。
最近看到论坛中有很几个朋友在搞qmail,遇到了很多问题,将以前的文档整理一下。由于不做SA了,没有可以随便折腾的服务器了,昨天在晚上在家里的虚拟机上安装了,将文档完善了一下,希望对初学这有帮助。 这是Qmail的最基本安装,POP3服务使用qmail自带的,如果不满足需求可以使用dovecot做为POP3和IMAP服务器,dovecot很优秀,维护也比较及时;这里也没有反垃圾邮件模块的加入,由于篇幅原因这里就不写了。 对于初学者来讲,建议先看看mail相关的RFC文档,然后搞明白各个软件之间的关系。搞清关系后,出现问题解决起来能有更清晰的思路。 Qmail 是非常优秀的Mail服务器软件,但是现在已经很多年没有更新了,如果建立一个完整的一套邮件系统需要打很多的第三方补丁。如果想系统学习邮件系统级,我还是建议大家使用Postfix 。Postfix维护比较即时,功能也很多,我使用Postfix的体会是,只有你想不到的,没有Postfix做不到的。 有很多Qmail的Fans或组织提供了整合的Qmail解决方案,可以参以下内容: http://www.qmailtoaster.com http://qmail.jms1.net http://www.inter7.com/vpopmail http://www.igenus.org http://www.lifewithqmail.org
本文档编辑、生成PDF均使用OpenOffice3.2.0完成。
一. 安装Qmail相关软件
系统为Debian5
准备工作
卸载exim4
aptitude remove exim4 exim4-base |
安装编译器
aptitude install gcc g++ make aptitude install openssl libssl-dev mysql-server libmysqlclient15-dev |
1. 安装Qmail
1).建立qmail需要的用户2).建立Qmail目录
mkdir /var/qmail |
3).建立qmail和vpopmail需要的用户
建立qmail需要的用户
groupadd qmail groupadd nofiles useradd alias -g qmail -d /var/qmail/alias -s /bin/false useradd qmaild -g qmail -d /var/qmail -s /bin/false useradd qmaill -g qmail -d /var/qmail -s /bin/false useradd qmailp -g qmail -d /var/qmail -s /bin/false useradd qmailq -g nofiles -d /var/qmail -s /bin/false useradd qmailr -g nofiles -d /var/qmail -s /bin/false useradd qmails -g nofiles -d /var/qmail -s /bin/false |
建立vpopmail需要的用户和组
groupadd -g 89 vchkpw useradd -g vchkpw -u 89 -d /home/vpopmail -s /bin/false -p'*' vpopmail mkdir /home/vpopmail chown -R vpopmail.vchkpw /home/vpopmail |
4).下载qmail软件包
cd /usr/local/src wget http://qmail.entropy.nervhq.com/netqmail-1.06.tar.gz tar zxvf netqmail-1.06.tar.gz |
5).下载qmail补丁
mkdir /usr/local/src/patches
cd /usr/local/src/patches wget http://shupp.org/patches/netqmail-1.05-tls-smtpauth-20070417.patch |
6).为netqmail-1.06打补丁
cd /usr/local/src/netqmail-1.06 patch < /usr/local/src/patches/netqmail-1.05-tls-smtpauth-20070417.patch |
7).修改CA的过期时间,给他设置成10年,够多了吧
sed -i 's/-days 366/-days 3650/' Makefile-cert.m |
8 ).如果不想让qmail支持CRAM_MD5认证方式修改下面文件
/usr/local/src/netqmail-1.06/qmail- smtpd.c
将下面代码
#define CRAM_MD5 |
改成
/* #define CRAM_MD5 */ |
9).编译安装qmail
cd /usr/local/src/netqmail-1.06 make setup check make cert make tmprsadh |
10).配置qmail
如果正确配置了dns
cd /usr/local/src/netqmail-1.06 ./config-fast |
如果没配置dns使用下面命令
cd /usr/local/src/netqmail-1.06 ./config-fast your.domain.name |
可以使用下面命令得到fqdn主机名
hostname -f |
2. 安装 ucspi-tcp
ucspi-tcp 是代替inetd的一套程序。
cd /usr/local/src wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz tar zxvf ucspi-tcp-0.88.tar.gz cd /usr/local/src/ucspi-tcp-0.88 patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch make make setup check |
程序安装的位置为: /usr/local/bin
ucspi-tcp安装完毕.
3. 安装daemontools
daemontools是一套管理UNIX服务的工具。
mkdir -p /package cd /package wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz chmod 1755 /package tar zxvf daemontools-0.76.tar.gz cd /package/admin/daemontools-0.76/src patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch cd /package/admin/daemontools-0.76 package/install |
4. 安装autorespond
cd /usr/local/src/ wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz tar zxvf qmailrocks/autorespond-2.0.5.tar.gz cd autorespond-2.0.5 make && make install |
5. 安装ezmlm
ezmlm是一套邮件列表管理软件。
cd /usr/local/src wget http://www.inter7.com/devel/ezmlm-0.53-idx-0.41.tar.gz tar zxvf ezmlm-0.53-idx-0.41.tar.gz cd ezmlm-0.53-idx-0.41 make && make setup |
6. 安装vpopmail
1). 准备工作
mkdir ~vpopmail/etc chown vpopmail:vchkpw ~vpopmail/etc echo "localhost|0|vpopmail|passwd@|vpopmail" > ~vpopmail/etc/vpopmail.mysql chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql chmod 640 ~vpopmail/etc/vpopmail.mysql mysql -u root -p -e "CREATE DATABASE vpopmail;" mysql -u root -p -e "GRANT all ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'passwd@'; " |
测试vpopmail用户是否能够连接数据库
mysql -u vpopmail -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 35 Server version: 5.0.51a-24+lenny2 (Debian) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | vpopmail | +--------------------+ 2 rows in set (0.00 sec) mysql> quit |
2). 编译安装vpopmail
cd /usr/local/src wget http://cdnetworks-kr-1.dl.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.30/vpopmail-5.4.30.tar.gz tar zxvf vpopmail-5.4.30.tar.gz |
cd /usr/local/src/vpopmail-5.4.30 ./configure --enable-logging=v \ --enable-auth-module=mysql \ --disable-passwd \ --enable-clear-passwd \ --disable-many-domains \ --enable-auth-logging \ --enable-sql-logging \ --enable-valias \ --enable-mysql-limits |
make && make install-strip |
3).建立虚拟域和虚拟用户
/home/vpopmail/bin/vadddomain mydomain.com echo mydomain.com > ~vpopmail/etc/defaultdomain /home/vpopmail/bin/vadduser test 123456 |
4).检查虚拟用户是否建立正确
/home/vpopmail/bin/vuserinfo test |
下面为输出信息
name: test passwd: $1$5AFlHref$Ms7f.rjHAe34cIJ.3.xoF. clear passwd: 123456 comment/gecos: test uid: 0 gid: 0 flags: 0 gecos: test1 limits: No user limits set. dir: /home/vpopmail/domains/mydomain.com/test quota: NOQUOTA usage: NOQUOTA account created: Fri Jan 8 18:12:33 2010 last auth: Never logged in |
二. 启动qmail
1. 系统启动脚本
建立 /var/qmail/bin/qmailctl 启动脚本
#!/bin/sh # For Red Hat chkconfig # chkconfig: - 80 30 # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` case "$1" in start) echo "Starting qmail..." if svok /service/qmail-send ; then svc -u /service/qmail-send /service/qmail-send/log echo " qmail-send" else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-smtpd" else echo "qmail-smtpd supervise not running" fi if svok /service/qmail-pop3d ; then svc -u /service/qmail-pop3d /service/qmail-pop3d/log echo " qmail-pop3d" else echo "qmail-pop3d supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log echo " qmail-pop3d" svc -d /service/qmail-pop3d /service/qmail-pop3d/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/log svstat /service/qmail-pop3d svstat /service/qmail-pop3d/log qmail-qstat ;; doqueue|alrm|flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok svc -a /service/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /service/qmail-send echo "Sending HUP signal to qmail-smtpd." svc -h /service/qmail-smtpd echo "Sending HUP signal to qmail-pop3d." svc -h /service/qmail-pop3d ;; pause) echo "Pausing qmail-send" svc -p /service/qmail-send echo "Pausing qmail-smtpd" svc -p /service/qmail-smtpd echo "Pausing qmail-pop3d" svc -p /service/qmail-pop3d ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd echo "Continuing qmail-pop3d" svc -c /service/qmail-pop3d ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Stopping qmail-pop3d." svc -d /service/qmail-pop3d /service/qmail-pop3d/log echo "* Restarting qmail-pop3d." svc -u /service/qmail-pop3d /service/qmail-pop3d/log ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- schedules queued messages for immediate delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue flush -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 #end of qmailctl |
赋予脚本执行权限,并建立相关连接
chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/bin ln -s /var/qmail/bin/qmailctl /etc/init.d/qmaild |
2. 建立 supervise 脚本
建立 supervise 目录
mkdir -p /var/qmail/supervise/qmail-send/log \ /var/qmail/supervise/qmail-smtpd/log \ /var/qmail/supervise/qmail-pop3d/log |
然后建立log文件目录
mkdir -p /var/log/qmail/smtpd \ /var/log/qmail/send \ /var/log/qmail/pop3d chown -R qmaill /var/log/qmail |
1). 建立 /var/qmail/rc 文件
#!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="$PATH:/var/qmail/bin" \ qmail-start "`cat /var/qmail/control/defaultdelivery`" #end of /var/qmail/rc |
echo ./Maildir/ > /var/qmail/control/defaultdelivery |
2). 建立 qmail-send 脚本
建立 /var/qmail/supervise/qmail-send/run 文件
#!/bin/sh exec /var/qmail/rc |
建立 /var/qmail/supervise/qmail-send/log/run 文件
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/send |
3).建立 qmail-smtpd 脚本
建立 /var/qmail/supervise/qmail-smtpd/run 文件
#!/bin/sh QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g vpopmail` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` LOCAL=`head -1 /var/qmail/control/me` if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1 fi if [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1 fi exec /usr/local/bin/softlimit -m 40000000 \ /usr/local/bin/tcpserver -v -H -R -l "$LOCAL" \ -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \ /var/qmail/bin/qmail-smtpd \ /home/vpopmail/bin/vchkpw /bin/true 2>&1 |
建立 concurrencyincoming 控制文件
echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming |
注意: 根据你的操作系统和硬件平台的不同, 可能需要调整softlimit命令的的内存限制参数. 如果你的系统出现连接25端口失败和无法接收远程系统发送的邮件, 或者看到了类似下面这样的错误消息:
/usr/local/bin/tcpserver: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory |
试一下把这个参数调整到4000000或者更大.
建立 /var/qmail/supervise/qmail-smtpd/log/run 文件
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd |
4). 配置pop3脚本
建立 /var/qmail/supervise/qmail-pop3d/run 文件
#!/bin/sh PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH exec tcpserver -H -R -v -c100 0 110 qmail-popup 127.0.0.1 \ /home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1 |
建立 /var/qmail/supervise/qmail-pop3d/log/run 文件
#!/bin/sh PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/pop3d 2>&1 |
5).设置脚本的可执行权限
chmod 755 /var/qmail/rc
chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run chmod 751 /var/qmail/supervise/qmail-pop3d/run chmod 751 /var/qmail/supervise/qmail-pop3d/log/run |
6).建立 supervise 目录到 /service 目录的链接
ln -s /var/qmail/supervise/qmail-send \ /var/qmail/supervise/qmail-smtpd \ /var/qmail/supervise/qmail-pop3d \ /service |
/service 目录是 daemontools 安装时建立的目录.
注意: 建立这个链接之后 qmail 系统会很快自动被启动起来。
7).SMTP访问控制
允许本地主机通过SMTP方式发送邮件,/etc/tcp.smtp 为tcprules的配置文件,如果配置可以设定哪些IP允许访问,哪些IP不允许访问。
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp qmailctl cdb |
8).启动qmail服务器方法
可以使用qmailctl命令来控制qmail的启动、运行、查看状态等。
启动qmail
qmailctl start |
停止qmail
qmailctl stop |
重启动qmail
qmailctl restart |
查看qmail状态
qmailctl stat |
查看qmail队列
qmailctl queue |
9).使用qmail的sendmail程序替换原有的sendmail程序
mv /usr/lib/sendmail /usr/lib/sendmail.old mv /usr/sbin/sendmail /usr/sbin/sendmail.old ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin |
10).建立系统别名文件
建立这些系统别名, 取决于你想让这些邮件发送到哪里(一个本地用户或者一个远程地址)并且适当的创建一个.qmail 文件集合. 举个例子, 加入你想让本地用户 dave 接收发给系统管理员和邮件管理员的邮件, 就这么作:
echo YourUser > /var/qmail/alias/.qmail-root echo YourUser > /var/qmail/alias/.qmail-postmaster ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-abuse chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster |
11).重启动qmail
qmailctl restart |
检查进行是否存在
ps uxawww |
root 2103 0.2 0.4 2808 1252 ? Ss 19:21 0:00 /bin/sh /command/svscanboot root 2112 0.3 0.1 1780 372 ? S 19:21 0:00 svscan /service root 2113 0.1 0.1 1608 276 ? S 19:21 0:00 readproctitle service errors: ............................................................................. ............................................................................. ................................................... root 2115 0.1 0.1 1620 324 ? S 19:21 0:00 supervise qmail-smtpd root 2116 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log root 2117 0.1 0.1 1620 328 ? S 19:21 0:00 supervise qmail-send root 2118 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log vpopmail 2119 0.4 0.2 1824 568 ? S 19:21 0:00 /usr/local/bin/tcpserver -v -H -R -l debian5.mydomain.com -x /etc/tcp.smtp.cdb -c 20 -u 89 -g 89 0 smtp /usr/local/bin/rblsmtpd -r bl.spamcop.net /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true root 2120 0.1 0.1 1620 324 ? S 19:21 0:00 supervise qmail-pop3d qmaill 2121 0.3 0.1 1628 324 ? S 19:21 0:00 /usr/local/bin/multilog t /var/log/qmail/smtpd root 2122 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log qmails 2123 0.7 0.1 1796 408 ? S 19:21 0:00 qmail-send qmaill 2125 0.3 0.1 1628 320 ? S 19:21 0:00 /usr/local/bin/multilog t /var/log/qmail/send root 2126 0.2 0.1 1644 332 ? S 19:21 0:00 tcpserver -H -R -v -c100 0 110 qmail-popup 127.0.0.1 /home/vpopmail/bin/vchkpw qmail-pop3d Maildir qmaill 2127 0.4 0.1 1628 324 ? S 19:21 0:00 multilog t s100000 n20 /var/log/qmail/pop3d root 2134 0.0 0.1 1760 348 ? S 19:21 0:00 qmail-lspawn ./Maildir/qmailr 2135 0.0 0.1 1756 344 ? S 19:21 0:00 qmail-rspawn qmailq 2136 0.0 0.1 1748 360 ? S 19:21 0:00 qmail-clean |
三. 测试收发邮件
1. 发信测试
建立base64编码脚本/usr/local/bin/base64.pl
#!/usr/bin/perl -w use strict; use MIME::Base64; print "Press Enter to exit. \n"; print "Input you string: "; my $line; while( $line = <STDIN> ) { if( $line ne "\n" ){ chomp($line) ; print "Base64 encode is : " . encode_base64($line) ; print "Input you string: "; } else { exit; } } |
赋予脚本执行权限
chmod 755 /usr/local/bin/base64.pl |
/usr/local/bin/base64.pl Press Enter to exit. Input you string: [email protected] Base64 encode is : dGVzdEBteWRvbWFpbi5jb20= Input you string: 123456 Base64 encode is : MTIzNDU2 Input you string: |
测试发邮件
telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 debian5.mydomain.com ESMTP ehlo localhost 250-debian5.mydomain.com 250-STARTTLS 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN PLAIN auth login 334 VXNlcm5hbWU6 dGVzdEBteWRvbWFpbi5jb20= 334 UGFzc3dvcmQ6 MTIzNDU2 235 ok, go ahead (#2.0.0) mail from:[email protected] 250 ok rcpt to:[email protected] 250 ok data 354 go ahead subject:test mail from:[email protected] to:[email protected] test mail test mail . 250 ok 1262994953 qp 16522 quit 221 debian5.mydomain.com Connection closed by foreign host. |
2. 收信测试
telnet 192.168.1.80 110 +OK <[email protected]> user [email protected] +OK pass 123456 +OK list +OK 1 349 . retr 1 +OK Return-Path: <[email protected]> Delivered-To: [email protected] Received: (qmail 16522 invoked by uid 89); 8 Jan 2010 23:55:13 -0000 Received: from unknown (HELO localhost) ([email protected]@127.0.0.1) by debian5.mydomain.com with ESMTPA; 8 Jan 2010 23:55:13 -0000 subject:test mail from:[email protected] to:[email protected] test mail test mail . quit +OK |
3. 日志文件
无论做什么一定要养成看日志文件的好习惯。通过以下日志可以使用下面命令,查看准确时间
tail /var/log/qmail/xxxx/current | tai64nlocal |
Smtpd日志文件 /var/log/qmail/smtpd/current
send日志文件 /var/log/qmail/send/current
pop3d日志文件 /var/log/qmail/pop3d/current 查看日志
tail /var/log/qmail/smtpd/current -f | tai64nlocal |
2010-01-08 18:52:16.810445500 tcpserver: status: 0/20 2010-01-08 18:52:46.334378500 tcpserver: status: 1/20 2010-01-08 18:52:46.340859500 tcpserver: pid 16515 from 127.0.0.1 2010-01-08 18:52:46.345675500 tcpserver: ok 16515 debian5.mydomain.com:127.0.0.1:25 :127.0.0.1::37304 2010-01-08 18:53:59.169586500 tcpserver: end 16515 status 0 2010-01-08 18:53:59.169597500 tcpserver: status: 0/20 2010-01-08 18:54:06.275185500 tcpserver: status: 1/20 2010-01-08 18:54:06.275196500 tcpserver: pid 16519 from 127.0.0.1 2010-01-08 18:54:06.275204500 tcpserver: ok 16519 debian5.mydomain.com:127.0.0.1:25 :127.0.0.1::37305 2010-01-08 18:55:56.105737500 tcpserver: end 16519 status 0 2010-01-08 18:55:56.105749500 tcpserver: status: 0/20 |
查看日志
tail /var/log/qmail/send/current -f | tai64nlocal |
日志内容如下
2010-01-08 18:34:57.871522500 status: local 0/10 remote 0/20 2010-01-08 18:51:18.937726500 status: exiting 2010-01-08 18:52:16.729858500 status: local 0/10 remote 0/20 2010-01-08 18:55:53.945775500 new msg 76048 2010-01-08 18:55:53.945786500 info msg 76048: bytes 284 from <[email protected]> qp 16522 uid 89 2010-01-08 18:55:54.014909500 starting delivery 1: msg 76048 to local [email protected] 2010-01-08 18:55:54.014920500 status: local 1/10 remote 0/20 2010-01-08 18:55:54.172419500 delivery 1: success: did_0+0+1/ 2010-01-08 18:55:54.172429500 status: local 0/10 remote 0/20 2010-01-08 18:55:54.175344500 end msg 76048 |
tail /var/log/qmail/pop3d/current | tai64nlocal |
日志内容如下
2010-01-08 19:01:45.169535500 tcpserver: status: 1/100 2010-01-08 19:01:45.169551500 tcpserver: pid 16531 from 127.0.0.1 2010-01-08 19:01:45.197221500 tcpserver: ok 16531 localhost:127.0.0.1:110 :127.0.0.1::46660 2010-01-08 19:01:53.033122500 tcpserver: end 16531 status 256 2010-01-08 19:01:53.033133500 tcpserver: status: 0/100 2010-01-08 19:03:03.102296500 tcpserver: status: 1/100 2010-01-08 19:03:03.102307500 tcpserver: pid 16534 from 192.168.1.100 2010-01-08 19:03:03.122798500 tcpserver: ok 16534 :192.168.1.80:110 :192.168.1.100::50031 2010-01-08 19:04:43.578479500 tcpserver: end 16534 status 256 2010-01-08 19:04:43.578508500 tcpserver: status: 0/100 |
vpopmail日志文件 /var/log/mail.log
shell# tail /var/log/mail.log Jan 8 18:35:42 debian5 vpopmail[16417]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1 Jan 8 18:36:41 debian5 vpopmail[16425]: vchkpw-webmail: vpopmail user not found [email protected]:127.0.0.1 Jan 8 18:37:16 debian5 vpopmail[16428]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1 Jan 8 18:44:47 debian5 vpopmail[16445]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1 Jan 8 18:53:10 debian5 vpopmail[16516]: vchkpw-smtp: (PLAIN) login success [email protected]:127.0.0.1 Jan 8 18:54:36 debian5 vpopmail[16520]: vchkpw-smtp: (PLAIN) login success [email protected]:127.0.0.1 Jan 8 19:03:28 debian5 vpopmail[16535]: vchkpw-pop3: (PLAIN) login success [email protected]:192.168.1.100 |
四. 安装POP3/IMAP4软件
1. 安装doevcot
1). 下载 doevcot 软件包 doevcot 的官方网站:http://www.dovecot.org/
cd /usr/local/src/ wget http://www.dovecot.org/releases/1.2/dovecot-1.2.9.tar.gz tar zxvf dovecot-1.2.9.tar.gz |
./configure \ --with-vpopmail \ --with-ssl=openssl \ --without-passwd \ --without-passwd-file \ --without-shadow \ --without-pam \ --without-checkpassword \ --without-bsdauth \ --without-gssapi \ --without-sia \ --without-ldap \ --without-static-userdb \ --without-prefetch-userdb \ --without-sql \ --without-pgsql \ --without-mysql \ --without-sqlite |
make make install |
3). 建立dovecot用户
useradd -d /dev/null -s /bin/false -c 'Dovecot user' dovecot |
2. 配置doevcot
1). 建立dovecot配置文件
如果在编译时候没有指定配置文件的位置,那么会在 /usr/local/etc/ 路径下生成配置文件的样例,可以用来参考,文件名为dovecot.conf 。dovecot的配置相对比较简单,可以参照dovecot的官方wiki进行配置,上面内容很详细。
建立 /usr/local/etc/dovecot.conf 文件,内容如下:
## Basic config base_dir = /usr/local/var/run/dovecot/ protocols = imap disable_plaintext_auth = no shutdown_clients = yes ## Logging #auth_verbose=yes #auth_debug=yes #auth_debug_passwords=yes #mail_debug=yes #log_path = /dev/stderr #info_log_path = /dev/stderr #log_timestamp = "" ## SSL settings ssl_cert_file = /var/qmail/control/servercert.pem ssl_key_file = /var/qmail/control/servercert.pem #verbose_ssl = yes ## Login processes login_dir = /usr/local/var/run/dovecot/login login_user = dovecot login_process_per_connection = yes login_processes_count = 3 login_max_processes_count = 128 ## Mailbox locations and namespaces mail_location = maildir:~/Maildir namespace private { separator = . prefix = INBOX. inbox = yes } ## Mail processes verbose_proctitle = yes first_valid_uid = 89 last_valid_uid = 89 ## Maildir-specific settings maildir_copy_with_hardlinks = yes maildir_copy_preserve_filename = no ## IMAP specific settings protocol imap { #listen = 127.0.0.1:143 mail_plugins = quota imap_quota } ## POP3 specific settings protocol pop3 { #listen = 127.0.0.1:110 pop3_no_flag_updates = no pop3_uidl_format = %v-%u mail_plugins = quota } ## Authentication processes auth default { mechanisms = plain passdb vpopmail { args = } userdb vpopmail { } user = vpopmail count = 1 } ## Plugin settings plugin { quota = maildir } |
2). 建立dovecot运行是需要的目录
mkdir -m 0755 /usr/local/var \ /usr/local/var/run \ /usr/local/var/run/dovecot |
3). 建立dovecot启动脚本
dovecot的安装包中有一个Sys V风格的脚本,将其复制到 /etc/init.d/ 目录下,并赋予执行权限即可。
cp /usr/local/src/dovecot-1.2.9/doc/dovecot-initd.sh /etc/init.d/dovecot chmod 755 /etc/init.d/dovecot |
3. 启停止dovecot
1). 启动dovecot/etc/init.d/dovecot start |
在启动 dovecot 的时候会有下面一些提示:
If you have trouble with authentication failures, enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork This message goes away after the first successful login. |
如果不想在启动的时候出现这些信息,按照如下方法修改启动脚本
在 /etc/init.d/dovecot 脚本中找到 start 和 restart 部分进行修改。
将start 和restart中的 $DAEMON 做下面修改:
$DAEMON |
$DAEMON >/dev/null |
2). 停止dovecot
/etc/init.d/dovecot stop |
3). 重启动dovecot
/etc/init.d/dovecot restart |
4). 重新加载 dovecot 配置
/etc/init.d/dovecot reload |
4. 测试IMAP4服务器
通过telnet命令测试IMAP服务器是否启动
shell# telnet localhost 143 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN] Dovecot ready. a login test 123456 a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH QUOTA] Logged in a list "" * * LIST (\HasChildren) "." "INBOX" * LIST (\HasNoChildren) "." "INBOX.Trash" * LIST (\HasNoChildren) "." "INBOX.Drafts" * LIST (\HasNoChildren) "." "INBOX.Sent" a OK List completed. a select inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 16 EXISTS * 0 RECENT * OK [UNSEEN 1] First unseen. * OK [UIDVALIDITY 1264947842] UIDs valid * OK [UIDNEXT 17] Predicted next UID * OK [HIGHESTMODSEQ 1] Highest a OK [READ-WRITE] Select completed. a search all * SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a OK Search completed (0.001 secs). a fetch 1 rfc822 * 1 FETCH (FLAGS (\Seen) RFC822 {344} Return-Path: <[email protected]> Delivered-To: [email protected] Received: (qmail 14977 invoked by uid 89); 24 Jan 2010 11:36:47 -0500 Received: from localhost ([email protected]@127.0.0.1) by debian5.mydomain.com with SMTP; 24 Jan 2010 11:36:47 -0500 subject:test mail from:[email protected] to:[email protected] lafskjlas jalfjal ) a OK Fetch completed. a logout * BYE Logging out a OK Logout completed. Connection closed by foreign host. |
五. 安装反垃圾邮件和反病毒模块
Qmail 在邮件病毒防护和反垃圾邮件的大体流程是这样的,Qmail收到邮件后,将queue中邮件交给 Qmail Scanner (或者 SimScan )处理,然后经由Qmail Scanner (或者 SimScan )交给 ClamAV 和 SpamAssassin 处理。Qmail Scanner (或者 SimScan )的区别在于Qmail Scanner是用 perl 写的,SimScan 是用 C 写的,本例已 SimScan 为例。
由于邮件病毒防护和反垃圾邮件比较复杂,根据自己的需要,还需要调整相关参数。
1. 安装clamav
Clam AntiVirus 是一款 UNIX 下开源的 (GPL) 反病毒工具包,专为邮件网关上的电子邮件扫描而设计。该工具包提供了包含灵活且可伸缩的监控程序、命令行扫描程序以及用于自动更新数据库的高级工具在内的大量实用程序。该工具包的核心在于可用于各类场合的反病毒引擎共享库。官方网站:http://www.clamav.net/
aptitude install clamav-base clamav-daemon clamav-data |
2. 安装SpamAssassin
SpamAssassin是一套邮件内容过滤软件,是用perl编写的。现在由Apache基金会维护。想了解更多内容,请参阅官方网站:http://spamassassin.apache.org/ 。Debian中自带了SpamAssassin套件,因此使用atp命令安装,省去了编译安装的步骤。aptitude install spamassassin |
在Debian系统中,默认SpamAssassin 是不启动的,所以想启动SpamAssassin 需要修改SpamAssassin的配置文件: /etc/default/spamassassin
ENABLED=0 |
改成
ENABLED=1 |
修改 SpamAssassin 配置文件 /etc/mail/spamassassin/local.cf
< /font>定义垃圾邮件标题
rewrite_header Subject *****SPAM***** |
定一垃圾邮件分数
required_score 7.0 |
3. 安装 ripmime
Ripmime的主要功能是解码邮件附件中的内容,由PLDaniels编写的。下载地址:http://pldaniels.com/ripmime/
cd /usr/local/src/ wget http://pldaniels.com/ripmime/ripmime-1.4.0.9.tar.gz cd ripmime-1.4.0.9 make make install |
4. 安装SimScan
SimScan 是用来在SMTP会话阶段阻止病毒、垃圾邮件、特定附件的一个应用程序,因此会在处理邮件的过程中占用一些时间。这个项目是开源的,是基于C语言开发的,虽然很小,但非常有效。 下载地址:http://www.inter7.com/simscan/
cd /usr/local/src/ wget http://cdnetworks-kr-1.dl.sourceforge.net/project/simscan/simscan/simscan-1.4.0/simscan-1.4.0.tar.gz tar zxvf simscan-1.4.0.tar.gz cd /usr/local/src/simscan-1.4.0 ./configure --enable-user=clamav \ --enable-clamav=y \ --enable-spam=y \ --enable-spam-passthru=y \ --enable-per-domain=y \ --enable-ripmime \ --enable-attach=y \ --enable-received=y \ --enable-clamavdb-path=/var/clamav make make install-strip |
添加默认规则
建立 /var/qmail/control/simcontrol 文件,增加如下内容
:clam=yes,spam=yes,spam_passthru=yes,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif |
在命名行执行下面两个命令
/var/qmail/bin/simscanmk |
/var/qmail/bin/simscanmk -g |
开启SicScan
修改 /etc/tcp.smtp 文件,增加如下内容
:allow,QMAILQUEUE="/var/qmail/bin/simscan" |
重新生成cdb文件
qmailctl cdb |
如需要打开 SimScaner 的日志,修改smtp run脚本 /var/qmail/supervise/qmail-smtpd/run ,SIMSCAN_DEBUG 日志调试级别 0-4 ,数值越大越详细;SIMSCAN_DEBUG_FILES是病毒扫描的调参数。
export SIMSCAN_DEBUG=4 |
5. 测试
使用ThunderBird 或者其他的邮件客户端发送邮件,看邮件日志是否有内容过滤的相关信息。同时查看邮件信头,如果配置正确信头中会有相关的记录。
以上是基本步骤,具体内容可以参考每个软件的帮助文档,里面有非常详细的介绍。
Webmail有很多种,如: Squirrelmail、OpenWebmail、Horde-webmail、Roundcubemail、Extmail等。找个适合自己的吧,先不写了,等有时间在写。
相关阅读 更多 +
排行榜 更多 +