公司上线的邮件服务器也有段时间了,在这里记录下体验,不为别的,只为曾经有过
--------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;
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这行注释去掉。
4、greylist列表:灰名单,容易误判,所以关闭
修改greylist_plugin = no
以上只是个人思想,请不要果断如此做。
log_date=`date -d "-1 day" +"%Y-%m-%d"`
rm_log=`date -d "-90 day" +"%Y-%m-%d"`
do
if [ -f "$log" ];then
cp ${log} ${log}.${log_date}
cat /dev/null >${log}
fi
rm -f "${log}.${rm_log}"
fi
done
放到crontab里,夜里定期执行即可
转载于:https://blog.51cto.com/xtony/864898