RHEL4上安装基于postfix的全功能邮件服务器(全部使用目前最新源码包构建) 本文凝聚了作者不少的安装经验,写出来供各位同仁参考指正,也为自己留一个“备份”,以便以后安装时作为参照! 安装过程中借鉴了不少google出来的文章,是你们先行的足迹为作者今天的成功打下了基础,在此先行谢过! 转载请注明出处:http://marion.cublog.cn 所用软件包:(本文中,以下软件包都将在/usr/local/src中存放) Postfix-2.4.5 Mysql-5.0.45 Sasl-2.1.22 DB-4.5.20 Openssl-0.98e httpd-2.2.4 Php-5.2.3 courier-authlib-0.59.3 courier-imap-4.1.3 Extmail-1.0.2 Extman-0.2.2 maildrop-2.0.4 clamav-0.91.2 amavisd-new SpamAssassin-3.2.3 系统逻辑结构 ![]() 前提:开始前请确保您已经配置好指向此邮件服务器MX记录及其它DNS设置;本示例中的域名为benet.org,邮件服务器FQDN为mail.benet.org,IP地址为192.168.1.6;同时,如果您的服务器事先已经安装了sendmail,请卸载之; 一、安装mysql-5.0.45 #groupadd mysql #useradd -g mysql -s /bin/false -M mysql #tar zxvf mysql-5.0.45.tar.gz #cd mysql-5.0.45 #./configure --prefix=/usr/local/mysql --enable-thread-safe-client --enable-local-infile --with-charset=gbk --with-extra-charset=all --with-low-memory #make #make install #cp support-files/my-medium.cnf /etc/my.cnf #cd /usr/local/mysql #chown -R mysql . #chgrp -R mysql . #bin/mysql_install_db --user=mysql #chown -R root . #chown -R mysql var #bin/mysqld_safe --user=mysql & #cd /usr/local/src/mysql-5.0.45 (这里的目录指的是原压缩包解压后的目录) #cp support-files/mysql.server /etc/rc.d/init.d/mysqld #chmod 700 /etc/rc.d/init.d/mysqld 加入自动启动服务队列: #chkconfig --add mysqld #chkconfig --level 345 mysqld on 测试 #/usr/local/mysql/bin/mysqladmin ping #/usr/local/mysql/bin/mysqladmin version #/usr/local/mysql/bin/mysql 添加root密码 #/usr/local/mysql/bin/mysqladmin -uroot -p 旧密码 password 新密码 说明:此时mysql的root用户的密码为空 配置库文件搜索路径 # echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf # ldconfig -v 添加/usr/local/mysql/bin到环境变量PATH中 #export PATH=$PATH:/usr/local/mysql/bin 二、安装openssl-0.9.8e # tar zxvf openssl-0.9.8e.tar.gz # cd openssl-0.9.8e # ./config shared zlib # make # make test # make install # mv /usr/bin/openssl /usr/bin/openssl.OFF # mv /usr/include/openssl /usr/include/openssl.OFF # rm /usr/lib/libssl.so # ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl # ln -s /usr/local/ssl/include/openssl /usr/include/openssl # ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so 配置库文件搜索路径 # echo "/usr/local/ssl/lib" >> /etc/ld.so.conf # ldconfig -v 检测安装结果 # openssl version OpenSSL 0.9.8e 23 Feb 2007 三、安装sasl-2.1.22 #tar zxvf cyrus-sasl-2.1.22.tar.gz #cd cyrus-sasl-2.1.22 #./configure --prefix=/usr/local/sasl2 (注意使用续行符) --disable-gssapi --disable-anon --disable-sample --disable-digest --enable-plain --enable-login --enable-sql --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket #make #make install 关闭原有的sasl: # mv /usr/lib/libsasl2.a /usr/lib/libsasl2.a.OFF # mv /usr/lib/libsasl2.la /usr/lib/libsasl2.la.OFF # mv /usr/lib/libsasl2.so.2.0.19 /usr/lib/libsasl2.so.2.0.19.OFF # mv /usr/lib/sasl2 /usr/lib/sasl2.OFF # rm /usr/lib/libsasl2.so # rm /usr/lib/libsasl2.so.2 # ln -sv /usr/local/sasl2/lib/* /usr/lib postfix 2.3以后的版本会分别在/usr/local/lib和/usr/local/include中搜索sasl库文件及头文件,故还须将其链接至此目录中: # ln -sv /usr/local/sasl2/lib/* /usr/local/lib # ln -sv /usr/local/sasl2/include/sasl/* /usr/local/include 创建运行时需要的目录并调试启动 # mkdir -pv /var/state/saslauthd # /usr/local/sasl2/sbin/saslauthd -a shadow pam -d 启动并测试 # /usr/local/sasl2/sbin/saslauthd -a shadow pam # /usr/local/sasl2/sbin/testsaslauthd -u root -p root用户密码 配置库文件搜索路径 # echo "/usr/local/sasl2/lib" >> /etc/ld.so.conf # echo "/usr/local/sasl2/lib/sasl2" >> /etc/ld.so.conf # ldconfig -v 开机自动启动 # echo "/usr/local/sasl2/sbin/saslauthd -a shadow pam">>/etc/rc.local 四、安装BerkeleyDB #tar zxvf db-4.5.20.tar.gz #cd db-4.5.20/build_unix #../dist/configure --prefix=/usr/local/BerkeleyDB #make #make install 修改相应的头文件指向 # mv /usr/include/db4 /usr/inculde/db4.OFF # rm /usr/include/db_cxx.h # rm /usr/include/db.h # rm /usr/include/db_185.h # ln -sv /usr/local/BerkeleyDB/include /usr/include/db4 # ln -sv /usr/local/BerkeleyDB/include/db.h /usr/include/db.h # ln -sv /usr/local/BerkeleyDB/include/db_cxx.h /usr/include/db_cxx.h 配置库文件搜索路径 # echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf # ldconfig –v 五、安装httpd-2.2.4 #tar jxvf httpd-2.2.4.tar.bz2 #cd httpd-2.2.4 #./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --with-ssl=/usr/local/ssl --enable-track-vars --enable-rewrite --with-zlib --enable-mods-shared=most --enable-suexec (后面extmail切换”运行时用户”时要用到) --with-suexec-caller=daemon #make #make install #echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local(系统启动时服务自动启动) 六、安装php-5.2.3 # tar -zvxf php-5.2.3.tar.gz # mkdir -p /usr/local/php # cd php-5.2.3 # ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-xml --with-png --with-jpeg --with-zlib --with-freetype --with-gd --enable-track-vars --enable-mbstring=all # make # make install # cp php.ini-dist /usr/local/php/lib/php.ini 注:编辑apache配置文件httpd.conf,以apache支持php # vi /etc/httpd/httpd.conf 1、添加如下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 2、定位至DirectoryIndex index.html 修改为: DirectoryIndex index.php index.html 3、按照使用习惯,这里将网站根目录指定到/var/www: 找到DocumentRoot “/usr/local/apache/htdocs” 修改为:DocumentRoot “/var/www”(后文中我们还会注释掉此行,以启用虚拟主机) 找到<Directory “/usr/local/apache/htdocs”> 修改为:<Directory “/var/www”> 说明:这个对本文来说并非是不可少的。 七、安装Postfix-2.4.5 1.安装 #groupadd -g 2525 postfix #useradd -g postfix -u 2525 -s /sbin/nologin -M postfix #groupadd -g 2526 postdrop #useradd -g postdrop -u 2526 -s /bin/false -M postdrop #tar zxvf postfix-2.4.5.tar.gz #cd postfix-2.4.5 #make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl -I/usr/local/BerkeleyDB/include -DUSE_TLS -I/usr/local/ssl/include/openssl ' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/local/ssl/lib -lssl -lcrypto' #make #make install 按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值) install_root: [/] / tempdir: [/usr/local/src/ postfix-2.4.5] /tmp config_directory: [/etc/postfix] /etc/postfix daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec command_directory: [/usr/sbin] /usr/local/postfix/sbin queue_directory: [/var/spool/postfix] sendmail_path: [/usr/sbin/sendmail] newaliases_path: [/usr/bin/newaliases] mailq_path: [/usr/bin/mailq] mail_owner: [postfix] setgid_group: [postdrop] html_directory: [no] /var/www/postfix_html manpages: [/usr/local/man] /usr/local/postfix/man readme_directory: [no] 说明:这里的postfix将安装在独立的目录/usr/local/postfix中,目的是为了方便管理;您亦可以采用默认安装的方式,可能这样使用起来会更为方便些; 生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低: # newaliases 2.进行一些基本配置,测试启动postfix并进行发信 #vi /etc/postfix/main.cf 修改以下几项为您需要的配置 myhostname = mail.benet.org myorigin = benet.org mydomain = benet.org mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks = 192.168.1.0/24, 127.0.0.0/8 说明: myorigin参数用来指明发件人所在的域名; mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件; myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名; mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值; mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问; inet_interfaces 参数指定postfix系统监听的网络接口; 注意: 1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的; 2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用; 3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix; 4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续; 启动postfix /usr/local/postfix/sbin/postfix start 连接postfix,验正服务启动状况: # telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 mail.benet.org ESMTP Postfix ehlo mail.benet.org 250-mail.benet.org 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN mail from:root@benet.org 250 2.1.0 Ok rcpt to:redhat@benet.org 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> subject:Mail test! Mail test!!! . 250 2.0.0 Ok: queued as AB94A1A561 quit 221 2.0.0 Bye Connection closed by foreign host. 切换到redhat用户进行收信: # su - redhat Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/redhat": 1 message 1 new >N 1 root@benet.org Wed Sep 5 10:59 15/488 "Mail test!" & 八、为postfix开启基于cyrus-sasl的认证功能 使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的: # /usr/local/postfix/sbin/postconf -a cyrus dovecot #vi /etc/postfix/main.cf 添加以下内容: ############################CYRUS-SASL############################ broken_sasl_auth_clients = yes smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous smtpd_sasl_application_name = smtpd smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available! #vi /usr/local/lib/sasl2/smtpd.conf 添加如下内容: pwcheck_method: saslauthd mech_list: PLAIN LOGIN 让postfix重新加载配置文件 #/usr/local/postfix/sbin/postfix reload # telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 Welcome to our mail.benet.org ESMTP,Warning: Version not Available! ehlo mail.benet.org 250-mail.benet.org 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN (请确保您的输出以类似两行) 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 九、让postfix支持虚拟域和虚拟用户 1、编辑/etc/postfix/main.cf,添加如下内容: ########################Virtual Mailbox Settings######################## virtual_mailbox_base = /var/mailbox virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_alias_domains = virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_uid_maps = static:2525 virtual_gid_maps = static:2525 virtual_transport = virtual maildrop_destination_recipient_limit = 1 maildrop_destination_concurrency_limit = 1 ##########################QUOTA Settings######################## message_size_limit = 14336000 virtual_mailbox_limit = 20971520 virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later. virtual_overquota_bounce = yes 2、添加为支持虚拟域和虚拟用户所用到的配置文件 编辑/etc/postfix/mysql_virtual_alias_maps.cf ,添加如下内容: user = extmail password = extmail hosts = localhost dbname = extmail table = alias select_field = goto where_field = address 编辑/etc/postfix/mysql_virtual_domains_maps.cf ,添加如下内容: user = extmail password = extmail hosts = localhost dbname = extmail table = domain select_field = description where_field = domain 编辑/etc/postfix/mysql_virtual_mailbox_limit_maps.cf ,添加如下内容: user = extmail password = extmail hosts = localhost dbname = extmail table = mailbox select_field = quota where_field = username 编辑/etc/postfix/mysql_virtual_mailbox_maps.cf ,添加如下内容: user = extmail password = extmail hosts = localhost dbname = extmail table = mailbox select_field = maildir where_field = username 说明: 1、这里用到的数据库及用户的建立可以后文中的extmail说明部分来实现,您可以参照那一部分来理解这里指定的数据库及其用户名等; 2、以上新建文件亦可以从extman安装文件中获得,您也可以由此不用手动输入; 3、虚拟用户邮箱目录我这里沿用了/var/mailbox,你可以指定为别的目录,比如常见到的/var/spool/mail,或者/home/domains等;但如果这里做了修改,请在后文中用到时作了相应的修改; 十、安装Courier authentication library # tar jxvf courier-authlib-0.59.3.tar.bz2 # cd courier-authlib-0.59.3 #./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc CFLAGS="-march=i686 -O2 -fexpensive-optimizations" CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations" # make # make install # chmod 755 /usr/local/courier-authlib/var/spool/authdaemon # cp /etc/authdaemonrc.dist /etc/authdaemonrc # cp /etc/authmysqlrc.dist /etc/authmysqlrc 修改/etc/authdaemonrc 文件 authmodulelist="authmysql" authmodulelistorig="authmysql" daemons=10 编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。 MYSQL_SERVER localhost MYSQL_PORT 3306 (指定你的mysql监听的端口,这里使用默认的3306) MYSQL_USERNAME extmail (这时为后文要用的数据库的所有者的用户名) MYSQL_PASSWORD extmail (密码) MYSQL_SOCKET /tmp/mysql.sock MYSQL_DATABASE extmail MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD '2525' MYSQL_GID_FIELD '2525' MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD concat('/var/mailbox/',homedir) MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) # cp courier-authlib.sysvinit /etc/init.d/courier-authlib # chmod 755 /etc/init.d/courier-authlib # chkconfig --add courier-authlib # chkconfig --level 2345 courier-authlib on #echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf # ldconfig -v # service courier-authlib start (启动服务) 十一、安装Courier-IMAP # tar jxvf courier-imap-4.1.3.tar.bz2 # cd courier-imap-4.1.3 ./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/local/ssl/include/openssl -I/usr/local/courier-authlib/include' LDFLAGS='-L/usr/local/courier-authlib/lib/courier-authlib' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig' # make # make install # cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd # cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl # cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d # cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl 配置Courier-IMAP,为用户提供pop3服务: vi /usr/local/courier-imap/etc/pop3d POP3DSTART=YES 注:如果你想为用户提供IMAP服务,则需在"/usr/local/courier-imap/etc/imapd"文件中设置"IMAPDSTART=yes";其它类同; 新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户: #mkdir –pv /var/mailbox #chown –R postfix /var/mailbox #cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imapd #chmod 755 /etc/rc.d/init.d/courier-imapd #chkconfig --add courier-imapd #chkconfig --level 2345 courier-imapd on #service courier-imapd start 接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容: pwcheck_method: authdaemond log_level: 3 mech_list:PLAIN LOGIN authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket [ 本帖最后由 marion 于 2008-7-19 16:17 编辑 ] |
您对本贴的看法:鲜花[1] 臭蛋[0] |
marion ![]() 风云使者 ![]() CU编号: 475456 注册:2006-10-12 最后登录: 2009-08-13 帖子:477 精华:7 可用积分:1288 (家境小康) 信誉积分:100 专家积分:120 (本版:120) 空间积分:0 推广积分:0 状态:...保密... [个人空间] [短信] [博客] |
|
marion ![]() 风云使者 ![]() CU编号: 475456 注册:2006-10-12 最后登录: 2009-08-13 帖子:477 精华:7 可用积分:1288 (家境小康) 信誉积分:100 专家积分:120 (本版:120) 空间积分:0 推广积分:0 状态:...保密... [个人空间] [短信] [博客] |
|
MIME::Base64
DB_File
Net::SMTP
Mail::SPF
IP::Country::Fast
Net::Ident
IO::Socket::INET6
IO::Socket::SSL
Compress::Zlib
Time::HiRes
Mail::DKIM
Mail::DomainKeys
DBI *and* DBD driver/modules
Encode::Detect
Apache::Test
Razor2
推荐使用CPAN自动安装(你的主机要能连上Internet),它能够自动下载安装,并能解决安装过程中的依赖关系。您可以使用类同的以下的命令来进行安装:
#perl -MCPAN -e shell
cpan> install Digest::SHA1
………………
如果您的主机无法直接连接到Internet,您也可以到http://search.cpan.org上搜索下载所需要的软件包,而后使用类同的下列命令安装:
#tar zxvf 软件包.tar.gz
#cd 软件包
#perl Makefile.PL
#make
#make test
#make install
说明:某些软件包安装的过程中可能需要已经列出的其它软件包的支持(可以先尝试安装Spamassassin,然后按提示补充所需软件包),请安照提示自行调整安装顺序。另外,其中有个软件包安装过程中可能要求声明环境变量LC_ALL,此时,可输入如下命令,并重新进行软件包的编译安装即可。
#export LC_ALL=C
2、安装Spamassassin-3.2.3
#tar jxvf Mail-SpamAssassin-3.2.3.tar.bz2
#cd Mail-SpamAssassin-3.2.3
#perl Makefile.PL
#make
#make check
#make istall
3、编辑主配置文件/etc/mail/spamassassin/local.cf
required_hits 10.0
rewrite_subject 1
required_score 5.0
rewrite_header Subject *****SPAM*****
report_safe 1
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 1
use_razor2 0
use_pyzor 0
ok_locales all
4、测试spamassassin
#spamassassin -t < sample-nonspam.txt > nonspam.out
#spamassassin -t < sample-spam.txt > spam.out
查看测试结果:
#less nonspam.out
#less spam.out
5、检查配置文件
#spamassassin -d --lint
6、启动进程,并将其加入到自动启动队列
#/usr/bin/spamd -d
#echo "/usr/bin/spamd -d" >> /etc/rc.local
十七、安装amavisd-new-2.5.2
1、依赖关系的解决
以下为官方声明所必须的软件包列表,你可以采用类同安装Spamassassin一节中的perl模块的安装方法进行安装
Archive::Zip (Archive-Zip-x.xx) (1.14 or later should be used!)
Compress::Zlib (Compress-Zlib-x.xx) (1.35 or later)
Convert::TNEF (Convert-TNEF-x.xx)
Convert::UUlib (Convert-UUlib-x.xxx) (1.08 or later, stick to new versions!)
MIME::Base64 (MIME-Base64-x.xx)
MIME::Parser (MIME-Tools-x.xxxx) (latest version from CPAN - currently 5.420)
Mail::Internet (MailTools-1.58 or later have workarounds for Perl 5.8.0 bugs)
Net::Server (Net-Server-x.xx) (version 0.88 finally does setuid right)
Digest::MD5 (Digest-MD5-x.xx) (2.22 or later)
IO::Stringy (IO-stringy-x.xxx)
Time::HiRes (Time-HiRes-x.xx) (use 1.49 or later, older can cause problems)
Unix::Syslog (Unix-Syslog-x.xxx)
BerkeleyDB with bdb library 3.2 or later (4.2 or later preferred)
2、安装amavisd-new-2.5.2
创建运行时目录,并赋予amavis用户(前文中所建)
# mkdir -pv /var/amavis/{tmp,var,db,home}
# chown -R amavis:amavis /var/amavis
#chmod -R 750 /var/amavis
#tar zxvf amavisd-new-2.5.2.tar.gz
#cd amavisd-new-2.5.2
拷贝服务端至$PATH中指定的目录,推荐拷贝至/usr/local/sbin:
#cp amavisd /usr/local/sbin/
#chown root /usr/local/sbin/amavisd
#chmod 755 /usr/local/sbin/amavisd
拷贝主配置文件至/etc,并修改相应的权限:
#cp amavisd.conf /etc
# chown root:amavis /etc/amavisd.conf
# chmod 640 /etc/amavisd.conf
创建amavisd运行中所需要的隔离区域:
# mkdir -v /var/virusmails
# chown amavis:amavis /var/virusmails/
# chmod 750 /var/virusmails/
3、编辑主配置文件
#vi /etc/amavisd.conf
确保您的如下选项的值如下文所示:
$daemon_user = 'amavis';
$daemon_group = 'amavis';
$mydomain = 'benet.org'; (此处可更改为您集体的域)
$virus_admin = "postmaster\@$mydomain";
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain";
$mailfrom_to_quarantine = '';
virus_admin_maps => ["postmaster\@$mydomain"] (指定报告病毒和垃圾邮件时发送系统邮件的用户身份)
spam_admin_maps => ["postmaster\@$mydomain"]
启用ClamAV,(大概在第355行)去掉如下行前的注释符:
#['ClamAV-clamd',
# \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
# qr/\bOK$/, qr/\bFOUND$/,
# qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/],
并将如上行中的/var/run/clamav/clamd修改为:/var/run/clamav/clamd.socket
4、测试启动
#/usr/local/sbin/amavisd
您也可以按如下命令调试启动
#/usr/local/sbin/amavisd debug
5、修改postfix的配置,让它能调用amavisd,以实现病毒及垃圾邮件的过滤
#vi /etc/postfix/master.cf
在文末添加如下内容:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
#
amavisfeed unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
#
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
-o local_header_rewrite_clients=
说明:注意每行“-o”前的空格;
#vi /etc/postifx/main.cf
在文末添加如下行:
content_filter=amavisfeed:[127.0.0.1]:10024
4、让postfix重新加载主配置文件,并查看启动情况
# postfix reload && tail -f /var/log/maillog
5、查看amavisd是否在监听10024端口,并测试服务启动情况:
# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
EHLO localhost
250-[127.0.0.1]
250-VRFY
250-PIPELINING
250-SIZE
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 XFORWARD NAME ADDR PROTO HELO
Quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.
6、postfix重新加载配置文件后将授权并激活"127.0.0.1:10025"端口,一个正常的服务连接应该类同下面所示:
# telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Welcome to our mail.benet.org ESMTP,Warning: Version not Available
EHLO localhost
250-mail.benet.org
250-PIPELINING
250-SIZE 14336000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
7、通过amavisd测试发信
]# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
HELO localhost
250 [127.0.0.1]
MAIL FROM:<>
250 2.1.0 Sender <> OK
RCPT TO:<postmaster>
250 2.1.5 Recipient <postmaster> OK
DATA
354 End data with <CR><LF>.<CR><LF>
From:Anti-Virus tester
To: MailServer Admin
Subject:amavisd test!
amavisd test!!
.
250 2.0.0 Ok: queued as 263FC1A609
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.
接下来使用root用户测试收信
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 Anti-Virus tester Wed Sep 19 01:19 23/798 "amavisd test!"
& 1
Message 1:
From MAILER-DAEMON Wed Sep 19 01:19:16 2007
X-Original-To: postmaster
Delivered-To: postmaster@benet.org
X-Quarantine-ID: <3gmvpc8RxPtn>
X-Virus-Scanned: amavisd-new at benet.org
X-Amavis-Alert: BAD HEADER, MIME error: error: unexpected end of header
From:Anti-Virus tester
To: MailServer Admin
Subject:amavisd test!
Date: Wed, 19 Sep 2007 01:19:15 +0800 (CST)
amavisd test!!
&
十八、测试使用反病毒及反垃圾模块
1、病毒邮件发送测试
登录extmail,发送带有病毒附件的邮件(病毒样本文件后文附有),查看发送情况:
# tail -3 /var/log/clamav/clamd.log
Database correctly reloaded (148100 signatures)
/var/amavis/tmp/amavis-20070918T225935-28502/parts/p002: Trojan.Downloader.Delf-747 FOUN
#tail -15 /var/log/maillog
Sep 18 23:36:40 mail postfix/cleanup[29002]: 8C1681A609: message-id=<[email]20070918153640.8C1681A609@mail.benet.org[/email]>
Sep 18 23:36:40 mail postfix/qmgr[28924]: 8C1681A609: from=<[email]marion@test.com[/email]>, size=83658, nrcpt=1 (queue active)
Sep 18 23:36:43 mail clamd[28473]: /var/amavis/tmp/amavis-20070918T225935-28502/parts/p002: Trojan.Downloader.Delf-747 FOUND
Sep 18 23:36:44 mail postfix/smtpd[29011]: connect from mail[127.0.0.1]
Sep 18 23:36:44 mail postfix/smtpd[29011]: CDF9B1A602: client=mail[127.0.0.1]
Sep 18 23:36:44 mail postfix/cleanup[29002]: CDF9B1A602: message-id=<[email]VA7mnx1DHavOWC@mail.benet.org[/email]>
Sep 18 23:36:44 mail postfix/smtpd[29011]: disconnect from mail[127.0.0.1]
Sep 18 23:36:44 mail postfix/qmgr[28924]: CDF9B1A602: from=<[email]postmaster@benet.org[/email]>, size=2230, nrcpt=1 (queue active)
Sep 18 23:36:44 mail amavis[28502]: (28502-05) Blocked INFECTED (Trojan.Downloader.Delf-747), <[email]marion@test.com[/email]> -> <[email]marion@test.com[/email]>, quarantine: virus-7mnx1DHavOWC, Message-ID: <[email]20070918153640.8C1681A609@mail.benet.org[/email]>, mail_id: 7mnx1DHavOWC, Hits: -, size: 83658, 4203 ms
Sep 18 23:36:45 mail postfix/smtp[29006]: 8C1681A609: to=<[email]marion@test.com[/email]>, relay=127.0.0.1[127.0.0.1]:10024, delay=4.7, delays=0.42/0.05/0.12/4.1, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=28502-05 - VIRUS: Trojan.Downloader.Delf-747)
Sep 18 23:36:45 mail postfix/qmgr[28924]: 8C1681A609: removed
Sep 18 23:36:45 mail postfix/local[29014]: CDF9B1A602: to=<[email]root@benet.org[/email]>, orig_to=<[email]postmaster@benet.org[/email]>, relay=local, delay=0.28, delays=0.12/0.09/0/0.07, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 18 23:36:45 mail postfix/qmgr[28924]: CDF9B1A602: removed
说明:此附件中带有特洛伊病毒,请不要作为危害别人之用,而对于您的操作不慎而给您带来的后果,作者不负任何责任;病毒样本如下:

