安装需求
支持Linux / BSD或Solaris,HP-UX等操作系统 Perl 5.6+,建议Perl 5.8.0以上 Net::DNS POSIX Fcntl Digest::MD5 Digest::SHA1 Digest::HMAC Net::IP
解包软件
cp -r src/slockd-0.083 /usr/local/slockd
安装相关Perl模块
由于slockd是以smtp特征检测为主的软件,因此很大程度依赖dns库,必须安装Net::DNS库才能正常工作。除此外还有诸如HMAC,MD5及SHA1, Net-IP等模块。
执行以下命令安装需要的模块,注意:这些模块在上文安装Amavisd-new时已经安装过,这里重复是为了强调slockd依赖这些软件包
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpm rpm -ivh RPMS/perl-Digest-HMAC-1.01-1hzq.i386.rpm rpm -ivh RPMS/perl-Net-IP-1.24-1hzq.i386.rpm rpm -ivh --nodeps RPMS/perl-Net-DNS-0.57-1hzq.i386.rpm
附x86_64系统: rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.x86_64.rpm rpm -ivh RPMS/perl-Digest-HMAC-1.01-13.noarch.rpm rpm -ivh RPMS/perl-Net-IP-1.25-1.el4.rf.noarch.rpm rpm --nodeps -ivh RPMS/perl-Net-DNS-0.59-1.fc3.rf.x86_64.rpm
配置resolv.conf
请确认/etc/resolv.conf里的dns服务器是离你的邮件服务器最近,速度最快的dns server,slockd很依赖dns的好坏,因此给系统配置一个快速的dns能大幅度提高处理速度。以下给出一个配置仅供参考:
nameserver 202.96.128.68
上述dns服务器是广东电信的DNS服务器,对于非广东朋友,请改为离你最近的dns 服务器ip
如果可能的话,请配置一个简单的bind9,成为本地的dns cache server,可以获得最高性能。这里略过这一步骤,但您必须确保dns的配置是正确并且可靠的,否则slockd将不能工作!
执行:
/usr/local/slockd/slockd-init start
此时slockd将启动,并进入非daemon方式的监听模式,接受来自10030端口的请求,命令行下将显示如下调试信息:
Starting spam locker daemon: slockd starting child 2908 starting child 2909 08-01 12:34:40 [2908]: Loading APF::Plugin::localctrl 08-01 12:34:40 [2909]: Loading APF::Plugin::localctrl 08-01 12:34:40 [2908]: Loading APF::Plugin::anvil 08-01 12:34:40 [2908]: Loading APF::Plugin::fqdn 08-01 12:34:40 [2909]: Loading APF::Plugin::anvil 08-01 12:34:40 [2908]: Loading APF::Plugin::dnsbl 08-01 12:34:40 [2909]: Loading APF::Plugin::fqdn 08-01 12:34:40 [2909]: Loading APF::Plugin::dnsbl 08-01 12:34:40 [2908]: Loading APF::Plugin::hostname 08-01 12:34:40 [2909]: Loading APF::Plugin::hostname
打开另一个ssh/终端窗口,进入/usr/local/slockd/tools 目录,输入:
perl policy_sig -h localhost -p 10030 --helo FOOBAR \ --ip 192.168.0.1 --from test@foo.com --to test@bar.com
此时,程序应该返回如下错误信息:
action=504 <FOOBAR>: rejected, see http://bl.extmail.org/cgi/why?fqdn
这表示slockd初步的正常工作了。
后台方式运行slockd
调试正确后,必须将slockd配置成后台服务进程(Daemon Process)。vi /usr/local/slockd/config/main.cf 将如下两个配置的注释去掉:
# uncomment the following line if you need to daemonize setsid 1 ## logging log_file /var/log/slockd.log
然后在运行slockd的命令行窗口按ctrl+c,关闭刚才运行的slockd。或者在另一个命令行窗口输入如下命令以杀死slockd进程:
killall slockd
然后执行:
/usr/local/slockd/slockd-init start
自启动
输入如下的命令,将slockd启动加入到系统里,这样下一次服务器重新启动,就可以自动执行slockd了。
echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local
slockd调试正常后,必须配置postfix以使其打开对slockd的支持,编辑/etc/postfix/main.cf,将 check_policy_service inet:127.0.0.1:10030 这一行记录增加到smtpd_recipient_restrictions 里,例如:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_policy_service inet:127.0.0.1:10030
最后,重新启动postfix以使配置生效
/etc/init.d/postfix restart
注意事项:
上述配置是将slockd的查询放到最后,这也是进一步提高资源利用律的办法,因为有部分功能postfix已实现了,所以就先由postfix检测,如果检测不到再由slockd完成。