本帖最后由 zlj2208 于 2010-06-30 20:48 编辑
Qmail install on Debian5
zlj2208
2010-01-08
转载请注明!
修改记录:
2010-02-01:增加Dovecot 部分
2010-02-02:增加反病毒模块安装
2010-06-28:修正部分文字描述
本文档主要针对Debian系统编写,大部分Redhat/Fedora/CentOS系统也基本适用。
最近看到论坛中有很几个朋友在搞qmail,遇到了很多问题,将以前的文档整理一下。由于不做SA了,没有可以随便折腾的服务器了,昨天在晚上在家里的虚拟机上安装了,将文档完善了一下,希望对初学这有帮助。
这是Qmail的最基本安装,POP3服务使用qmail自带的,如果不满足需求可以使用dovecot做为POP3和IMAP服务器,dovecot很优秀,维护也比较及时;这里也没有反垃圾邮件模块的加入,由于篇幅原因这里就不写了。
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/
一. 安装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目录
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软件包
5).下载qmail补丁
6).为netqmail-1.06打补丁
cd /usr/local/src/netqmail-1.06
patch < /usr/local/src/patchs/netqmail-1.05-tls-smtpauth-20070417.patch |
7).修改CA的过期时间,给他设置成10年,够多了吧
sed -i 's/-days 366/-days 3650/' Makefile-cert.mk |
8 ).如果不想让qmail支持CRAM_MD5认证方式修改下面文件
/usr/local/src/netqmail-1.06/qmail-smtpd.c
将下面代码
改成
9).编译安装qmail
cd /usr/local/src/netqmail-1.06
make setup check
make cert
make tmprsadh |
设置证书文件权限
chown vpopmail.vchkpw /var/qmail/control/servercert.pem |
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 |
Qmail安装完毕.
2. 安装 ucspi-tcp
ucspi-tcp 是代替inetd的一套程序。
程序安装的位置为: /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
5. 安装ezmlm
ezmlm是一套邮件列表管理软件。
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/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
;;
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 /usr/local/bin/rblsmtpd \
-r bl.spamcop.net /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 |
注意: concurrencyincoming并不是标准的qmail控制文件. 它是上面脚本的一个要素. 并且, 第一个LOCAL 行上面的是"破折号 + 数字1", 下面的tcpserver行上的参数是"破折号 + 小写字母l" . (由于英文小写字母l和数字1容易混淆, 原作者特意补充的注意事项. 由译者将被提到两行修改成为红色. 这也是为什么作者希望读者直接拷贝脚本而不是自行输入避免脚本出错的主要原因之一. 另外注意这个脚本中很多字体很小的引号和反引号. 译者注)
注意: 根据你的操作系统和硬件平台的不同, 可能需要调整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).启动qmail服务器方法
可以使用qmailctl命令来控制qmail的启动、运行、查看状态等。
启动qmail
停止qmail
重启动qmail
查看qmail状态
查看qmail队列
8).SMTP访问控制
允许本地主机通过SMTP方式发送邮件,/etc/tcp.smtp 为tcprules的配置文件,如果配置可以设定哪些IP允许访问,哪些IP不允许访问。
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb |
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
检查进行是否存在
[ 本帖最后由 zlj2208 于 2010-1-23 14:28 编辑 ] |