2、垃圾邮件测试
登录extmail,新建一封邮件,拷贝以下内容作为邮件正文,并查看发送情况:
This is the GTUBE, the
Generic
Test for
Unsolicited
Bulk
If your spam filter supports it, the GTUBE provides a test by which you
can verify that the filter is installed correctly and is detecting incoming
spam. You can send yourself a test mail containing the following string of
characters (in upper case and with no white spaces and line breaks):
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
查看发送结果:
#tail -15 /var/log/maillog
Sep 19 00:04:11 mail spamd[29062]: rules: meta test FM_DDDD_TIMES_2 has dependency 'FH_HOST_EQ_D_D_D_D' with a zero score
Sep 19 00:04:11 mail spamd[29062]: rules: meta test FM_SEX_HOSTDDDD has dependency 'FH_HOST_EQ_D_D_D_D' with a zero score
Sep 19 00:04:11 mail spamd[29062]: rules: meta test HS_PHARMA_1 has dependency 'HS_SUBJ_ONLINE_PHARMACEUTICAL' with a zero score
Sep 19 00:04:11 mail spamd[29062]: spamd: server started on port 783/tcp (running version 3.2.3)
Sep 19 00:04:12 mail spamd[29062]: spamd: server pid: 29062
Sep 19 00:04:12 mail spamd[29062]: spamd: server successfully spawned child process, pid 29064
Sep 19 00:04:12 mail spamd[29062]: spamd: server successfully spawned child process, pid 29065
Sep 19 00:04:12 mail spamd[29062]: prefork: child states: II
Sep 19 00:06:44 mail postfix/pickup[28925]: E37651A60E: uid=1001 from=<[email]marion@test.com[/email]>
Sep 19 00:06:44 mail postfix/cleanup[29073]: E37651A60E: message-id=<[email]20070918160643.E37651A60E@mail.benet.org[/email]>
Sep 19 00:06:45 mail postfix/qmgr[28924]: E37651A60E: from=<[email]marion@test.com[/email]>, size=1041, nrcpt=1 (queue active)
Sep 19 00:07:01 mail amavis[28502]: (28502-06) Blocked SPAM, <[email]marion@test.com[/email]> -> <[email]marion@test.com[/email]>, quarantine: spam-7ui+Zpn7-M00.gz, Message-ID: <[email]20070918160643.E37651A60E@mail.benet.org[/email]>, mail_id: 7ui+Zpn7-M00, Hits: 1004.576, size: 1040, 12805 ms
Sep 19 00:07:01 mail postfix/smtp[29079]: E37651A60E: to=<[email]marion@test.com[/email]>, relay=127.0.0.1[127.0.0.1]:10024, delay=18, delays=1.8/1.5/4.9/9.9, dsn=2.5.0, status=sent (250 2.5.0 Ok, id=28502-06, DISCARD(bounce.suppressed))
Sep 19 00:07:01 mail postfix/qmgr[28924]: E37651A60E: removed
待续……
:好消息:在518、519、520、523、524楼,柳拂风朋友对本文做了大量扩充,建议朋友们参照!
在701、702楼,zenglingping朋友对本文做了不少的扩充,建议朋友们参照。
[ 本帖最后由 marion 于 2008-7-23 10:13 编辑 ]