php检测病毒,Web方式管理邮件的防病毒及反垃圾功能

前段时间和朋友聊天时谈到Blog的内容,他说看了我的文档比不看前更迷糊,更惨的是会误导他人.主要原因是我写的东西向来只是写步骤;从来不加入自己的体会和感想;只知其然而不知其所以然......我汗然,我知道我写的东西有很多问题,但是却没想过这中间更深层的内涵。现实的情况是:好的文章会给人以美的享受,引导人走向至善,创造更多的社会价值;但是如果走向极端则会影响和波及更多的人,因为鲁莽的勇士即便再怎么历害也影响不了国家,但是高明谋士每做出一个决定都会左右整个社会.想想每个朝代更替时出谋划策的人员你就会明白了:李斯,诸葛亮,司马懿,希特勒.我成不了李斯但也不想做希特勒,所以以后的文章我会一点点改进.在这里,我真诚的感谢给我意见的朋友,正是因为有了你们,这个世界才会越来越美好.希望大家多提意见,一起学习,一起进步.

软件的安装和配置是比较简单的,真正困难的部份在于管理和规划,好的规划是成功的一半.不管是人生还是网络或是程序设计.你可能想像不到一个400-500人的工厂在发展到1000-2000人的工厂时发现原来基于access的数据库不能用,更大一点的话,你发现Windows下的程序根本满足不了需求.所以,如果先前规划好架构:Linux+Oracal+Java,可能就不用做那么多的无用功.当然,有人会说这两者的成本(人力,资源)在初期很难满足,但是Windows下也有这类支持程序,你如果选了Java做规划,那么转到Linux上估计也比重新来过的要好.网络管理更是如此:部门越多的时候你还是用以前的管理方法,你将永远处于被动地位,每天就像救火队员一样到处跑,而且很难判断问题出在哪.所以从机房主干到用户终端你都要规划好,细节也是一个不容忽略的地方,800台的电脑你就不可能通过IP来给用户提供远程支持(用户不一定懂得看IP地址),好的办法是根据部门代码规划主机名称,并将标签贴于机器显眼处.这样是不是大家都方便.当然,这只是一部份,规划要做到可扩展,多兼容,管理维护方便,能快速定位问题.

maia  mailguard是一款基于web管理邮件的防病毒和反垃圾功能的软件.它通过控制Amavisd和SpamAssassin来实现管理防病毒及防垃圾邮件功能.amavis是MTA与病毒扫描的一个中间程序,可以和多个病毒扫描引擎结合,这里用的是clamav.

200807281217215522951.gif

软件完成后的界面如下:

Image00018.jpg

Image00009.jpg

Image00010.jpg

我这里的测试环境是:Redhat AS 4+LDAP+Postfix.前期的搭建可以参考:[url]http://waringid.blog.51cto.com/65148/79648[/url].maia的功能比较多,这里简单描述一下:友好的面向用户自定义的管理功能;用户能自主管理自己邮件的过滤条件及方法;可以自主定义针对自己的黑白名单;可以定义垃圾邮件及病毒邮件的隔离区;友好的Web管理界面;可支持多种浏览器;图形化的表达方式;支持多模板,多语言(无中文);安全的邮件查看方式;灵活的验证模式;可使用LDAP(测试未通过,可能是设定问题);Mysql;IMAP;POP3等多种方式实现验证功能;高效的管理功能及强大的反垃圾邮件和防病毒功能(这个应和相应的引擎相关);可扩展的设计功能(估计对二次开发的适用).具体的结果只有体验了才明白.

下面是系统的要求:

* Two SMTP-based mail servers in a dual-MTA arrangement OR an SMTP server with re-injection capability (e.g.  Postfix,这个就不用多说了,基本的)

* SpamAssassin 2.55-2.63, 3.00 or newer (if you want spam filtering)

* PHP 4.2.0 or newer(PHP也是重要的一个方面,有可能要重新编译)

* Perl 5.6 or newer

* Any PHP-compatible web server(apache)

* One or more virus scanners supported by amavisd-new (if you want virus scanning)

* One of the following SQL databases:(需要的数据库,选其中之一)

o MySQL 4.0.x or newer

