2011年05月07日

下午用公司邮件服务器发信时失败,提示:451 4.3.0 Temporary lookup failure

又发了一次,发出去了,也就没当回事。

晚上发邮件时,又出这错误,看来是邮件服务器有问题了。

远程连上看maillog,发现:

mysql:/etc/postfix/mysql_virtual_domains.cf(0,lock|fold_fix): table lookup problem

warning: connect to mysql server 127.0.0.1: Too many connections

看来是mysql的毛病了。

到mysql中查了一下服务器的最大连接数:

show global status like ‘Max_used_connections’;

才101,不算大

再查设置的最大连接数:

show variables like ‘max_connections’;

太阳!居然是传说中的默认设置100,还真是伤不起!

修改my.cnf,加上

set-variable = max_connections=500

重启mysql后,监控了一段时间,好像没出现发信失败的提示了。

暂时应该没问题了,回头让公司网管去检查一下还有没有其他设置有问题。

2010年04月17日

前几天配置了在Postfix中,限制对某些信箱发信。

今天想起来似乎还有些事没做,好像没考虑发信人伪造自己的邮件地址。

测试了一下,还真是,用其他用户发信时,只要在Foxmail里面把邮件地址修改一下就能骗过去,光靠From:来验证是不行的。

于是修改配置,防止伪造发件人。

1.修改main.cf

加上:

smtpd_sender_login_maps = mysql:/etc/postfix/mysql_sender_login_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_maps.cf

验证发信人的信箱或别名是否真实有效,我使用mysql验证,不嫌累的可以使用hash验证。

smtpd_reject_unlisted_sender = yes

在smtpd_sender_restrictions =中,默认就有reject_authenticated_sender_login_mismatch,所以不用修改了。

在smtpd_recipient_restrictions = 中加上:reject_sender_login_mismatch,reject_authenticated_sender_login_mismatch。

将邮箱地址不匹配的踢回去,防止冒充同一域中其他信箱发信。

2.编辑mysql_sender_login_maps.cf文件,内容如下:

user        = vmail
password    = bugaosuni
hosts       = 127.0.0.1
port        = 3306
dbname      = vmail
table       = mailbox
select_field= username
where_field = username

3.编辑mysql_virtual_alias_maps.cf

这个文件现成已经有一个了,直接用。

user        = vmail
password    = bugaosuni
hosts       = 127.0.0.1
port        = 3306
dbname      = vmail
table       = alias
select_field= goto
where_field = address
additional_conditions = AND active=’1′

4.重启Postfix之后,测试了一下,已经生效

如果登录,验证身份通过之后,想冒用其他信箱发信,会提示:550.5.1.0 Sender address rejected:User unknown in local recipient table。实现对<From:>的验证。

5.捣了一点浆糊

测试从外网其他信箱给别名地址发信,总是被服务器退回。以为是哪里设置错了,乱改一气。

后来没辙了,耐着性子看了看日志,才发现原来是之前clamav过期,一时没空升级,顺手把content_filter = smtp-amavis:[127.0.0.1]:10024给注释掉了造成的。

自此基本和谐,先忙别的去了,有什么其他漏掉的想起来了再说。

2010年04月11日

前两年吃饱没事给公司装了个postfix当邮件服务器,设置了个all@company.com别名,可以给全体人员群发邮件。

现在老板要限制其他人对这个邮件地址发信,只允许几个特定账号如boss@company.com能给all@company.com发信。公司现成有网管不去找,把这事又派到我头上。记得这个教训吧,没事别揽事,帮忙总会帮出麻烦。

以前用Exchange的时候很容易设置的,改Postfix之后还没试过。

刚开始以为简单的设置一下header_checks就能搞定。

if /^to: *all@company\.com/
!/^From:.*boss\@company\.com/ reject user error
endif

测试了一下,一点作用都没有!
折腾了好一会才弄明白,header_checks压根就不支持多条复合规则。Google了一下,有鬼佬建议使用FILTER transport:destination转发到另一台邮件服务器处理,以后倒可试一试,不过这次懒得弄了。

把postfix的文档重新认真看了看,又Google了一下,搞明白该如何配置了。

1. 修改/etc/postfix/main.cf
添加:
smtpd_restriction_classes = send2all
send2all = check_sender_access hash:/etc/postfix/s2a_sender,reject

修改smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,…………..加上check_recipient_access hash:/etc/postfix/send2allclass
即:
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/send2allclass,permit_mynetworks, permit_sasl_authenticated,。。。。。。。。。。(记得写在permit_mynetworks前面)

