Qmail服务器安装说明 //from 杨宇 7:50 2006-2-20 一、对qmail服务器的要求: 1、 稳定,速度快 2、 支持虚拟域 3、 支持垃圾邮件过滤 4、 支持smtp审核 5、 支持smtp病毒扫描 6、 支持web界面收发 二、Qmail的特点: 1、 免费。 2、 配置相对简单。 3、 速度快,占资源少。Qmail在一个中等规模的系统可以投递大约百万封邮件,甚至在一台486一天上能处理超过10万封邮件, 并且支持并行投递。 4、 安全性高,历史证明,Qmail服务器很少存在安全问题。为了验证Qmail的安全性,Qmail的支持者甚至出资$1000悬赏寻找 Qmail的安全漏洞,一年以后,该奖金没有被领取,而被捐献给自由软件基金会。目前,Qmail的作者也出资$500来寻求 Qmail的安全漏洞。 5、 管理简单,支持虚拟域管理,使用第三方软件Vpopmail来支持虚拟POP域。使用这个软件包,POP3用户不需要具有系统的正 式帐户。 6、 Qmail最大的问题就出在发送邮件给多个接收者的处理上。若发送一个很大的邮件给同一个域中的多个用户,Sendmail将只 向目的邮件服务器发送一个邮件拷贝。而Qmail将并行地连接多次,每次都发送一个拷贝给一个用户。若用户日常要发送大 邮件给多个用户,使用Qmail将浪费很多带宽。可以这么认为:Sendmail优化节省带宽资源,Qmail优化节省时间。 7、 (摘自其他人的观点)Qmail还具有一些其他的缺憾。如它不是完全遵从标准,它不支持DSN,作者认为DSN是一个即将消亡 的技术,而Qmail的VERP可以完成同样的工作,而又不象DSN依赖于其他主机的支持。Qmail另外一个问题是其不遵从支持7bit 系统标准,而每次都发送8bit。若邮件接收一方不能处理这种情况,就会出现邮件乱码的情况。 三、Linux系统的安装 1、 分区: /boot 500M 一般200M就够用了 / 2G 根据经验,不宜太小,一旦把根占满了,系统也就完了 /var 5G config文件和log文件的存放点,会自动增长。尽量大一些 /usr 8G 软件的主要安装目录 /opt 5G 有些软件的默认安装路径,例如oracle,可以适当大一些 swap 1G 一个G应该够用了,尽量用中间的空间,寻道时间短 /home …… 系统应用的主目录,空间应该是最大的,剩下的都给他吧 2、 删除默认安装的内容:sendmail、postfix、IPCHAINS和IPTABLE-IPV6也去掉算了,一个IPTABLE就够了 需要安装的内容:httpd、mysql、php、spamassassin(判断是否垃圾邮件)perl、gcc、make,建议mysql的develop 开发包要装上,EDITOR一定要装,,当然,如果没有把握,也可以选择everything,最后再把不用 的服务停掉。 3、 安装结束后,注意为了能在远程配置,将iptable关掉,将telnet、vsftpd打开,因为默认root用户不能远程登录,所以需建一个 普通用户,出于安全考虑,不要打开root的远程登录。另外,打开httpd、mysqld。为了安全,为mysql设置密码, 命令是:# mysqladmin –u root password ‘密码’ 四、本文档用到的软件 1、 Qmail-1.03.tar.gz Mail服务器的基本软件,提供smtp服务。 2、 Daemontools-0.76.tar.gz 监控,管理mail的启动,正常运行 3、 Ucspi-tcp-0.88.tar.gz 安全工具 4、 Vpopmail-5.2.1.tar.gz 提供虚拟域及pop3 5、 Qmail-scanner-1.2.gz 病毒扫描程序。 6、 autorespond-2.0.2.tar.gz 自动转发工具,scanner必需 7、 maildrop-1.6.3.tar.bz2 定义不合法邮件的处理策略,scanner必需 8、 Igenus_2_20030516_snap.tgz 提供web支持,PHP。 9、 Clamav-0.60.tar.gz 杀毒软件,与Qmail-scanner协同工作,提供病毒库。 10、若干patch,没有他们可能会编译不过去。具体安装步骤时再详细说明。 五、配置网络环境 在/etc/resolv.conf中加入正确的DNS SERVER。查看/etc/nsswitch的host记录是否file dns,以及/etc/sysconfig/network 文件设置是否正确。最后一定要用traceroute命令看能否出去,不要用ping ,ping会自动寻找路由,所以结果不一定准确。 写一个文本文件内容如下: 存为phpinfo.php文件,ftp到web目录下,然后在浏览器里http://ip地 址/hphinfo.php,查看信息是否正确,判断php与httpd,mysql是否能协同工作。 六、安装步骤 1、软件准备: qmail-1.03.tar.gz daemontools-0.76.tar.gz ucspi-tcp-0.88.tar.gz vpopmail-5.2.1.tar.gz igenus_2_2003_snap.tgz qmail-scanner-1.20.gz clamav-0.60.tar.gz autorespond-2.0.2.tar.gz maildrop-1.6.3.tar.bz2 patch: qmail-1.03.errno.patch qmail-1.03.qmail.local.patch qmail-1.03.patch qmail-maildir++.patch qmailqueue.patch qmail-smtpd-auth-0.31.tar.gz ucspi-tcp-0.88.errno.patch daemontools-0.76.errno.patch 2、将以上所有软件全部cp或者ftp到/usr/local/src下面。当然,可以是任何自定义的目录。 3、安装qmail # cd /usr/local/src # tar zxf qmail-1.03.tar.gz # tar zxf qmail-smtpd-auth-0.31.tar.gz # cp qmail-smtpd-auth-0.31/base64.* qmail-1.03 # patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch # cd qmail-1.03 # patch -p1 < ../qmail-103.patch # patch -p1 < ../qmailqueue-patch # patch -p1 < ../qmail-maildir++.patch # patch -p1 < ../qmail-1.03.errno.patch # patch -p1 < ../qmail-1.03.qmail_local.patch # vi qmail-smtpd.c //将函数straynewline中的451改为553 //将451改为553是为避免当其它服务器给你发来无效格式的邮件时,你的服务器陷入循环应答。 # mkdir /var/qmail 创建Qmail的主目录。 再进行Qmail安装之前,一定先要创建Qmail用户,Qmail的安装程序已经预先创建了一个脚 本文件INSTALL.ids,用来自动生成所需要的用户和组。 # cp INSTALL.ids IDS # vi IDS 编辑IDS文件使之形式如下: groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails # chmod 700 IDS 然后执行这个命令: # ./IDS 创建用户和组 # make setup check 执行安装 # ./config-fast mail4.beijingvst.com 至此,Qmail安装完毕。 4、安装ucspi-tcp-0.88 # cd /usr/local/src # tar zxf ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88 # patch < ../ucspi-tcp-0.88.errno.patch # make # make setup check 5、安装daemontools-0.76 # cd /usr/local/src # mkdir /package # cp daemontools-0.76.tar.gz /package # cd /package # tar zxf daemontools-0.76.tar.gz # cd admin # cd daemontools-0.76 # cd src # patch < /usr/local/src/daemontools-0.76.errno.patch # cd .. # ./package/install 6、安装vpopmail,以支持虚拟域,审核的smtp # mkdir /home/vpopmail # groupadd vchkpw # useradd -g vchkpw vpopmail # mysql –u root –p mysql> create database vpopmail; mysql> grant all on vpopmail.* to vpopmail@localhost identified by "密码"; mysql> exit # cd /usr/local/src/ # tar zxf vpopmail-5.2.1.tar.gz # cd vpopmail-5.2.1 # vi vmysql.h #vi vmysql.h 按如下内容修改: #define MYSQL_UPDATE_SERVER "localhost" (mysql服务器名) #define MYSQL_UPDATE_USER "vpopmail" (用户名) #define MYSQL_UPDATE_PASSWD "123456" (改成在mysql中vpopmail的密码) #define MYSQL_READ_SERVER "localhost" (mysql服务器名) #define MYSQL_READ_USER "vpopmail" (用户名) #define MYSQL_READ_PASSWD "123456" (改成在mysql中vpopmail的密码) # vi abc.sh 创建一个configure的脚本文件,内容如下: #!/bin/sh ./configure --prefix=/home/vpopmail \ --enable-mysql=y \ --enable-incdir=/usr/include/mysql \ --enable-libdir=/usr/lib/mysql \ --enable-default-domain=beijingvst.com \ --enable-passwd=n \ --enable-defaultquota=104857600 \ --enable-tcprules-prog=/usr/local/bin/tcprules \ --enable-tcpserver-file=/etc/tcp.smtp \ --enable-vpopuser=vpopmail \ --enable-vpopgroup=vchkpw \ --enable-ip-alias-domains=n \ --enable-sqwebmail-pass=y \ --enable-md5-passwords=y 创建/etc/tcp.smtp文件 # echo `127.:allow,RELAYCLIENT=""` > /etc/tcp.smtp # echo :allow >> /etc/tcp.smtp 编译安装: # sh abc.sh # make # make install-strip 8、配置qmail和vpopmail 创建sendmail脚本文件:/var/qmail/rc # cd /var/qmail # vi rc 内容如下: #!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`" 修改属性 # chmod 755 /var/qmail/rc # mkdir /var/log/qmail # echo ./Maildir/ >/var/qmail/control/defaultdelivery 创建启动脚本: # cd bin # vi qmailctl 内容如下: #!/bin/sh # 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 else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if svok /service/qmail-pop3d ; then svc -u /service/qmail-pop3d /service/qmail-pop3d/log 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 "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log echo "* Restarting qmail-pop3d." svc -t /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 <&1 注意此处的: QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE 是为杀毒程序准备的,如果想急不可耐的测试的话,请先注释掉。 然后: # cd log # vi run 内容如下: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \ /var/log/qmail/smtpd 然后: # cd /var/qmail/supervise/qmail-pop3d # vi run 内容如下: #!/bin/sh exec /usr/local/bin/softlimit -m 3000000 \ /usr/local/bin/tcpserver -v -R -H -c 30 -l mail4.beijingvst.com 0 110 \ /var/qmail/bin/qmail-popup mail4.beijingvst.com \ /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 然后: # cd log # vi run 内容如下: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \ /var/log/qmail/pop3d 修改属性、创建参数文件、日志文件: # echo 20 > /var/qmail/control/concurrencyincoming # chmod 644 /var/qmail/control/concurrencyincoming # 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 755 /var/qmail/supervise/qmail-pop3d/run # chmod 755 /var/qmail/supervise/qmail-pop3d/log/run # mkdir -p /var/log/qmail/smtpd # mkdir /var/log/qmail/pop3d # chown qmaill /var/log/qmail /var/log/qmail/smtpd /var/log/qmail/pop3d # ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd \ /var/qmail/supervise/qmail-pop3d /service 创建tcp.smtp.cdb文件: # qmailctl cdb 如果是完全安装,请停掉sendmail服务,然后 # rm /usr/lib/sendmail # rm /usr/sbin/sendmail # ln –s /var/qmail/bin/sendmail /usr/lib # ln –s /var/qmail/bin/sendmail /usr/sbin 创建别名: # cd /var/qmail/alias # echo yang > .qmail-root # echo yang > .qmail-postmaster # ln –s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon 创建虚拟域,添加用户: # cd /home/vpopmail/bin # ./vadddomain beijingvst.com # ./vadduser yang@beijingvst.com 123456 # ./vadduser yanghz@beijingvst.com 123456 修改/home/vpopmail/bin/vchkpw的权限 # chmod 4755 vchkpw # chown root.root vchkpw 9、安装杀毒模块 安装病毒扫描程序clamav_0.60,clamav只是一个病毒扫描程序,并不对进来的每一封信进行自动扫描,它需要与scanner协同工作, 有scanner来调用。 # cd /usr/local/src # tar zxf clamav-0.60.tar.gz # tar zxf qmail-scanner-1.20.gz # cd clamav-0.60 # useradd -s /bin/false clamav # ./configure # make # make check # make install 检查clam是否可以工作 # clamscan -r -l scan.txt # cat scan.txt # rm -f scan.txt 配置clam的日志文件 # touch /var/log/clam-update.log # chmod 644 /var/log/clam-update.log # chown clamav /var/log/clam-update.log 编辑crontab,加入clam的病毒库自动更新脚本,定义每天5点更新病毒库 # crontab –e 内容如下: 0 5 * * * /usr/local/bin/freshclam --quiet -l /var/log/clam-update.log 安装autorespond-2.0.2,是一个自动转发工具,可以定义邮件转发,此处只是用来帮助scanner来转发检查出来的病毒文件 和垃圾邮件。没有它,scanner将不工作。 # cd .. # tar zxf autorespond-2.0.2.tar.gz # cd autorespond-2.0.2 # make # make install 安装maildrop-1.6.3,是一个用来定义不合法的邮件的处理策略的工具,也可以定义对垃圾邮件和病毒文件的处理策略,这里使 用的是默认设置,没有它,scanner也不工作。 # cd .. # bunzip2 maildrop-1.6.3.tar.bz2 # tar xf maildrop-1.6.3.tar # cd maildrop-1.6.3 # ./configure # make # make install-strip # make install-man 安装qmail-scanner扫描模块,生成qmail-scanner-queue.pl,来替换默认的qmail-queue来处理邮件队列,对队列里的每一封邮件 进行扫描。 # useradd qscand –s /bin/false # cd qmail-scanner-1.20 # ./configure --scanners "clamscan,verbose_spamassassin" --admin "yang" --domain "beijingvst.com" # ./configure --scanners "clamscan,verbose_spamassassin" --admin "yang" --domain "beijingvst.com" --install 注:此处的scanners用的一个是病毒扫描程序,一个是spam扫描程序,扫描spam有两种模式,一种是 verbose_spamassassin,一种是fast_spamassassin,其中fast_spamassassin只将信头送往spam_daemon判断 是否垃圾文件,速度较快,verbose_spamassassin将信头和信体都送往spam_daemon判断是否垃圾邮件。 速度较慢 # cp quarantine-attachments.txt /var/spool/qmailscan # setuidgid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g 修改spamassassin中的对垃圾邮件的定义。 在/etc/mail/spamassassin下的local.cf文件中加入以下语句: required_hits 5 rewrite_subject 1 subject_tag [SPAM] report_header 1 use_terse_report 1 score SUBJ_FULL_OF_8BITS 0.0 score BASE64_ENC_TEXT 0.0 score BAYES_99 0.1 score BAYES_90 0.1 score SUBJ_ILLEGAL_CHARS 0.1 score FROM_ILLEGAL_CHARS 0.5 score HEAD_ILLEGAL_CHARS 0.5 score MIME_BASE64_TEXT 0.5 score RCVD_IN_SBL 0.0 score RCVD_IN_MULTIHOP_DSBL 0.1 score RCVD_IN_RFCI 0.3 score RCVD_IN_UNCONFIRMED_DSBL 0.1 whitelist_from *@mail2.beijingvst.com *@mail.beijingvst.com *@beijingvst.com ok_locales en zh 重新加载spamassassin服务: # /etc/init.d/spamassassin restart 10、安装web界面 # cd /usr/local/src # tar zxf igenus_2_20030516_snap.tar # cp -r igenus /var/www/html # cd /var/www/html/ # mkdir temp # chmod 755 temp # chown vpopmail:vchkpw temp # cd igenus/config # vi config_inc.php 修改内容如下: $CFG_BASEPATH ="/var/www/html/igenus"; $CFG_MYSQL_HOST = 'localhost'; $CFG_MYSQL_USER = 'vpopmail'; $CFG_MYSQL_PASS = '12345678'; \\改成你的密码 $CFG_MYSQL_DB = 'vpopmail'; 修改/etc/httpd/conf/httpd.conf # cd /etc/httpd/conf #vi /etc/httpd/conf/httpd.conf 修改内容如下: 将 Group apache User apache 修改为: Group vchkpw User vpopmail 将 AddDefaultCharset ISO-8859-1 修改为: AddDefaultCharset GB2312 //使默认页面为中文 #/etc/init.d/httpd restart //重启apache,使修改生效 修改Mysql数据库表格, # mysql -u vpopmail –p mysql>use vpopmail; mysql>alter table vpopmail drop primary key; mysql>alter table vpopmail add column pw_id int(5) NOT NULL primary key auto_increment; mysql>create table address ( id int(11) unsigned NOT NULL auto_increment, pw_id int(5) unsigned NOT NULL default '0', name varchar(64) NOT NULL default '', email varchar(128) NOT NULL default '', UNIQUE KEY id (id), KEY pw_id (pw_id)) TYPE=MyISAM; mysql>CREATE TABLE stow ( id int(11) unsigned NOT NULL auto_increment, pw_id int(5) NOT NULL default '0', name varchar(64) NOT NULL default '', http varchar(128) NOT NULL default '', memo varchar(255) NOT NULL default '', PRIMARY KEY (id)) TYPE=MyISAM PACK_KEYS=1; //收藏夹的表 mysql>quit 11、至此安装完毕,具体的一些小的设置,例如: 用户空间管理:/home/vpopmail/bin/vsetuserquota 最大单封邮件大小: /var/qmail/control/databytes文件,单位:byte 邮件在队列中的最长时间:/var/qmail/control/queuelifetime文件,单位:seconds,一般用于对方邮件服务器down掉, 或者做MX服务器时使用 另外在:在/home/vpopmail/bin下有一些添加域,添加用户,修改密码,修改用户配额等命令。可以根据需要使用。 12、用与排错的一些常用命令: # ps –ef | grep tcp # ps –ef | grep err # ps –ef | grep smtp # ps –ef | grep pop # ps –ef | grep httpd # ps –ef | grep named # ps –ef | grep httpd # netstat –an | grep 25 # netstat –an | grep 110 # ntsysv 13、写在最后: Qmail有一个图形化的管理工具,因为不习惯于在unix下使用图形界面,我并没有安装,由于这些工具与底层的设置 中间隔了一层,会使得管理员有雾里看花的感觉,在我看来,它所能完成的功能,用字符界面会完成得更快,更好, 也更易于理解。 另外,由于我们还没有怎么使用这套系统,在具体的使用过程中可能会有一些想不到的事情发生,当然,没有什么事情 是不可以解决的,不过可能会需要时间,所以建议在它作为生产系统使用之后,原来的系统还需要保留一段时间。