您的位置:首页 > 其它

邮件服务器使用的点点滴滴及问题汇总

2012-05-16 15:16 267 查看
公司上线的邮件服务器也有段时间了,在这里记录下体验,不为别的,只为曾经有过

--------by Tony

下面介绍邮件上线前后的点点滴滴及问题汇总:

一、首先说说extman后台的界面,字段太少了,假如公司规模在500+以上,又有各地办事处的时候,会给后续的管理工作带来很大的不便,所以有必要在后台显示新增字段(如:中文名、部门、公司)《注:在网上看到邓卫的一篇帖子,很不错,推荐!》后面会上传附件!

二、再一个就是别名,企业经常会群发邮件,这时候就利用别名实现了一个邮件组的功能,可每次在新增用户的时候不能同时指定别名,这点也遗憾,所以看到论坛上的牛人写的教程很不错,记录下来,后面把附件奉上。

三.别名的功能是很不错,但用不好,会被领导批的,所以对有的特殊的邮件组要加以权限的控制,比如all@abc.com,指定只有公司特别的人才可能发送,不然要是有人发个垃圾邮件给所有人,后果不堪设想。

实现方法如下:

使用postfix的发信和收信人策略实现邮件列表的使用控制,分享之。

1、创建local_recipient和local_domains两个文件

[root@a postfix]# pwd

/etc/postfix

[root@a postfix]# cat local_recipient

allstaff@a.com local_only

[root@a postfix]# cat local_domains

a.com OK

127.0.0.1 OK

youip OK

2、产生db文件,如果修改过/etc/postfix/local_recipient和/etc/postfix/local_domains文件内容,需要重新执行下面的命令才可生效。

postmap hash:/etc/postfix/local_recipient

postmap hash:/etc/postfix/local_domains

3、在main.cf里加入两行

smtpd_restriction_classes = local_only

local_only = check_sender_access hash:/etc/postfix/local_domains, reject

4、在main.cf里给smtpd_sender_restrictions加个规则check_recipient_access hash:/etc/postfix/local_recipient,结果如下:

smtpd_sender_restrictions =

permit_mynetworks,

reject_sender_login_mismatch,

reject_authenticated_sender_login_mismatch,

reject_unauthenticated_sender_login_mismatch,

reject_unknown_sender_domain,

check_recipient_access hash:/etc/postfix/local_recipient

5、重启postfix。

此时非a.com用户无法给allstaff发信。

弹回信息如下:

你发送到allstaff@a.com的邮件由于以下原因被退回 :

allstaff@a.com SMTP error, RCPT TO: 554 5.7.1 <allstaff@a.com>: Recipient address rejected: Access denied

四:还有个问题就是有的时候发送给邮件组又同时发送给个人,这个人又包含在这个邮件组里,会收到两封一样的邮件,很不好,网上搜刮只要修改main.cf,添加一条参数即可!

实现方法:#vim /etc/postfix/main.cf

enable_original_recipient = no

最后别忘记postfix restart

五:我们企业里面有人发送一些非法或者垃圾邮件,我们怎么进行监控呢,其实很简单,只需在main.cf里加一个参数,实现每一封发到服务器的邮件都密送一份给指定邮箱,我们就可以实现邮件的监控了。

实现方法:#vim /etc/postfix/main.cf

always_bcc = backup@abc.com

最后别忘记postfix restart 这样每一封邮件都会密送一封给backup@abc.com了,用户是察觉不到,但会在服务器mailog里产生日志

六、附上常用的邮箱管理命令:

#postsuper -d ID 删除特定邮件队列

#postsuper -d ALL 删除所有邮件队列

#mailq 查看所有邮件队列

#postfix flush 立即投递队列中所有邮件(慎用)

#postfix check 修复队列以及任何权限错误

#tail -f /var/log/maillog 查看邮件系统日志

七、企业人员太多,邮箱帐号记不住?让全局邮件列表来帮你,在webmail写邮件时不需要记住对方的邮箱帐号,直接选中即可。

实现方法: #cd $/extmail/tools

#vim makeglobabook.pl

#!/usr/bin/perl -w

#

# makeglobabook.pl

# make extmail globa book for mysql server.

# ver 0.2

use strict;

use DBI;

use IO::File;

use lib "../libs";

use Ext;

use POSIX qw(strftime);

use vars qw(@ISA $usercfg $sysconfig);

my $gbook="../globabook.cf";

my $time = strftime ("%Y\-%m\-%d\_%H\:%M\:%S", localtime);

my $app = Ext->new( config => '../webmail.cf' );