2. 创建send2allclass文件,设置收件人策略
#touch /etc/postfix/send2allclass
#vi /etc/postfix/send2allclass
文件内容如下:
all@company.com send2all
然后
#postmap send2allclass 生成hash

3.创建s2a_sender文件,设置发件人规则
#vi /etc/postfix/s2a_sender
文件内容如下:
boss@company.com ok
如有其它账号,一行行添加即可
然后
#postmap s2a_sender

4.重启postfix
#postfix reload

#service postfix restart

测试了一下,使用boss@company.com之外的账号对all@company.com发信会被拒绝,提示:554 5.7.1 Recipient address rejected: Access denied

然后又发现一个小问题,通过horde webmail还是可以继续用其他信箱发信给all@company.com,还得接着配置

5.配置horde webmail
以管理员账号登录到horde webmail中,修改Mailer配置,将默认的“Use the local sendmail binary”改成”Use a SMTP server”,然后在host和localhost参数中填上”localhost”,在auth参数中选择“Best available authentication”
然后点击“生成Horde配置文件”即可。

看了看horde/config/conf.php文件。
原来的:
$conf['mailer']['params']['sendmail_path'] = ‘/usr/lib/sendmail’;
$conf['mailer']['params']['sendmail_args'] = ‘-oi’;
$conf['mailer']['type'] = ’sendmail’;
已经被改为:
$conf['mailer']['params']['host'] = ‘localhost’;
$conf['mailer']['params']['localhost'] = ‘localhost’;
$conf['mailer']['params']['auth'] = true;
$conf['mailer']['type'] = ’smtp’;

测试了一下,现在使用webmail也可以限制对all@company.com发信了。

参考链接:
http://blog.csdn.net/chinalinuxzend/archive/2007/11/08/1872573.aspx

http://www.extmail.org/forum/viewthread.php?tid=4102

http://www.extmail.org/forum/viewthread.php?action=printable&tid=6447

http://www.postfix.org/header_checks.5.html

Update 2010-4-17:加上防止伪造发件人的配置,详见:Postfix防止伪造发件人

2008年11月23日

帮别人配个简单的邮件系统,仅仅要求凑合着收发信,web界面什么的都不用。

就postfix+saslauth+dovecot吧。

帮出忙来了

居然发不了信,日志里一堆:

loops back to myself

网上随便找了找,都是一堆解释原理的,懒得看了。

耐着性子仔细看看main.cf,找出来了

把relayhost = $mydomain给注释掉就没事了

搞完,收工!

2008年11月22日

今天有个客户反映说他们的邮件没法发到公司的信箱,总是被退回来

白天没空理,叫公司网管看了看,也没结果

晚上睡不着觉,干脆自己看看怎么回事。

maillog如下
Nov 21 15:59:45 mail postfix/smtpd[8541]: NOQUEUE: reject: RCPT from unknown[xx.xx.xx.x]: 504 5.5.2 <127.0.0.1>: Helo command rejected: need fully-qualified hostname; from=<aa@bb.com> to=<bb@cc.com> proto=SMTP helo=<127.0.0.1>

应该是对方的FQDN没设置好,被当做垃圾邮件给弹出去了。

客户比较重要,他的邮件不收是不行的,只好将就一下了,反正国内的邮件服务器很多是没有正确设置FQDN的,去掉这项也无所谓了。

修改main.cf
在smtpd_recipient_restrictions = 中
去掉了reject_non_fqdn_hostname

应该不会有问题了。

垃圾邮件多点就多点吧,最近老是收不到垃圾邮件,怪想念的。

2006年01月22日

今天早上,办公区检修电路,把电给停了。服务器撑到UPS电量耗完,就自顾自休息了。

下午来到办公室检查,发现Exchange又歇菜了。打开服务看看,一堆服务正在努力启动中。

检查过DNS后重启一下DNS和netlogon服务,结果这俩一重启就嗝屁了。真TMD无聊。系统日志都懒得看了,还不是那些问题。

只好重启Windows,然后把DNS里面的AD域名重新加载一次,再次重启windows,所有服务都正常了。

唉,经常掉电当机后就出这问题。没点创意!这园区的老板也真是的,不能保证供电就不要把地方租给别人当机房嘛!

2004年08月04日

发大水了,日志暴涨!

差点把服务器硬盘全部淹没

没奈何,只好手动删除了以前一些日志文件。

查系统日志,也没发现什么问题,奇怪。。。

