Freebsd 4.7环境下基于
qmail系统的反病毒反垃圾邮件系统构建
第一部分:前 言
一. 版权信息
本文档的版权属于作者姜培军[peijun.jiang]所有。转摘时请附带本信息,并且保证本文档的完整性!
关于作者:
作 者:Peijun.Jiang 『姜培军』
邮件地址:peijun.jiang act tom.com
出没地方:[url]www.chianunix.net www.cnfug.org www.anti-spam.org.cn[/url]
开源UNIX系统爱好者,工组于一家合资软件开发企业任系统管理员职务,负责Mail、Firewall、FTP、WEB等服务的维护工作。
二.更新记录
2003年05月14日 初次成稿
2003年06月05日 对安装设置参数进行合理调整
2003年09月08日 增加了Mail From补丁,加入了批量添加用户账号和Wmail
2003年12月01日 加入简单的DNS设置
2004年01月12日 加入病毒过滤和垃圾邮件过滤
第二部分:安装前的准备
一.所需软件
• ucspi-tcp-0.88.tar.gz [url]http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz[/url]
• cmd5checkpw-0.22.tar.gz [url]http://members.elysium.pl/brush/cmd5checkpw/dist/cmd5checkpw-0.22.tar.gz[/url]
• qmail-1.03.tar.gz [url]http://cr.yp.to/software/qmail-1.03.tar.gz[/url]
• qmail-smtpd-auth-0.30.tar.gz [url]http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.30.tar.gz[/url]
• qmail-1.03.patch [url]http://www.ckdhr.com/ckd/qmail-103.patch[/url]
• vpopmail-5.3.16.tar.gz [url]http://www.inter7.com/devel/vpopmail-5.3.16.tar.gz[/url]
• autorespond.tar.gz [url]http://www.netmeridian.com/e-huss/autorespond.tar.gz[/url]
• ezmlm-0.53.tar.gz [url]http://cr.yp.to/software/ezmlm-0.53.tar.gz[/url]
• sqwebmail-3.5.0-CN.tar.gz [url]http://www.cooco.net/files/sqwebmail-3.5.0-CN.tar.gz[/url]
• Qmail-smtpd.c [url]http://www.cooco.net/files/qmail-smtpd.c[/url]
• Qmail-smtpd.path [url]http://www.cooco.net/files/qmail-smtpd.patch[/url]
• mysql-3.23.53.tar.gz [url]http://www.mysql.org/Downloads/MySQL-3.23/mysql-3.23.53.tar.gz[/url]
• wmail-1.00rc1.20030811-quota.tar.gz [url]http://www.cooco.net/files/wmail-1.00rc1.20030811-quota.tar.gz[/url]
• qmailadmin-1.0.6.tar.gz [url]http://www.inter7.com/qmailadmin/qmailadmin-1.0.6.tar.gz[/url]
• 汉化文件 [url]http://www.cooco.net/files/en-us[/url]
二.注意事项
• 所有程序下载后放在/down目录下
• 在安装FreeBSD时请把/home和/var尽量分的大一些,因为/home目录是作为所有用户的邮件存放目录,/var是日志存放目录
• 本文档所有操作都是在root权限下进行的,所以操作时请尽量仔细,不要由于误操作带来不必要的麻烦
第三部分:DNS设定
• 我们使用的是我们母公司的DNS服务器,所以我没有做自己的DNS服务器,只是把相关的A记录和MX记录解析到我相关的IP地址上。使用 nslooks �Cq=mx mail.localhost.com命令可以查看到已经绑定到我们公司的IP地址上。
• 注:mail.localhost.com为我们公司域名,以下相同。
你可以按照以下方法设置自己的DNS服务器:
DNS使用FreeBSD 4.7自带的8.3.3版本,所有的配置文件默认在/etc/namedb目录下。我的DNS服务器IP地址为192.168.80.53,Mail服务 器的IP地址为192.168.80.80。解析一个域名localhost.com作为我的邮件服务的域名。
一.打开named的启动开关
#cd /etc
#ee rc.conf //加入一下参数
named_enable="YES"
二. 使用make-localhost来生成反解文件localhost.rev
#cd /etc/namedb
#sh /etc/namedb/make-localhost
三. 设置主配置文件
#mv named.conf named.conf.old
#touch named.conf
#ee named.conf //添加一下内容
options {
directory "/etc/namedb";
datasize 40M;
forward only;
forwarders {
61.134.1.4; //此IP为我的ISP的DNS地址
};
};
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
};
zone "localhost.com"
type master;
file "/etc/namedb/hosts/localhost.com.hosts";
};
zone "80.168.192.in-addr.arpa" {
type master;
file "/etc/namedb/rev/192.168.80.rev";
};
四. 在/etc/namedb目录下建立hosts目录,来存放正解配置文件
#mkdir /etc/namedb/hosts
#cp /etc/namedb/localhost.rev /etc/namedb/hosts/locolhost.com.hosts //使用现成的配置文件进行修改一下就行了
#ee /etc/namedb/hosts/localhost.com.hosts //内容如下
$TTL 3600
@ IN SOA dns.localhost.com. root.dns.localhost.com.(
20031231 //Serial号码
3600 //DNS刷新时间
900 //重试间隔时间
3600000 //到期时间
3600 ) //Minimum
IN NS dns.cnunix.com.cn.
IN MX 10 mail
dns IN A 192.168.80.53
www IN A 192.168.80.80
mail IN A 192.168.80.80
@ IN A 192.168.80.80
五. 在/etc/namedb目录下建立reb目录,来存放反解配置文件
#mkdir /etc/namedb/reb
#cp /etc/namedb/localhost.rev /etc/namedb/reb/192.168.80.rev
#ee /etc/namedb/reb/192.168.80.rev //内容如下
$TTL 3600
@ IN SOA dns.localhost.com. root.dns.localhost.com. (
20031231
3600
900
3600000
3600 )
IN NS dns.localhost.com.
53 IN PTR dns.localhost.com.
80 IN PTR [url]www.localhost.com.[/url]
80 IN PTR mail.localhost.com.
80 IN PTR localhost.com.
六. 更新根服务器
#cd /etc/namedb
#fetch [url]ftp://ftp.rs.internic.net/domain/named.root[/url]
七.修改/etc/resolv.conf
#nameserver 192.168.80.53
八.DNS服务器的日常维护命令
#ndc start //如果提示new pid is NamedID,说明已经成功启动
#ndc stop //停止named服务
#ndc restart //重新启动named服务
九. 测试named解析
#nslookups
>;[url]www.cnunix.com.cn[/url]
>;mail.cnunix.com.cn
>;dns.cnunix.com.cn
如果能解析到192.168.80.53说明正常了
>;sohu.com
>;sina.com.cn
如果能解析到域名相应的IP地址上,说明dns对外面的域名解析也正常。
第四部分:基本服务安装过程
一.安装webmin
webmin是一个让你很方便的远程管理服务器的程序,所有管理工作都是基于Web方式进行的,支持中文等多个国家的语言。我主要使用他进行我的Mysql数据库和
qmail邮件的队列的管理,我一直使用,很方便也很实用。
#cd /down
#tar zxvf webmin-1.070.tar.gz
#mv webmin-1.070 /usr/local/webmin
#cd /usr/local/webmin
#./setup.sh
根据提示输入安装路径、web访问端口、设置管理用户和密码等,也可以使用默认设置一路回车。
二.Mysql的安装与设置
1.安装mysql
本文档的数据库是基于二进制包的方式安装的,作者以前也曾经使用过ports方式的安装方法,所以本文两种安装方法都提供给大家,以供大家选择。不过作者建议使用二进制包的方式安装,这样在安装mysql的过程中可以根据自己的需要定制参数。
1.1、使用ports安装
#cd /usr/ports/database/mysql323-server
#make install
#cd work/mysql-3.23.52
#scripts/mysql_install_db
#cp support-files/my-medium.cnf /etc/my.cnf
#/usr/local/bin/safe_mysqld & //启动mysql服务
1.2、使用二进制代码安装
A.建组和用户
#pw groupadd mysql
#pw useradd mysql �Cg mysql �Cs /nonexitent
B.进行编译
#cd /down
#tar zxvf mysql-3.23.53.tar.gz
#cd mysql-3.23.53
#./configure --prefix=/usr/local/mysql
#make
#make install
2.设置Mysql
2.1、运行脚本、添加目录
#scripts/mysql_install_db
#mkdir /usr/local/mysql/var
2.2、更改文件和目录权限
#chown -R root /usr/local/mysql
#chown �CR mysql /usr/local/mysql/var
#chgrp �CR mysql /usr/local/mysql
2.3、复制mysql的配置文件到/etc目录下
#cp ./support-files/my-medium.cnf /etc/my.cnf
2.4、添加启动脚本
#echo "/usr/local/mysql/bin/safe_mysqld --user=mysql �C-skip-networking &" >;>; /etc/rc.local
备注:--skip-networking参数是限制只有本机可以连接mysql,增加mysql的安全性。
2.5、启动mysql服务
#/usr/local/mysql/bin/sase_mysqld --user=mysql --skip-networking &
2.6、更改root的密码
#/usr/local/mysql/bin/mysqladmin -u root password '123456'
2.7、拷贝mysql的lib文件和incdule文件到系统目录下
#cp /usr/local/mysql/lib/mysql/* /usr/lib
#cp /usr/local/mysql/incdule/mysql/* /usr/incdule
备注:拷贝mysql的lib文件和头文件到系统的目录下是为了防止无法找到mysql的lib目录和incdule目录而产生的错误。
2.8、添加vpopmail操作mysql的用户
#/usr/local/mysql/bin/mysql -u root -p123456
mysql>;create database vpopmail;
mysql>;grant all on vpopmail.* to vpopmail@localhost identified by "123456";
三.安装TCPSERVER
这个程序包是类似于inetd的命令行方式的构造客户/服务器应用的工具程序,它设计的目的就是用以完全取代inetd而获得更好的性能和安全性。 Tcpserver提供对并行进程数量的限制以防止内存和CPU资源被耗尽,Tcpserver还提供TCP访问控制,类似于tcp- wrappers/tcpd的hosts.deny和hosts.allow方式,但是速度要快很多。
1、安装
#cd /down
#tar zxvf ucspi-tcp-0.88.tar.gz
#cd ucspi-tcp-0.88
#make setup check
2、生成cdb文件
#cd /etc
#touch tcp.smtp
#ee tcp.smtp //加入一下内容
127.0.0.1:allow,RELAYCLIENT=""
#/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp ; /var/qmail/control/bouncefrom //设置投递失败返回邮件的发送者为postmaster
5、停止sendmail服务
#ee /etc/rc.conf
sendmail_enable="NO"
sendmail_flags="-bd"
sendmail_outbound_enable="NO"
sendmail_submit_enable="NO"
sendmail_msp_queue_enable="NO"
#chmod 0 /usr/sbin/sendmail
#mv /usr/sbin/sendmail /usr/sbin/sendmail.old
连接
qmail的sendmail外壳文件到系统的sendmail目录
#ln �Cs /var/qmail/bin/sendmail /usr/sbin/sendmail
#ln �Cs /var/qmail/bin/sendmail /usr/lib/sendmail
六.vpopmail介绍、安装及配置
1、介绍
vpopmail是
qmail的一个非常重要的扩展软件包,它是由Inter7公司[[url]http://www.inter.com[/url]]开发的,主要针对
qmail本身支持虚拟邮件域,但是配置和用户管理非常复杂和麻烦而设计的。它的特点是实现了
qmail所 有的用户帐号只使用操作系统的一个用户帐号,所有的的vpopmail相关的进程都以一个GID/UID来运行,让邮件系统的帐户和操作系统的用户分离, 提高了邮件系统的安全性。它支持基于域名和IP地址的虚拟邮件域,每个虚拟邮件域之间互相独立,通过使用平衡树填充的技术,vpopmail可支持 2300万个虚拟邮件域,每个虚拟邮件域可支持2300万个邮件帐户。Vpopmail还支持LDAP、Oracle、Sybase、Mysql、 PostgreSQL等用户认证信息存储方式,使得建立和维护百万级用户的大型邮件系统很方便的实现。
2、实现虚拟域的原理
qmail对邮件域有本地(local)和虚拟(virtual)的概念。本地域是实现匹配/etc/passwd系统帐号,而虚拟域则匹配在
qmail的配置文件virtualdomains中的各个域。Vpopmail利用
qmail的users/assign和virtualdomains文件。users/assign文件被编译成users/cdb的格式,它利用一个哈系数据库来加快查找速度,若任意一个模式得到匹配,
qmail就使用文件中定义的uid和gid传送该邮件到文件中定义的目录。Vpopmail利用该方法实现使
qmail以单一的vpopmail/vchkpw身份来传输用户所有的虚拟域的邮件,从而实现了将邮件传输到~vpopmail/domains/;目录下的不同用户。
对于
qmail来 说,qmail-local程序一旦从users/assign得到相关的信息,则其运行标准的.qmail文件操作。一般来说,.qmail-;文件被 用来完成邮件的转发、别名、或者调用其他程序如ezmlm等。若没有找到匹配,则qmail-local查找.qmail-default文件,这是 qmail-local邮件投递机制中的最后一步,
qmail利用该文件激活vedlivermail程序,该程序以两个参数被调用,第一个当前没有作用,主要使用来向后兼容的,第二个参数使用来在一个虚拟域用户没有被找到时缺省投递,一般来说,缺省投递可以时将邮件投递到某个目录或者某个邮件地址返回没有此用户的返回信件。
3、安装
3.1、建立目录
#mkdir /home/vpopmail
#mkdir /home/vpopmail/etc
3.2、建立组及用户
#pw groupadd vchkpw
#pw useradd vpopmail �Cg vchkpw
3.3、安装vpopmail
#cd /down
#tar zxvf vpopmail-5.3.16.tar.gz
#cd vpopmail-5.3.16
#ee vmysql.h //修改以下内容
#define MYSQL_UPDATE_SERVER "localhost" //mysql服务器名
#define MYSQL_UPDATE_USER "vpopmail" //访问Mysql数据库的用户名
#define MYSQL_UPDATE_PASSWD "123456" //访问Mysql数据库的vpopmail用户的密码
#define MYSQL_READ_SERVER "localhost" //mysql服务器名
#define MYSQL_READ_USER "vpopmail" //用户名
#define MYSQL_READ_PASSWD "123456" //密码
或者使用Mysql的root用户与密码也可以!
3.4、创建tcp.smtp文件
或者使用/etc/tcp.smtp文件也可以。
#ee /home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
3.5、编译安装
#./configure
--prefix=/home/vpopmail //指定安装路径
--enable-mysql=y //是否应用Mysql数据库
--enable-incdir=/usr/local/include/mysql //Mysql数据库include文件所在目录
--enable-libdir=/usr/local/lib/mysql //Mysql数据库lib文件所在目录
--enable-default-domain=localhost.com //定义虚拟域名
--enable-passwd=n //是否使用系统密码验证方式
--enable-defaultquota=52428800 //定义缺省邮箱大小,10485760为10MB,20971520为20MB,52428800s为50MB
--enable-tcprules-prog=/usr/local/bin/tcprules //指定tcprules目录
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp //指定tcprules应用规则文件
--enable-vpopuser=vpopmail //vpopmail的用户
--enable-vpopgroup=vchkpw //vpopmail的组
--enable-ip-alias-domains=n //在虚拟域中允许通过反向IP地址查找虚拟域名
--enable-roaming-users=n //是否支持外地用户的SMTP的RELAY
--enable-sqwebmail-pass=y //sqwebmail的密码支持
#make
#make install-strip
#chmod +s /home/vpopmail/bin/vchkpw
七.pop3和smtp的启动脚本
1、创建pop3启动脚本
#mkdir /etc/qmail
#cd /etc/qmail
#touch pop.sh
#chmod 755 pop.sh
#ee pop.sh //添加一下内容
#!/bin/sh
/usr/local/bin/tcpserver -c 100 -v �Cl localhost.com -H -U -R 0 pop3 \ /var/qmail/bin/qmail-popup localhost.com /home/vpopmail/bin/vchkpw \ /var/qmail/bin/qmail-pop3d Maildir &
2、创建smtp启动脚本
#touch smtp.sh
#chmod 755 smtp.sh
#ee smtp.sh 添加一下内容:
#!/bin/sh
LOG_AUTH=1
export LOG_AUTH
QMAILUID=`id -u qmaild`
QMAILGID=`id -g qmaild`
/usr/local/bin/tcpserver -H -R -l localhost.com -t 1 -c 100 -v -p �Cx /etc/tcp.smtp.cdb \ -u $QMAILUID -g $QMAILGID 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw \ /usr/bin/true /bin/cmd5checkpw /usr/bin/true &
注意:如果使用的patch是0.31,在qmail-smtpd后面加入localhost.com,就可以解决auth的问题了
3、
qmail启动脚本
#mkdir start.sh
#chmod 755 start.sh
#ee start.sh //加入一下内容:
#!/bin/sh
csh -cf '/var/qmail/rc &'
/etc/qmail/pop.sh
/etc/qmail/smtp.sh
#echo "/etc/qmail/start.sh">;>; /etc/rc.local //设置系统启动时自动启动
qmail及相关脚本
4、重新启动系统
#reboot
5、检查是否能够添加虚拟域
#cd /home/vpopmail/bin
#./vadddomain localhost.com
如果添加失败一定要删除虚拟域,然后查看mysql数据库是否有vpopmail表,如果没有请检查mysql用户vpopmail是否拥有对数据库拥有 全部权限(或者修改vpopmail源文件的vmysql.h使用root用户访问数据库),然后重新安装vpopmail程序。
#./vdeldomain localhost.com
八.重新编译mysql数据库
1、修改mysql数据库
在修改之前记得使用vdeldomain命令删除你添加过的所有的邮件域。
#/usr/local/mysql/bin/mysql �Cu root �Cp123456
use vpopmail;
drop table vpopmail;
create table vpopmail (
pw_id int(5) unsigned NOT NULL auto_increment,
pw_name varchar(32) NOT NULL default '',
pw_domain varchar(64) NOT NULL default '',
pw_passwd varchar(40) NOT NULL default '',
pw_uid int(11) default NULL,
pw_gid int(11) default NULL,
pw_gecos varchar(64) default NULL,
pw_dir varchar(160) default NULL,
pw_shell varchar(20) default NULL,
pw_clear_passwd varchar(16) default NULL,
PRIMARY KEY (pw_id),
KEY pw_name (pw_name,pw_domain)
) TYPE=MyISAM;
quit
2、重新添加虚拟域和用户
#cd /home/vpopmail/bin
#./vadddomain localhost.com
输入postmaster密码,这是以后使用qmailadmin管理虚拟域localhost.com的密码
#./vadduser test
输入密码test
3、测试
qmail
使用客户端Foxmail或者Outlook测试邮件账户
[email protected], 用户名test(或者
[email protected],因为localhost.com作为默认域名,所以不用输入test后面的 @localhost.com),密码test,选择smtp需要认证,测试该账户能不能进行收发邮件。如果你完全按照以上的方法操作,并且没有任何错误 的话,我想你一定没有问题的。祝你好运^_^。
至此,一个带smtp认证、mail from校验、支持多虚拟域的基本的邮件系统已经设置完成。如果你想加入更多的功能,请接着往下做,我会一步一步的带你完成。
第五部分:安装qmailadmin
一.安装apache
1、安装
#cd /down
#tar zxvf apache_1.3.26.tar.gz
#cd apache_1.3.26
#./configure --prefix=/usr/local/apache --with-mysql=/usr/local/bin --enable-shared=max
#make
#make install
2、启动
#/usr/local/apache/bin/apachectl start
#echo “/usr/local/apache/bin/apachectl start” >;>; /etc/rc.local //设置Apache随系统一起启动
二.安装qmailadmin
1、安装设置ezmlm
1.1、安装
#cd /down
#tar zxvf ezmlm-0.53.tar.gz
#cd ezmlm-0.53
#make
#make man
#make setup
1.2、ezmlm加入mysql支持的方法
A: 创建ezmlm数据库
#/usr/local/mysql/bin/mysql -u root �Cp
mysql>;create database ezmlm;
B: 设置ezmlm加入mysql支持
#tar -zxvf ezmlm-0.53.tar.gz
#tar -zxvf ezmlm-idx-0.40.tar.gz
#mv ezmlm-idx-0.40/* ezmlm-0.53/
#cd ezmlm-0.53
#patch ; /usr/local/share/sqwebmail/authmodulelist
经过上面的设置以后,你的系统用户采用shadow验证,虚拟域采用vchkpw验证,禁止其他验证方式。
3、测试sqwebmail
[url]http://mail.localhost.com/cgi-bin/sqwebmail[/url]
使用用户test,密码test,登陆进出以后就可以测试收发邮件了!
4、修改Apache
#cd /usr/local/apache/htdocs
#touch index.html
#ee index.html //输入一下内容:
;
;
;MAIL SYSTEM;
;
;
;
;
;
经过以上修改以后,你就可以通过:
[url]http://mail.localhost.com[/url]
直接来访问sqwebmail了,这样就方便多啦:)
二.安装Wmail
1、安装Wmail
#cd /down
#tar zxvf wmail-1.00rc1.20030811-quota.tar.gz
#cd wmail-1.00rc1.20030724
#./install
默认安装到/home/wmail目录下。你也可以通过修改wmail的原代码目录中的install文件来修改安装的目录和定制编译参数。
2、配置Wmail
修改/home/wmail/html/zh-cn的index.html和invalid.html相关项为以下内容:
;
3、修改Apache
编辑apache的httpd.conf文件,在最后加入以下内容:
NameVirtualHost 192.168.80.80
;
SetEnv SQWEBMAIL_TEMPLATEDIR /home/wmail/html
ScriptAlias "/cgi-bin/" "/home/wmail/www/cgi-bin/"
;
AllowOverride All
Options +Includes
;
ServerAdmin
[email protected]
DocumentRoot /home/wmail/www
ServerName mail2.localhost.com
;
4、测试Wmail
[url]http://mail2.localhost.com[/url]
使用用户test,密码test,登陆进出以后就可以测试收发邮件了!
三.Sqwebmail和Wmail共存的设置
经过以上对Wmail的设置以后,你会发现sqwebmail和qmailadmin使用它们的URL无法登陆啦,这是因为设置了虚拟主机的问题引起的, 使sqwebmail和qmailadmin无法找到CGI路径的原因。所以还需要对sqwebmail和qmailadmin的访问地址进行虚拟主机设 置,只要在Apache的配置文件httpd.conf中的最后面加入以下内容就OK.
;
ScriptAlias "/cgi-bin/" "/usr/local/apache/cgi-bin"
;
AllowOverride All
Options +Includes
;
ServerAdmin
[email protected]
DocumentRoot /usr/local/apache/htdocs
ServerName mail.localhost.com
;
经过这样设置以后,各个访问的URL如下:
Sqwebmail: [url]http://mail.localhost.com[/url]
QmailAdmin: [url]http://mail.localhost.com/cgi-bin/qmailadmin[/url]
Wmail: [url]http://mail2.localhost.com[/url]
第七部分:使用shell批量添加用户
一. 第一种方法
1.在/home目录下建立文件adduser.sh
#touch adduser.sh
#chmod 755 adduser.sh
2、编辑adduser.sh
#ee adduser.sh //加入一下内容:
#!/usr/bin
while read line
do
echo $line
/home/vpopmail/bin/vadduser $line $line
done ; /dev/null 2>;&1 \
&& echo -n ' freshclam'
;;
*)
echo ""
echo "Usage: `basename $0` { start | stop }"
echo ""
exit 64
;;
esac
# chmod 744 /usr/local/etc/rc.d/clamav.sh
更改/usr/local/etc/clamav.conf文件,去掉下面选项前面的#:
#Example 前面加上#
LogFile /tmp/clamd.log 去掉前面的#
LogFileMaxSize 2M 去掉前面的#
LogTime 去掉前面的#
PidFile /var/run/clamd.pid 去掉前面的#
DataDirectory /var/lib/clamav 去掉前面的#,并且修改路径为/usr/local/share/clamav
7.添加自动升级脚本
# crontab �Ce
0 8 * * * /usr/local/bin/freshclam --quiet -l /var/log/freshclam.log
8.添加自动扫描/home目录
# corntab �Ce
0 6 * * * root /usr/local/bin/clamscan --recursive
--infected
--exclude /usr/local/share/clamav/viruses.db
--exclude /usr/local/share/clamav/viruses.db2
--log=/var/log/clamscan.log
/home
二. SpamAssassin
1.安装Perl模块
使用webmin或者perl �CMCPAN �Ce shell
Time::HiRes
File::Spec
Getopt::Long
Pod::Parser
HTML::Tagset
HTML::Parser
MIME::Base64
MIME::QuotedPrint
Net::Cmd
Net::Ping
Net::DNS
Digest::SHA1
File::Copy
Digest::Nilsimsa
URI::Escape
2.安装SpamAssassin
# cd /down
# fetch [url]http://spamassassin.taint.org/released/Mail-SpamAssassin-2.61.tar.gz[/url]
# tar -zxvf Mail-SpamAssassin-2.61.tar.gz
# cd Mail-SpamAssassin-2.61
# perl Makefile.PL
# make
# make install
3.测试SpamAssassin
# spamassassin -t ; spam.out
# cat /spam.out
X-Spam-Status: Yes, hits=14.7 required=5.0
tests=ALL_CAPS_HEADER,CALL_FREE,DATE_IN_PAST_24_48,
DRASTIC_REDUCED,FROM_HAS_MIXED_NUMS,HOME_EMPLOYMENT,
INVALID_DATE,INVALID_MSGID,LINES_OF_YELLING,
MSGID_HAS_NO_AT,NO_REAL_NAME,ONCE_IN_LIFETIME,REMOVE_SUBJ,
SMTPD_IN_RCVD,SPAM_PHRASE_21_34,UNDISC_RECIPS
version=2.61
X-Spam-Flag: YES
X-Spam-Level: **************
X-Spam-Checker-Version: SpamAssassin 2.61 (1.115.2.20-2002-10-15-exp)
# spamassassin -t ; nonspam.out
X-Spam-Status: No, hits=0.9 required=5.0
tests=GAPPY_TEXT,LINES_OF_YELLING,PGP_SIGNATURE,
SPAM_PHRASE_02_03,TO_BE_REMOVED_REPLY
version=2.61
X-Spam-Level
:
3.创建SpamAssassin启动脚本
# touch /usr/local/etc/rc.d/spamd.sh //内容如下
#!/bin/sh
#
# Startup / shutdown script for SpamAssassin daemon
case "$1" in
start)
/usr/bin/spamd -a -d -v -u vpopmail -F 0 && echo -n 'spamd'
;;
stop)
spamdpid=`ps -ax | grep spamd | grep -v grep | grep -v sh | awk '{ print $1 }'`
if [ "$spamdpid" != "" ]; then
kill $spamdpid >; /dev/null 2>;&1
echo -n " spamd"
fi
;;
*)
echo "Usage: `basename $0` {start|stop}" >;&2
;;
esac
exit 0
# chmod 744 /usr/local/etc/rc.d/spamd.sh
# /usr/local/etc/rc.d/spamd.sh start
三. Maildrop
# cd /usr/ports/mail/maildrop
# make
# make install
# cd /usr/ports/archivers/zip
# make install
[url]http://telia.dl.sourceforge.net/sourceforge/tnef/tnef-1.2.3.tar.gz[/url]
TNEF是一个从"application/ms-tnef". 类型中找出MIME附件的程序.这仅仅是微软系统中的一种附件
# ./configure
# make
# make install
四. Qmail-scan
1. qmail-queue补丁程序
# cd /down
# fetch [url]http://www.qmail.org/qmailqueue-patch[/url]
# patch �Cd ./qmail-1.03 ; /var/qmail/control/bouncefrom
就是定义投递者为postmaster,这样所有投递失败的返回邮件的发送者就成了postmaster。
1.3、concurrencylocal
这个文件定义了
qmail可以同时投递的本地邮件的个数。这个参数的缺省值是10,也就是说系统允许同时有10个邮件在本地投递。concurrencylocal这个参数的最大值是由编译时的conf-spawn参数来决定的,缺省值是120,最大值是255。
1.4、concurrencyremote
这个参数定义了
qmail可以同时投递的远端邮件的个数,这个参数的缺省值是20。这个参数的最大值也是由conf-spawn来决定的。
1.5、defaultdomain
它主要用于邮件用户在投递给同一邮件服务器的邮件用户时的邮件投递处理,比如邮件服务器cnunix.com.cn用户user发送邮件给另一个邮件用户 user1@cnunix,这实qmail-inject会将defaultdomain中定义的邮件域名加入到这个邮件的目标地址中,
qmail会自动认为这个邮件的目标地址是
[email protected],并按照这个地址进行投递。当这个文件不存在的时候,
qmail会从配置文件me中读取这个参数。如果系统变量QMAILDEFAULTDOMAIN已经设置,defaultdomain定义的参数将被忽略。
1.6、defaulthost
它和defaultdomain类似,当邮件系统接收到没有目标主机名的邮件时,这个设置文件定义了系统往这个邮件中加入的目标主机名名称。在缺省情况 下,qmail-inject会将defaulthost中定义的名称加入到没有定义投递邮件地址的邮件的目标主机名中,如果defaulthost不存 在,加入的目标主机名将时字符串“defaulthost”,defaulthost主要用于邮件用户在投递给同一邮件服务器的邮件进行投递处理。如果系 统变量QMAILDEFAULTHOST已经设置,defaulthost定义的参数将被忽略。
1.7、databyes
它定义了qmail-smtpd所允许接收的邮件的最大字节数。这个参数的缺省值为0,表示对接收邮件的字节数没有限制。如果要限制最大的接收为10M,操作如下:
echo 10485760 >; /var/qmail/control/databytes
这是任何大于10M的邮件都会被拒绝。这个参数最好设置上,以避免恶意的对你服务器发送大量的超大邮件,产生邮件服务器负荷过大,甚至系统崩溃的危险。
1.8、doublebouncehost
这个配置文件定义了出现“双重反弹”的时候,系统转发的邮件的主机名称。“双重反弹”就是当系统因为投递失败将邮件返回给发送者时,发送者又将此邮件返回,这个时候
qmail将 会把这个邮件转发到另一个邮件地址,一般这个地址就是管理员的地址。doublebouncehost就是定义这个转发的邮件地址的主机名部分,而这个邮 件地址的用户名部分是由doublebouceto来定义的,因此这两个配置文件一般都是结合起来使用的。当doublebouncehost不存在的时 候,系统将会从配置文件me中读取这个参数。
1.9、doublebounceto
这个参说是结合blebouncehost来使用的,当这个参数不存在的时候,系统缺省值是postmaster用户。
1.10、helohost
这个配置文件定义了当程序qmail-remote和远程邮件系统建立连接时所使用的主机名。如果这个配置文件不存在,系统将会从配置文件me中读取这个参数值,如果me不存在,qmail-remote将不能正常运行工作。
1.11、locals
这个配置文件是定义本地邮件域的,在qmail-send处理邮件投递时,将会使用locals定义的值和邮件的目标地址进行比较,如果相同,系统就会将 这个邮件投递到本地交给qmail-lspawn来处理。如果一个邮件的目标主机名在locals找不到,系统将会把这个邮件投递到远端邮件服务器系统, 即使这个邮件的目标地址可能是本地邮件系统的。如果locals不存在,系统将会从配置文件me中读取这个参数,如果me不存在,qmail-send将 不能正常运行。
1.12、me
这个配置文件是
qmail系统十分重要的一个文件,如果这个文件不存在,
qmail系统将无法运行。me是用来定义本地邮件服务器的主机名的,上面已经介绍到了,有多个配置文件是和me有关联的,如果那些配置文件不存在系统默认会从me中读取参数值的。me这个配置文件一般都是在
qmail系统安装时使用configure-fast来创建的,在上面
qmail系统安装的时候已经使用过了这个参数。
1.13、queuelifetime
这个配置文件是定义一个邮件在邮件队列中存活的时间,缺省值为7天(604800s),这个期限掉了以后qmail-send将会进行最后一次的投递尝试,如果投递失败,该邮件将会从邮件队列中删除。
1.14、rcphosts
这个配置文件也是
qmail一 个十分重要的文件,这个文件是定义系统允许转发邮件的邮件域,如果这个文件不存在或者为空,你的系统将会接收Internet上所有的域的邮件转发,即你 的系统是Open relay。配置文件rcpthosts最多可以支持50个主机名和域名,如果超个这个数字,就需要保存到他的扩充配置文件morercphosts中, 然后使用
qmail的命令程序qmail-newmrh(在本系统中,该文件在/var/qmail/bin目录下)来生成二进制的morercpthosts.cdb文件,这样qmail-smtpd才可以从这个二进制文件中读取信息。
1.15、virtualdomains
这也是
qmail的一个非常重要的配置文件,它定义了
qmail的虚拟邮件域,
qmail结合vpopmail的虚拟域管理功能可以定义多个虚拟邮件域。
1.16、smtproutes
这个配置文件是定义
qmail邮件系统的静态SMTP路由表信息的,他的格式应该是:
HOST: targetHOST //HOST可以是主机名或者域名。这行所表示的是意思是将所有目标是HOST的邮件转发到targetHOST邮件服务器中,这个是最常规的表示方式。
下面给一些例子和一些特殊的表示方法:
cnunix.com.cn:cnunix.com //这行表示的意思是将所有发往cnunix.com.cn的邮件全部转发到cnunix.com这个邮件服务器。
qmail不会在cnunix.com.cn邮件服务器中投递时查询DNS中的MX记录,直接投递到cnunix.com邮件服务器中,加快了投递的速度。
.cnunix.net: //这行表示强迫
qmail对DNS的MX记录进行查询,因为没有定义转发的主机名,
qmail将在DNS中查询任何以.cnunix.net结尾的邮件服务器
:mail.cnunix.com.cn:2525 //这行定义表示所有发往该机器的所有邮件都将会转发到mail.cnunix.com.cn这个邮件服务器,并且转发到对方的2525端口,这个方式一般都是做邮件网关时用的到的。
注意:smtproutes如果设置不正确或者DNS的变动会产生邮件的循环投递。
1.17、timeoutconnect
这个配置文件定义了qmail-remote在和远端SMTP服务器在SMTP连接断开以前接受一个新的连接等待的最大时间(单位为秒s),默认值为一分钟(60s)。如果你的网络连接速率比较低,就需要相应的调整这个参数到一个适合的值。
1.18、timeoutremote
这个配置文件定义了qmail-remote等待远端的SMTP服务器相应时等待的最大时间,默认值为20分钟(1200s),如果到达这个最大值没有相应,
qmail才和对方断开连接并且把失败的记录写到
qmail的日志中。
1.19、smtpgreeting
这个配置文件定义了用户在登录SMTP服务时显示的系统欢迎信息。修改这个信息可以掩盖一些你的系统的本身的信息,可以相对的迷惑一下登录者:)
2. vpopmail参数附录
一般选项:
2.1、--enable-roaming-users=n|y
当pop3认证通过后,是否打开对该用户的邮件转发(mail relay),缺省是关闭的。若设置该选项为y,当某个用户通过了pop3认证,则将其IP地址加入许可通过该邮件服务器进行relay的列表中。一个名 为clearopensmtp的cronjob程序可以用来实现在这一段时间以后从允许转发邮件地址列表中将该IP地址清除。这个选项要求以-x /etc/tcp.smtp.cdb选项来使用tcpserver运行smtp服务器。
2.2、--enable-hardquota=size|n
size为具体的数字。设置或打开磁盘限额功能,NOQUOTA缺省为50M,这里=后面的数字单位为字节,如果要限制磁盘限额为10M就需要使用下面这个配置参数:
--enable-hardquota=10000000
若磁盘限额超出,将拒绝接受该用户的新邮件,并返回一封拒绝信息邮件,其中的信息可以定制。
2.3、--enable-default-domain=name
该选项为设定缺省域名,推荐将所有的域都设置为虚拟域,并选中一个作为缺省域。对于缺省域的用户,其通过接受邮件时,只需要在用户名中设置其邮件用户名即可,对于其他非缺省域的用户,则需要将用户名设置为;@;的格式才能通过pop3接受信件。
2.4、--enable-ip-alias-domains=y|n
允许通过反向解析来查看虚拟域。缺省情况下,每个域使用基于虚拟域的名字,也就是用户必须在pop3用户名中提供相应的域信息,也就是;@;.当然也可以 使用enable-default-domain配置选项来覆盖该要求。Vpopmail同样支持基于IP地址的虚拟域,若该选项打开则用户不需要在 pop3用户名中提供@;,vpopmail自动对该用户连接的服务器IP地址进行反向解析,若解析得到一个域名,则vpopmail使用该名字作为域, 例如:IP:x.x.x.x对应域名test.com,用户设置pop3服务器的IP地址进行反向DNS查询,得到test.com域名,用户使用 test作为用户名,vpopmail使用test.com。
2.5、--enable-relay-clear-minutes=360
允许漫游用户通过邮件服务器的转发邮件的时间段。 若--enable-roamin-users=y,则该选项设置clearopensmtp应该保持该IP在允许列 表中的时间,缺省是3小时。
Mysql options:
2.6、--enable-mysql=n|y
使用mysql,缺省是no.允许通过将账号存放在mysql数据库中来认证用户。
注意:在配置和编译以前需要修改文件vmysql.h,正确的设置mysql服务器的Name/Ip, mysql用户和mysql用户密码。该用户必需要拥有创建数据库和在其中创建表格的权限。
2.7、--enable-sqlincdir=
sql头文件的目录,缺省为/usr/local/mysql.
2.8、--enable-sqllibdir=/usr/lib/mysql
库文件libmysqlclient.a的目录,缺省为/usr/lib/mysql
2.9、--enable-sqllibs=mysqlclient
mysql库名,缺省为libmysqlclient.a.
2.10、--enable-large-site=n|y
缺省值为no,使用该选项是为了适应大量用户的情况。缺省的vpopmail将所有的域信息存放在同一个table-vpopmail中,这对于一般情况 下具有很好的效率。但是对于大量用户的系统,则需要将该选项设置为yes。这时候,vpoomail将为每个域创建一个table。最主要的区别是域名不 存放在数据库中,因为表格包含了域名。对于大于500,000+的用户,这可以节省大量的磁盘空间。但是对于有大量虚拟域的系统可能会影响mysql的性 能。
Vpasswd/cdb options
2.11、--enable-ucspi-dir=dir
编译好ucspi-tcp包的目录位置,使用该目录来设定ucspi-tcp软件包的路径,缺省为../ucspi-tcp-0.84。vpopmail需要使用该目录中的头文件和两个.a文件。
Logging options
2.12、--enable-logging=e|y|n
打开(y)或关闭(n)使用syslog进行log,或e仅仅log错误信息。设置log级别,缺省仅仅记录pop认证错误信息。
2.13、--enable-log-name=vpopmail
设置log名
User/group options
2.14、--enable-vpopuser=vpopmail
若使用其他的用户来安装该软件包,则在该选项中指定组名。
2.15、--enable-vpopgroup=vchkpw
若使用其他的组来安装该软件包,则在该选项中指定组名。
2.16、--enable-admin-email=email-address
系统管理员的电子邮件地址。
Directory and file location options
2.17、--enable-tcpserver-file=/etc/tcp.smtp tcpserver �Cx
使用的邮件转发配置文件的存放目录,缺省为/etc
2.18、--enable-qmaildir=dir
qmail的安装目录指定,缺省为/var/qmail。
2.19、--enable-tcprules-prog=/usr/local/bin/tcprules
tcprules程序的安装位置,缺省为/usr/local/bin
2.20、--enable-apop-file=/etc/apop-secrets
apop密钥存放目录
Other options
2.21、--enable-apop=y|n
允许或禁止apop认证,缺省是yes
2.22、--enable-passwd=y|n
允许或禁止/etc/passwd(或shadow)认证。覆盖自动配置,缺省的配置程序将自动检测系统是使用passwd或shadow密码,通过设置该选项为no,可以禁止所有的/etc/passwd账号认证。