system("mv $gbook $gbook.$time") if -f $gbook;

my $dbuser = $Ext::Cfg{SYS_MYSQL_USER};

my $dbpassword = $Ext::Cfg{SYS_MYSQL_PASS};

my $dbname = $Ext::Cfg{SYS_MYSQL_DB};

my $dbh = DBI->connect("dbi:mysql:database=$dbname",$dbuser,$dbpassword)

or die "Can not connect DB server!\n";

my $query=qq~SELECT `username`,`name` FROM mailbox ~;

my $sth=$dbh->prepare($query);

$sth->execute();

my $fh=IO::File->new(">$gbook");

print $fh "Name,Mail,Company,Phone\n";

while (my @row=$sth->fetchrow_array()){

print $fh "\"$row[1]\",\"$row[0]\"\n";

}

#chmod 755 makeglobabook.pl

#./makeglobabook.pl 就会更新上一级目录的globabook.cf文件了。可放入crontab中定期执行

八、搭建完以后的性能优化,应对500+用户的环境(extmail论坛牛人发的)

1、修改/usr/lib/courier-imap/etc/pop3d

MAXDAEMONS=512

MAXPERIP=9000

2、修改/etc/authlib/authdaemonrc

daemons=256

3、修改/etc/amavisd.conf

$max_servers = 50;

4、修改/usr/sbin/apachectl

HTTPD='/usr/sbin/httpd.worker'

5、修改/etc/httpd/conf/httpd.conf

<IfModule worker.c>

StartServers 10

MaxClients 1500

ServerLimit 100

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

</IfModule>

6、修改/etc/clamd.conf

MaxThreads 50

7、修改/etc/my.cnf

max_connections=2048

8、去除rar打包exe会被ban的问题

编辑/etc/amavisd.conf,把$banned_filename_re = new_RE 这段内容相应的修改下

如果你知道该重启哪些服务,就重启这些服务,不清楚的话重启下系统就好。

9、加强发信人限制策略

编辑/etc/postfix/master.cf,把-o smtpd_client_restrictions=permit_sasl_authenticated,reject这行注释去掉。

九、以下是建议:
1、刚上线的邮件服务器特别是迁移的服务器,上线后先把fail2ban服务关闭,这是一个防暴力破解的软件,要是不停的话,局域网内有员工密码输错了,次数超过阀值就会把局域网的公网ip列入临时黑名单(fail2ban实际就是调用iptables来工作的),所以建议临时关闭,等服务器稳定后再开启。
#/etc/init.d/fail2ban stop
2、dnsbl列表:这是个实时黑名单列表,但里面的绝大数列表都不适合在国内使用,所以建议关闭。
#vim /usr/local/slockd/config/plugin.cf
修改dnsbl_plugin = no
3、spf检查:也是防垃圾邮件的,检查对方是否具有spf记录,没有则拒绝,因有的邮件服务器确实没有做这个记录,只做了ip反解,所以在这里我把这个检查关了,当然,如果对垃圾邮件要求较高,可以不关

#vim /usr/local/slockd/config/plugin.cf
修改spf_plugin = no

4、greylist列表:灰名单,容易误判,所以关闭

#vim /usr/local/slockd/config/plugin.cf

修改greylist_plugin = no

以上只是个人思想,请不要果断如此做。

十、维护工作:
1、维护工作离不开观察日志,因为只有看日志才有可能知道是什么问题,这就带来个问题,时间越来查日志就越慢,日志文件也会越来越大,所以可以考虑做日志轮询,每天生成一个日志文件,这样便于查询。(感谢同事小军:自动化的高手)
实现方法:vim logrotate.sh
#!/bin/bash
log_files=('/var/log/maillog')

log_date=`date -d "-1 day" +"%Y-%m-%d"`

rm_log=`date -d "-90 day" +"%Y-%m-%d"`
for log in "${log_files[@]}"

do

if [ -f "$log" ];then

cp ${log} ${log}.${log_date}

cat /dev/null >${log}

fi
if [ -f "${log}.${rm_log}" ];then

rm -f "${log}.${rm_log}"

fi

done

放到crontab里,夜里定期执行即可
2、日志还有就是过滤日志,把很关键的字段过滤出来方便查询问题
cat /var/log/maillog |grep reject
暂时想到这么多,后续继续补充~
整理完不容易,唉,只为自己回头能看见~
---date 2012.05.16

本文出自 “____哊.時^随记” 博客,请务必保留此出处http://xtony.blog.51cto.com/3964396/864898
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: