centos postfix mysql_CentOS 5.5下邮件服务器Postfix安装

操作系统(OS) CentOS 5.5

邮件传输代理(MTA) Postfix  使用最新版本2.6.x

数据库/目录服务 MySQL 5.0  可选openLDAP或NetScape LDAP,本文以MySQL为蓝本

邮件投递代理(MDA) maildrop 2.0.x 支持过滤和强大功能

Web帐户管理后台 ExtMan 0.2.5 支持无限域名、无限用户

POP3 服务器 Courier-IMAP 对于大部分企业而言完全足够

WebMail 系统 ExtMail 1.1 支持多语言、全部模板化,功能基本齐全

SMTP认证库 Cyrus SASL  标准的SASL实现库,可以支持Courier authlib

其他数据认证库 Courier Authlib 0.60 authlib是maildrop, courier-imap等服务的关键部件

日志分析及显示 mailgraph_ext 在ExtMan中已经包含了

Web 服务器 Apache 2.x OS 自带

1. 安装postfix

service sendmail stop

yum install httpd-devel bind bind-chroot caching-nameserver

卸载不支持mysql认证的postfix

rpm -e postfix

安装postfix

yum install postfix-2.6.2-5hzq.i386.rpm

查看是否支持mysql认证

postconf -m

修改postfix配置文件

vim /etc/postfix/main.cf

myhostname = mail.up.com

mydomain = up.com

inet_interfaces = all

mydestination = $myhostname, $mydomain, localhost

启动postfix

service postfix restart

2. 安装courier-authlib

使用authlib登陆验证.这样可以不用管后台用户数据是用什么方式存储的.比方说MySQL/LDAP

yum install courier-authlib

yum install courier-authlib-mysql

修改authdaemon socket目录权限

如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证:

chmod 755 /var/spool/authdaemon

cd /etc/authlib/

vim authdaemonrc

authmodulelist="authmysql"

authmodulelistorig="authmysql"

vim /etc/authlib/authmysqlrc

MYSQL_SERVER        localhost

MYSQL_USERNAME        extmail

MYSQL_PASSWORD        extmail

MYSQL_SOCKET        /var/lib/mysql/mysql.sock

MYSQL_PORT        3306

MYSQL_DATABASE        extmail

MYSQL_USER_TABLE    mailbox

MYSQL_CRYPT_PWFIELD    password

MYSQL_UID_FIELD        uidnumber

MYSQL_GID_FIELD        gidnumber

MYSQL_LOGIN_FIELD    username

MYSQL_HOME_FIELD    concat('/var/mailbox/',homedir)

MYSQL_MAILDIR_FIELD    concat('/var/mailbox/',maildir)

启动courier-authlib

service courier-authlib start

创建邮箱目录

mkdir /var/mailbox

3. 安装courier-imap

yum install courier-imap

ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。

vi /usr/lib/courier-imap/etc/imapd

IMAPDSTART=NO

vi /usr/lib/courier-imap/etc/imapd-ssl

IMAPDSSLSTART=NO

重新启动courier-imap

service courier-imap start

4. 安装maildrop

maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一,我们在此将使用maildrop来代替postfix自带的MDA。

yum install maildrop

为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件:

maildrop   unix        -       n        n        -        -        pipe

flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数:

maildrop_destination_recipient_limit = 1

maildrop -v   测试

检查安装结果,请确保有"Courier Authentication Library extension enabled."一句出现:

maildrop RPM包安装时,会自动创建vuser用户及vgroup用户组,专门用于邮件的存储,vuser:vgroup的uid/gid都是1000

修改邮箱目录属性:

chown vuser.vgroup /var/mailbox -R

5. 安装cyrus-sasl

yum install cyrus-sasl

开启postfix的smtp认证

vim /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination

让postfix支持虚拟用户

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_transport = maildrop

#local_recipient_maps = (注释去掉)

编辑smtpd.conf文件,让虚拟用户到mysql数据库认证

vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: authdaemond

log_level: 3

mech_list: PLAIN LOGIN

authdaemond_path:/var/spool/authdaemon/socket

chmod -R 777 /var/spool/authdaemon/

service saslauthd start

6. 安装ExtMail和extman

yum install extsuite-webmail

cd /var/www/extsuite/extmail