正在检查的时候,老板叫开会。明天再弄吧。

2004年06月28日

前几天就有人说公司信箱有垃圾信,当时事多,没管

今天回来打开信箱,居然那些垃圾信跑进我的信箱来了

 

于是加上了DNS反查,不过这样也不能完全过滤掉,而且,好多客户的服务器连接情况都不是很稳定,担心把客户的正常邮件也拒收了。

试两天再看看,对防范垃圾邮件还没什么研究,看来最近得抽空研究一下了。

2004年06月18日

北京的同事说用公司的smtp发信给sina.com、yahoo.com.cn之类信箱都会失败,返回错误是550 5.7.1

检查了日志,并没有相关记录

应该是身份验证没通过

找了只56K小猫,拔掉网线拨号上网,然后测试了一下smtp,加上身份验证就可以了。

于是告诉对方要加上身份验证,但是他说他本来就加上了的。

有点晕,要他换其他验证方式,然后查看队列,他的邮件这次进队列了,但老在队列中转悠不肯出去。

但是我拨号发信能成功,说明虚拟smtp服务器设置应该没错吧

项目的事还忙着呢,昨天刚才广州市区跑了一天,今天又要出去,先建议他用OWA顶着先,回头再说。

2004年06月09日

前一阵对sina信箱发信总是失败,发出的信老在队列里面转悠,就是不肯出去。公司那帮牛人们开始投诉了,说邮件服务器有问题。

不过那段时间太忙,没空理会,只是安抚一下,劝他们暂时不要使用公司信箱对sina发信。

昨天终于空闲下来

检查了Exchange日志:

给sina信箱发信的日志:
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionResponse SMTPSVC1 mailsvr – 25 – - 220+sina.com+ESMTP 0 0 18 0 266 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionCommand SMTPSVC1 mailsvr – 25 EHLO -mycompany.com 0 0 4 0 266 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionResponse SMTPSVC1 mailsvr – 25 – - 250-sina.com 0 0 12 0 500 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionCommand SMTPSVC1 mailsvr – 25 MAIL – FROM:<
admin@mycompany.com> 0 0 4 0 500 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionResponse SMTPSVC1 mailsvr – 25 – - 250+ok 0 0 6 0 734 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionCommand SMTPSVC1 mailsvr – 25 RCPT – TO:<
myaccount@sina.com> 0 0 4 0 734 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionResponse SMTPSVC1 mailsvr – 25 – - 250+ok 0 0 6 0 1078 SMTP – - – -
2004-06-07 11:33:03 202.106.182.168 OutboundConnectionCommand SMTPSVC1 mailsvr – 25 DATA – - 0 0 4 0 1078 SMTP – - – -
2004-06-07 11:33:04 202.106.182.168 OutboundConnectionResponse SMTPSVC1 mailsvr – 25 – - 354+请继续+-+go+ahead 0 0 21 0 1312 SMTP – - – -

到go ahead就没下文了,go a head???  去个头???!!!   哼哼

测试Telnet连接                                                                 

c:\>telnet 202.106.182.168 25
220 sina.com ESMTP
ehlo mail.mycompany.com
250-sina.com
250-PIPELINING
250 8BITMIME
mail from <
administrator@mycompany.com>
250 ok
rcpt <
myaccount@sina.com>
250 ok
data
354 请继续 – go ahead
from:administrator@mycompany.com
subject:test mail
This is a test mail
.
553 Spam Mail
http://mail.sina.com.cn/FAQ.html

Connection to host lost.

看过了sina的faq.html 但是发现我的exchange配置是满足他们要求的。难道被关黑名单了?服务器才建立没多久,IP地址也是刚申请的,没这么快被关黑名单吧?检查了smtp日志也没见谁发送垃圾信啊。难道新浪弄得白名单?这样反垃圾邮件也太太。。。太狠了吧?寒ing….

在新浪网页上投诉,没人理会。看来老大们比较牛

中国反垃圾邮件联盟论坛 翻了一会,发现被sina拒收的还不少呢,嘿嘿。

有人提示说直接给lanjiang@staff.sina.com.cn 或者antispam@staff.sina.com.cn 发信说明情况,也许能解决问题,打电话压根就没用。

试着给antispam@staff.sina.com.cn 发信,居然很快就回复了,要我把信箱域名和IP地址发过去。过一会回复说搞定。

试着发了一下,还真的可以了!赫赫,新浪的牛人们真不错!颂扬一下先。 :)