o PostgreSQL 7.1 or newer

* Perl DBI database module 1.40 or newer

* Perl DBD-mysql database driver 2.9003 or newer (for MySQL)

* Perl DBD-pg database driver 1.31 or newer (for PostgreSQL)

* Smarty template engine 2.6.2 or newer(maia的模板引擎)

* PHP IMAP extensions 2002d or newer

* PEAR::DB library 1.3 or newer(PEAR支持)

* PEAR::DB_Pager library 0.7 or newer

* PEAR::Mail_Mime library 1.2.1 or newer

* PEAR::Image_Graph library 0.7.0 or newer (if you want graphical charts)

* MCrypt library 2.5.7 or newer (if you want database encryption)除了这些外,还需要file-4.12以上版本的支持,不然会出现"Jul 15 20:05:27 mail postfix/smtp[4443]: A907FD40DF: to=, orig_to=, relay=127.0.0.1[127.0.0.1]:10024, delay=8515,  delays=8515/0.03/0.13/0.33, dsn=4.5.0, status=deferred (host 127.0.0.1[127.0.0.1] said: 451 4.5.0 Error in  processing, id=04423-01, mime_decode-1 FAILED: Unix utility file(1) not available, but is needed at (eval 77) line  110. (in reply to end of DATA command))"这样的错误.

确认系统要求