cp webmail.cf.default webmail.cf

vi webmail.cf

语言选项,可改作:

SYS_USER_LANG = zh_CN

此处即为您在前文所设置的用户邮件的存放目录,可改作:

SYS_MAILDIR_BASE = /var/mailbox/

SYS_MYSQL_USER = extmail

SYS_MYSQL_PASS = extmail

SYS_MYSQL_DB = extmail

chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/

yum install extsuite-webman

vim /var/www/extsuite/extman/webman.cf

此处即为您在前文所设置的用户邮件的存放目录,可改作:

SYS_MAILDIR_BASE = /var/mailbox

SYS_CAPTCHA_ON = 0   //不需要认证码

mkdir /tmp/extman

chown vuser.vgroup /tmp/extman

设置虚拟域和虚拟用户的配置文件

cp /var/www/extsuite/extman/docs/mysql_virtual_*.cf /etc/postfix/

chown -R vuser:vgroup /var/www/extsuite/extman/cgi/

导入mysql数据库结构及初始化数据

cd /var/www/extsuite/extman/docs

# mysql -u root -p

# mysql -u root -p <init.sql

测试authlib认证:

/usr/sbin/authtest -s login postmaster@extmail.org extmail

Authentication succeeded.

Authenticated: postmaster@extmail.org  (uid 1000, gid 1000)

Home Directory: /var/mailbox/extmail.org/postmaster

Maildir: /var/mailbox/extmail.org/postmaster/Maildir/

Quota: (none)

Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0

Cleartext Password: extmail

Options: (none)

这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库

修改httpd.conf文件

NameVirtualHost *:80

Include conf/vhost_*.conf

vi /etc/httpd/conf/vhost_extmail.conf

<VirtualHost *:80>

ServerName mail.lx.com

DocumentRoot /var/www/extsuite/extmail/html/

ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

Alias /extmail /var/www/extsuite/extmail/html/

ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/

Alias /extman /var/www/extsuite/extman/html/

SuexecUserGroup vuser vgroup

service httpd restart

7. 访问及测试

http://mail.lx.com/extman

选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org

密码为:extmail*123*

登录成功后创建虚拟域和虚拟用户

使用telnet登录25和110端口进行测试

telnet localhost 25

ehlo localhost

auth login

perl -MMIME::Base64 -e 'print encode_base64("abc\@lx.com");'

perl -MMIME::Base64 -e 'print encode_base64("123");'

mail from:a@lx.com

rcpt to:b@lx.com

data

blablablaba

.

quit

telnet localhost 110

user b@lx.com

pass 123

list

retr 1

dele 1

quit

测试maildrop,输出如下:

echo "test mail" | maildrop -V 10 -d abc@lx.com

maildrop: authlib: groupid=1000

maildrop: authlib: userid=1000

maildrop: authlib: logname=abc@lx.com, home=/var/mailbox/lx.com/abc, mail=/var/mailbox/lx.com/abc/Maildir/

maildrop: Changing to /var/mailbox/lx.com/abc

Message start at 0 bytes, envelope sender=abc@lx.com

maildrop: Attempting .mailfilter

maildrop: Delivery complete.

如果发信提示:

SMTP rcpt error: 5.1.1 : Recipient address rejected: User unknown in local recipient table

请在/etc/postfix/main.cf里面确保存在下面配置

local_recipient_maps =

如果发送邮件成功,但是无法接收邮件,请注释掉下面三项:

#mydestination

8. extman图形日志:

/usr/local/mailgraph_ext/mailgraph-init start

/var/www/extsuite/extman/daemon/cmdserver --daemon

开机自启动:

# echo “/usr/local/mailgraph_ext/mailgraph-init start” >> /etc/rc.d/rc.local

# echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” >> /etc/rc.d/rc.local

=========================

9. 邮件过滤:

Postfix可以根据“client, sender, recipient”对邮件进行过滤

postfix可以使用“smtpd_*_restrictions”参数对邮件进行约束,其中的“*” 可以以“client, sender等”代替。

1).smtpd_client_restrictions

针对client进行限制,编辑/etc/postfix/main.cf,添加以下参数

smtpd_client_restrictions = hash:/etc/postfix/client_access

这条语句的意思是要我们将把客户端的限制策略加入一条限制规则"check_client_access":把针对客户的限制写在client_access文件中,并且以hash数据库的形式存储。

编写/etc/postfix/client_access文件,内容如下

192.168.1.23      reject

这代表来自192.168.1.23这台主机将不能通过postfix服务器进行发信。本文件的格式前面为client的ip ,后面为动作“ok”或“reject”。

此时一定要记得使用“postmap”命令将client_access生成hash数据库。命令如下:

#cd  /etc/postfix

#postmap  client_access

然后重新启动postfix服务器。

2). smtpd_sender_restrictions

针对client进行限制,编辑/etc/postfix/main.cf,添加以下参数

smtpd_sender_restrictions = hash:/etc/postfix/sender_access

这条语句的意思是要我们将把客户端的限制策略加入一条限制规则“check_sender_access”:把针对客户的限制写在sender_access文件中,并且以hash数据库的形式存储。

编写/etc/postfix/sender_access文件,内容如下

abc@beijing.com  reject

163.com        reject

这代表诸如用户名像“abc@163.com” 这样以“163.com”结尾的用户都不能使用该服务器发信。

此时一定要记得使用“postmap”命令将sender_access生成hash数据库。命令如下:

#cd  /etc/postfix

#postmap  sender_access

3).  smtpd_recipient_restrictions

针对recipient进行限制,编辑/etc/postfix/main.cf,添加以下参数

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_access,permit_sasl_authenticated,reject_unauth_destination,注意规则的顺序,先检查收件人是否拒绝,如果不拒绝则再向后检查下一个规则是否为合法用户。

4)  针对mail的”header” 与 “body” 进行检查

针对邮件内容进行限制,编辑/etc/postfix/main.cf,添加以下参数

header_checks = regexp:/etc/postfix/header_checks

这条语句的意思是要我们针对mail的“主题”进行检查,如果“主题”中包含了“/etc/postfix/header_checks”文中按照正则表达式规定的关键字,将会按照” /etc/postfix/header_checks”文中的动作进行处理。

编写/etc/postfix/header_checks文件,内容如下:

/hello/  reject  go out

“/ /”正则表达式内的匹配关键字要写在里面,本例中,如果主题包括hello则拒绝该邮件,同时显示“go out”警告。不需要生成数据库文件。

重新启动postfix ,进行测试会看到以下警告信息。

body_checks = regexp:/etc/postfix/body_checks

这条语句的意思是我们要针对mail的“body”进行检查,如果“body”中包含了“/etc/postfix/body_checks”文中按照正则表达式规定的关键字,将会按照” /etc/postfix/body_checks”文中的动作进行处理。

编写/etc/postfix/body_checks文件,内容如下:

/sex/  reject  go out

“/ /”正则表达式内的匹配关键字要写在里面,本例中,如果mail内容出现包括sex的关键字则拒绝该邮件,同时显示“go out”警告。使用telnet方法发信能看出效果。

正则表示式的功能非常强大,建议读者自行去学习研究,然后定制出自己的mail检查方法。

以上只是邮件的初步过滤,对于网上发垃圾、病毒邮件的高手总能绕过我们的策略,我们使用流行的反垃圾防病毒。

===========================================

10. 反垃圾病毒邮件软件

安装amavisd-new

yum install amavisd-new

中文过滤规则

cp Chinese_rules.cf /usr/share/spamassassin/

service amavisd start

lsof -i:10024

安装ClamAV

yum install clamd

vim /etc/clamd.conf

去掉 ‘LocalSocket /var/run/clamav/clamd.sock’的注释,并注释掉 ‘TCPSocket 3310’,我们将使用unix socket而不是TCP,两者不可并存

设置相关目录权限:

将clamav加到amavis运行组里,并调整目录权限,否则clamav将无法扫描amavisd-new产生的临时文件

usermod -G amavis clamav

chown amavis.amavis /var/spool/vscan

chmod 750 /var/spool/vscan

chown amavis.amavis /var/spool/vscan/tmp

chmod 750 /var/spool/vscan/tmp

启动ClamAV及更新病毒库

service clamd start

配置amavisd.con文件

vim /etc/amavisd/amavisd.conf

21  $mydomain = 'lx.com';

153 $myhostname = 'mail.lx.com';