对照上面的要求检测系统,如果有些软件没有安装请先安装,例如Mysql等,如果你和我一样是数据库管理方面的菜鸟,推荐通过phpMyadmin来管理Mysql.相关文件可以参考([url]http://waringid.blog.51cto.com/65148/58144[/url]).PHP是一个配置比较麻烦的组件,因为在这里它除了以前的支持外([url]http://waringid.blog.51cto.com/65148/79648[/url])还需要支持PEAR,Mysql,WDDX及Mcrypt等.这篇文章的环境是针对于([url]http://waringid.blog.51cto.com/65148/79648[/url])搭建完成后的后续操作,如果有差异的地方请先检查其环境是否符合上一篇的情况.

安装mcrypt库:

该库主要用于PHP对数据库的加密和解密使用,先前以为要安装Mcrypt相关的组件,折腾了半天后才发现其实很简单,只需安装libmcrypt就可以了.下载地址为:([url]ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/[/url]).安装就更简单了.

tar zxvf libmcrypt-2.5.7.tar.gz

cd libmcrypt-2.5.7

./configure

make

make install

安装IMAP支持:

原以为安装了IMAP后(功能使用正常)重新编译对PHP的支持不会有太多问题,结果却一直卡在编译IMAP这个地方,老是提示"`U8T_CANONICAL'  undeclared (first use in this function)".查资料后才发现要安装Clinet支持.软件的下载地址为:([url]http://ftp.pwr.wroc.pl/pub/software/mail/imap/[/url])下载c-client.tar.Z后安装.

chmod -R a+rwx ./imap-2007b/ #加入可执行权限

cd imap-2007b

make lrh SSLTYPE=none

cd c-client/

cp /tmp/c-client/imap-2007b/c-client/c-client.a \

/usr/local/include/ #将相应库文件拷至系统路径下

cp *.h /usr/local/include/

cp /tmp/c-client/imap-2007b/c-client/c-client.a \

/usr/local/lib/libc-client.a

重新编译PHP:

因为以前的PHP在很多方面没有提供支持,所以需要重新编译加入新的功能组件.在操作之前建议先对PHP目录进行备份,当出现问题时可以及时更正.新的编译如下:

./configure --prefix=/usr/local/php --with-ldap=/usr \

--with-ldap-sasl=/usr/local/sasl2 \

--with-apxs2=/usr/local/httpd/bin/apxs \

--sysconfdir=/etc \   #php.ini存放位置

--with-libxml-dir=/usr/include/libxml2/libxml \

--with-gd=/usr/local/gd \  #GD库支持

--with-png=/usr/local/png/ \

--with-jpeg=/usr/local/jpeg/ \

--with-xpm \

--with-zlib --enable-debug \

--enable-magic-quotes --enable-libgcc \

--enable-ftp \

--enable-mbstring=all \

--enable-sockets --with-gnu-ld \

--with-gettext \

--with-mysql=/usr/local/mysql/  \ #Mysql支持

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--with-imap=/usr/local/imap \  #IMAP支持

--with-pear=/usr/local/pear \ #PEAR支持

--enable-bcmath --enable-wddx \  #数学库及日志支持

--with-mcrypt   #加密支持

make

make install

rm -rf /root/.pearrc编译PHP后进行PEAR的安装过程中费了我很多功夫,因为安装后的PEAR总是运行不正常(没有运行编译中的最后一条语句).我通过手动和自动的方式安装过,而且一直以为PEAR的安装是在编译PHP之前,测试了几次后发现按上述方法安装后升级就可以了.下图是安装完PHP后的提示页面:

Image00007.jpg

升级和安装PEAR组件:

PEAR在这里的作用类似于Perl的功能,主要用来支持数据库的连接及相应文件在PHP下的解码(如MIME等).PEAR的组件安装方式也类似于Perl,可以通过下面的方式来进行升级:如果你的PHP编译选项中有关pear的路径有变化,请查找pear可执行文件的位置.

/usr/local/php/bin/pear upgrade-all #升级现在组件

/usr/local/php/bin/pear install Mail_Mime DB Pager Net_Socket \

Net_SMTP Auth_SASL Net_IMAP Net_POP3 \

Log Image_Color Image_Canvas \

Image_Graph Numbers_Roman Numbers_Words #新安装组件

通过上述指令能完成大部份组件的安装,但是也可能会出现个别安装不成功的现象,这里就需要通过手动的方式来下载安装不成功的组件进行手动安装.在下载地址的页面中查找安装不成功能组件然后下载到本地([url]http://pear.php.net/package/PEAR/download[/url]),通过下面的命令安装:

/usr/local/pear/bin/pear install /tmp/Image_Canvas-0.3.1.tgz

/usr/local/pear/bin/pear install /tmp/Numbers_Words-0.15.0.tgz

/usr/local/pear/bin/pear install /tmp/Image_Graph-0.7.2.tgz

这些完成之后别忘了在php.ini的设定中加入include_path =  ".:/usr/local/pear"的设定路径.其实安装完PHP就有这样的提示了,不信,仔细看看上面的那张图中的提示.

PEAE也在完全手工的安装方式,但是我测试的情况是提示安装成功却在和组件PHP配合时却不能正常通过测试.如果哪位手工全新的方式安装并测试成功,还请指点一二.手动全新安装的方法如下:在安装过程中有相应的提示,按照相应的提示一步步完成安装.

wget O- [url]http://pear.php.net/go-pear[/url] | php #下载相关文件

/usr/local/php/bin/php go-pear    #安装过程

升级File文件:

为什么要升级的原因前面已经说明了.系统安装时默认会安装此软件,它的主要作用是用来识别文件的类型.先通过"rpm -e --nodepsfil  file-4.10"这样的方式来卸载此软件.([url]http://www.filewatcher.com/m/file-4.21.tar.gz.549938.0.0.html[/url])为新版本file的下载地址.安装方式也很简单.  要注意的是默认的情况下它的可执行文件位于/usr/local/bin下,如果你指定了相关的文件夹,请务必记得可执行文件的路径,因为后面在设定maia时会用到它.

tar zxvf file-4.21.tar.gz

cd file-4.21

./configure

make

make install

下载maia组件并设定相关路径和权限:

maia下载路径为:[url]http://www.maiamailguard.com/download.php[/url],里面有多个版本,选最新的吧.这里相关的路径可以根据自己的实际情况更改,只是在后面的设定文件中需指定设置好的路径.Mysql中需要新建maia数据库,你可以增加新的用户来控制新增的数据库.

cd /var/amavis

mkdir -pv ./maia

tar zxvf maia-1.0.2a.tar.gz

cd maia-1.0.2a

/usr/local/mysql/bin/mysql -u \

root -p maia < ./maia-mysql.sql  #导入初始数据库

mv scripts/ /var/amavis/maia/  #maia的执行脚本

mv templates/ /var/amavis/maia/ #maia的模板程序

chown -R amavis /var/amavis/maia/

chgrp -R amavis /var/amavis/maia/

chmod 640 /var/amavis/maia/templates/*.tpl

chmod 750 /var/amavis/maia/scripts/*.pl

cp maia.conf.dist /etc/maia.conf  #maia的配置文件

chown amavis /etc/maia.conf

chgrp amavis /etc/maia.conf

chmod 640 /etc/maia.conf在完成这些后,Mysql会导入相关的数据,但是我们需要建立相应的用户来控制基本数据库;可以在phpmyadmin中选定maia数据库,然后在其中建立amavis@localhost用户;通过下面的SQL语句给amavis用户授权:"GRANT CREATE,  DROP, ALTER, SELECT, INSERT, UPDATE, DELETE ON maia.* TOamavis@localhostIDENTIFIED BY 'amavis';";

maia.conf是maia的配置文件,它的主要作用是建立和maia数据库以及反垃圾组件的联接.其中有些参数需要根据系统的实际情况进行设定,例如:$script_path.下面是几个重要的地方:$dsn = "DBI:mysql:maia:localhost:3306"; #和数据库关联设定.

$username = "amavis";

$password = "amavis";

完成这些后就可以进行初步的测试了,maia提供了一个测试的脚本来测试用户的关于maia的配置情况,如下所示:请注意图片中红色标记的有关file版本的地方.

/var/amavis/maia/scripts/configtest.plImage00013.jpg

在这里说一下我碰到的情况,我在安装完mysql后更改了它的my.conf配置文件,将它原本是/tmp/mysql.sock改到了/var/mysql/mysql.sock;造成的后果是这里关于数据库的测试通不过,估计它的脚本有点问题,我想到一个比较笨的解决办法"ln  -sv /var/mysql/mysql.sock /tmp/mysql.sock".

测试加载反垃圾邮件规则:

如果通过load-sa-rules.pl的方式加载规则,要注意当有新的规则更新时,需要使用指令重新启动amavisd服务.

/var/amavis/maia/scripts/load-sa-rules.pl --debug安装maia针对PHP的相关文件:

除了maia的相关程序外另外还需要加入Smarty模板引擎,它主要作用是为maia提供模板的更新服务.下载地址为([url]http://www.smarty.net/[/url]).

cd maia-1.0.2a

mv ./php/ /var/www/maia

tar zxvf Smarty-2.6.19.tar.gz

cd Smarty-2.6.19

mkdir /usr/local/php/include/php/Smarty

cp -r ./libs/* /usr/local/php/include/php/Smarty/

mkdir /var/www/mail/libs/Smarty

cp -r ./libs/* /var/www/mail/libs/Smarty/

mv /var/www/maia/config.php.dist /var/www/maia/config.php #配置文件

chmod -R a+w ./themes在完成基本的文件支持后,需要对maia针对PHP进行配置,配置文件是config.php.这个文件中指定了通过WEB页连接数据库的方式及用户端登录系统时的认证方式等.下表是针对邮件策略的设定,如果你需要更改,请参照修改.具体的内容可以查看mysql中maia数据库policy策略表.  认证方式有多种,我这里用的是pop3的方式.Settingamavisd-new equivalentValue range

Pass viruses through?virus_lover'Y' or 'N'

Pass spam through?spam_lover'Y' or 'N'

Pass banned files through?banned_files_lover'Y' or 'N'

Pass mail with invalid headers through?bad_header_lover'Y' or 'N'

Disable virus scanning?bypass_virus_checks'Y' or 'N'

Disable spam checking?bypass_spam_checks'Y' or 'N'

Disable banned files checking?bypass_banned_checks'Y' or 'N'

Disable invalid header checking?bypass_header_checks'Y' or 'N'

Discard viruses?discard_viruses'Y' or 'N'

Discard spam?discard_spam'Y' or 'N'

Discard banned files?discard_banned_files'Y' or 'N'

Discard invalid mail headers?discard_bad_headers'Y' or 'N'

Add a prefix to spam subjects?spam_modifies_subj'Y' or 'N'

Add spam score headers when score is >=spam_tag_level-999.9 to 999.9

Consider mail spam when score is >=spam_tag2_level-999.9 to 999.9

Quarantine or discard spam when score is >=spam_kill_level-999.9 to 999.9

$maia_sql_dsn = "mysql://amavis:amavis@tcp(localhost:3306)/maia"; #数据库连接

$default_charset = UTF-8 #编码

$auth_pop3_host = "localhost";          #认证方式

$auth_pop3_port = 110;

测试的方法为:主机地址/maia/admin/configtest.php

Image00008.jpg

安装amavisd-maia:

cd /tmp/maia-1.02

cp amavisd-maia /usr/local/sbin/

chown root /usr/local/sbin/amavisd-maia

chmod 755 /usr/local/sbin/amavisd-maia

设定amavisd配置:

amavisd的配置存储在amavisd.conf文件中.因为现在更新使用amavisd-maia来启用amavisd服务,所以要先通过"/usr/local/sbin/amavisd stop"停用原有的服务并备份原有的"/etc/amavisd.conf"以便不时之需.当然,如果有必要也可以备份amavisd这个文件.然后执行以下命令并重新配置amavisd.conf文件.

cd /tmp/maia-1.02

cp amavisd.conf.dist /etc/amavisd.conf以下是配置文件中需注意的地方,当然,如果你的配置有变化,请根据实际的情况来确定参数中的内容.

$daemon_user = 'amavis';  #运行用户

$daemon_group = 'amavis';

$mydomain = 'test.com'; #本机域名

$MYHOME = '/var/amavis'; # 路径

@lookup_sql_dsn = ( ['DBI:mysql:maia:localhost', 'amavis', 'amavis'] ); #数据库连接

$mailfrom_notify_admin = "postmaster\@$mydomain";#问题信件的投递地址

$mailfrom_notify_recip = "postmaster\@$mydomain";

$mailfrom_notify_spamadmin = "postmaster\@$mydomain";

$file = '/usr/local/bin/file'; #file文件的路径

$notify_method = 'smtp:[127.0.0.1]:10025'; #投递信件使用的端口

$forward_method = 'smtp:[127.0.0.1]:10025';

启动服务:

/usr/local/sbin/amavisd-maia start

/usr/local/httpd/bin/apachectl stop

/usr/local/httpd/bin/apachectl start

测试maia:

在浏览器中输入:http://主机名称/maia就会进入登陆界面,前面的图中已有登录图片,系统默认的设定是没有开启maia邮件过滤功能,所以登录后需手动完成初次设定,当然也可以通过全局设定来执行自动为每个用户启用过滤功能.如图示:

Image00012.jpg

Image00011.jpg

Image00014.jpg

如果要进入全局设定,则需要将用户注删成管理员才能进行操作,注册的地址为http://主机名称/maia/login.php?super=register.当系统已注册一个管理员后,则不能再通过此方式注册.可以由maia管理员新建或是在maia数据库中更改maia_users表中用户的user_level等级为S.下图是全局管理选项.需注意的是图中有一项为mail  limit size(邮件大小限制),它的默认大小是1M,如果你收发的邮件大于1M,需更改它的值.

Image00015.jpg

Image00016.jpg

Image00017.jpg

后记:

LDAP在默认的情况下没有启用日志记录,需通过下列方式来启用它:必須先在/etc/syslog.conf裏加上一行:local4.* /var/log/ldap.log ;然後touch  /var/log/ldap.log,重啟syslog,就有slapd的log可查了。不過要注意,loglevel預設值為256,只記錄狀態(stats  only),若要記錄其他東西,必須設loglevel值。其中-1是記錄所有除錯信息,小心ldap.log變得太大。loglevel在slapd.conf中定义.

loglevel Logging description

-1 enable all debugging

0 no debugging

1 trace function calls

2 debug packet handling

4 heavy trace debugging

8 connection management

16 print out packets sent and received

32 search filter processing

64 configuration file processing

128 access control list processing

256 stats log connections/operations/results

512 stats log entries sent

1024 print communication with shell backends

2048 print entry parsing debugging

如果邮件日志中出现"534 5.3.4 Message larger than 1046528 bytes rejected,  id=16947-01"之类的错误,请修改mysql的配置文件my.conf中max_allowed_packet = 10M或更大.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部