54  @local_domains_maps = qw(.);   //对所有的域检查

修改投递/拦截的方法:

158 $final_virus_destiny      = D_REJECT;

160 $final_spam_destiny       = D_REJECT;  //邮件不会被投递给收件人,但会通知发件人邮件被拒绝

99  $sa_tag2_level_deflt = 19.2;          超过这个分数,允许在邮件标题加入[SPAM] 标记

100 $sa_kill_level_deflt = 19.9;          超过这个分数,直接將信件备份后删除

配置Amavisd与Clamav结合

“); 在配置项上面添加

@av_scanners_backup = (”

716 ['ClamAV-clamd',

717   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],

718   qr/\bOK$/, qr/\bFOUND$/,

719   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

720 );

724 @av_scanners_backup = (

725

726   ### http://www.clamav.net/   - backs up clamd or Mail::ClamAV

727 #  ['ClamAV-clamscan', 'clamscan',

728 #    "--stdout --no-summary -r --tempdir=$TEMPBASE {}",

729 #    [0], qr/:.*\sFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

730 ['ClamAV-clamscan', 'clamscan',

731     "--stdout --no-summary -r --tempdir=$TEMPBASE {}",

732     [0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

配置Amavisd与spam结合

14  @bypass_spam_checks_maps  = (\%bypass_spam_checks,\@bypass_spam_checks_acl,\$bypass_spam_checks_re);

配置Postfix 集成amavisd-new

修改/etc/postfix/master.cf添加如下:

smtp-amavis   unix  -       -        n      -        2      smtp

-o  lmtp_data_done_timeout=1200

-o  lmtp_send_xforward_command=yes

-o  disable_dns_lookups=yes

127.0.0.1:10025 inet n  -        n      -        -      smtpd

-o content_filter=

-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 mynetworks=127.0.0.0/8

修改 vim /etc/postfix/main.cf文件

content_filter=smtp-amavis:[127.0.0.1]:10024

重启postfix:

service postfix restart

重新启动amavisd:

service amavisd restart

使用thunderbird发送正常邮件测试,

发送垃圾邮件测试,代码:XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

病毒代码:X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

被拒绝的邮件保存在/var/spool/vscan/tmp目录下

日志文件/var/log/maillog

11. 安装FCGI

rpm -ivh httpd-devel-2.2.3-31.el5.i386.rpm

ln -s /usr/lib/httpd/build /etc/httpd

tar xfz mod_fastcgi-2.4.6.tar.gz

# cd mod_fastcgi-2.4.6

# cp Makefile.AP2 Makefile

# make top_dir=/etc/httpd install

除了Apache需要FCGI的支持外,extmail也需要相应的perl-FCGI模块

yum install perl-FCGI-0.67-1.2.el5.rf.i386.rpm

vim /etc/httpd/conf/vhost_extmail.conf

LoadModule fastcgi_module modules/mod_fastcgi.so

FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240

ServerName mail.lx.com

DocumentRoot /var/www/extsuite/extmail/html/

#ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/

Alias /extmail /var/www/extsuite/extmail/html/

SetHandler fastcgi-script

ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/

Alias /extman /var/www/extsuite/extman/html/

重启Apache和fastcgi server开机自启动:

shell

# service httpd restart

# /var/www/extsuite/extmail/dispatch-init start

# echo “/var/www/extsuite/extmail/dispatch-init start” >> /etc/rc.d/rc.local

或者

------------------------------------------------------------------------------------

httpd.conf里增加:

LoadModule fastcgi_module modules/mod_fastcgi.so

FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240

Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/

Alias /extmail /var/www/extsuite/extmail/html

Alias /extman/cgi/ /usr/bin/dispatch.fcgi/

Alias /extman /var/www/extsuite/extman/html

SetHandler fastcgi-script

SetHandler fastcgi-script

-----------------------------------------------------------------------------------

要注意,上面的/usr/bin/dispatch.fcgi并不存在,但是必须按上面的写。有些用户自作聪明指向真实的dispatch.fcgi程序,反而用不了,这里大家一定要注意,按上面的配置写好。

另外,extmail和extman最好在同一个目录下,可以最少避免问题。

然后启动dispatch.fcgi:

/var/www/extsuite/extmail/dispatch-init start

并重新启动apache。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值