qyb的博客
如何用 nginx 做 postfix 的 SMTP 反向代理,以及 XCLIENT 的支持
作为 lighttpd 的竞争者,轻量级web服务器 nginx 最近才开始崭露头角,知道它还可以用来做 pop3/imap4 反向代理的估计就比较少了,至于用 nginx 做 smtp 的反向代理,估计全中国现在和我一样想到这个需求的人一只手就能数过来。
需要 smtp 反向代理是因为我们的 vip 邮箱是可以免费试用的,希望在策略上对已交费用户和免费试用用户(其中有相当部分是 spammer)做出不同处理。前面用 nginx 把不同的用户请求代理到后台不同的 postfix 上,然后 postfix 再各自配置不同的 Milter Server 做过滤。另外需要前台能支持 XCLIENT,这样 postfix/milter 可以得到客户端的 IP,对于 anti-spam 来说是很有意义的。
nginx 在大约一年前增加了对 XCLIENT 的支持,对于 webmail 服务来说,nginx 可以说是再完美不过的反向代理前台了。
nginx 配置 smtp 反向代理需要在配置文件里加这么一段:
mail {
auth_http http://127.0.0.1/auth;
server {
listen 26;
protocol smtp;
proxy on;
smtp_auth login plain;
}
}
用 python 写一个简单的 auth 服务来做测试:
-
import SimpleHTTPServer
-
-
class handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-
def do_GET(self):
-
if (self.path == '/auth'):
-
# verify 'Auth-User', 'Auth-Pass', 'Client-IP'
-
if self.headers.get('Auth-Protocol') == 'smtp':
-
self.send_response(200)
-
self.send_header("Auth-Status", "OK");
-
self.send_header("Auth-Server", "127.0.0.1");
-
self.send_header("Auth-Port", "25");
-
self.end_headers()
-
return
-
-
addr = ('', 80)
-
httpd = SimpleHTTPServer.BaseHTTPServer.HTTPServer(addr, handler)
-
httpd.serve_forever()
修改 postfix 的 main.cf 配置,允许 nginx 代理服务器发送 XCLIENT 命令。
smtpd_authorized_xclient_hosts = 127.0.0.0/8
理论来说,到这里就应该就都配置好了。但是 nginx 会带上一个 LOGIN=foobar 的属性发给后台,而 postfix 是不支持该属性的,这将导致 postfix 报告一个 Bad XCLIENT attribute name: LOGIN 的 501 错误。很疑惑当初贡献这段代码的人是用什么 smtp server 做后台的,总之和 postfix 配合的话,必须修改 nginx 的程序(比修改 postfix 要简单些): 找到 src/mail/ngx_mail_proxy_module.c 里 "case ngx_smtp_helo:" 的那一部分,把和 "LOGIN" 相关的代码去掉就好了
附:最后决定利用周末时间写一个 patch,希望会被 nginx 接纳.
nginx-0.5.35-xclient.patch
最近二三事
长期以来,达达拉完臭臭后都是让她爹妈擦屁股,偶们也就一直忍气吞声了。直到前两天,她又在厕所里大叫:“拉完了!!!”,老婆和我都忙着,被骚扰得不胜其烦,于是问她:在幼儿园不是都自己擦吗?怎么回家后还要爸爸妈妈来??达达等了好长时间只得我们这样的质问,坐在马桶上痛心疾首的回答:自己擦好恶心啊~~~~
达达吃饭,如果吃饭途中打嗝,她会说:打了一个还要吃的嗝,如果吃完饭后打嗝,她就说:打了一个吃饱了的嗝
星期天,带达达去故宫溜达了一圈,从天安门口出来,看见一些身穿奇怪服装的警察,胸口和上臂衣服上的 LOGO 是 SWAT,咳咳,相当的装
星期天晚上第一次炒猪肝,仍然是相当的成功,自我感觉已经完全超过了我妈的水平。今天和老婆讨论下次再做什么挑战自我的项目,已经把八珍豆腐列入人生目标之一,哈哈
json-py、simplejson、cjson
最开始我们的 web 项目的时候,因为 json-py 最易使用——只有一个独立的文件,无需安装,放在开发目录下直接 import 即可,而且当时我醉心于 pure python 的概念,所以就这么一直用下来。
直到上周对代码做压力测试,某个流程中 json encoder 的时间居然耗掉了整整 1/3,而这个流程是最常用的功能之一,于是就寻找 json-py 的替代物。
首先想到的是 simplejson。由于 django 的内置,它可能是 python 界用得最广泛的 json 库了,而且其最新版本还包括了一个 c 的扩展以提高性能。一开始我也是对它寄予厚望,但 profiling 结果很让人郁闷:它的 decode 速度的确是比 json-py 快了不少(大概速度是3倍),但 encode 速度提升及其有限。
最后只好选择了 cjson,效率非常让人满意。
但接口友好程度就比上面两个差远了:一方面是 encode 对非 unicode 的数据类型支持不太好(比如 UTF-8 字符串里高8位字符都escape),我们只好把数据统统 str.decode('utf-8') 一下后再交给它;另一方面是它对中文 unicode 字符串的 decode 实现好像也是有问题,不过还好能想恶心办法绕过去。
结论:cjson效率最好,但兼容性一般;通常来说 simplejson 可能就足够了;如果不是 js 端会传来海量数据要 decode,json-py 也可以将就用,而且就一个文件,简单易import
附:写到本文的时候,发现一个叫 demjson 的项目四个月前刚发布新版本,而且号称自己是最快的纯python解决方案,也是一个文件就可用,看来值得一试。
而且为什么有了 _speedups.c 的 simplejson 速度和 json-py 比起来差别不大,也挺让人疑惑,啥时候有时间再重新测试看看。
links for 2008-03-15
-
Phun,可以用鼠标画任意形状的物体,或者链条、弹簧之类进去,也可以拖拉,这些物体就会根据力学原理运动起来。很好玩,可用它来做很多有趣的场景。当然也可用它做物理教育工具。
-
現在,我們的責任是,如何在我們孩子心中也點燃這株火苗。
56.com 退出免费邮箱服务市场
今天在 techweb 里看到一则消息
尊敬的用户: 我们非常抱歉的通知您,由于前段时间硬件故障,导致部分用户数据丢失,经 过工程师们的不懈努力,目前已经恢复了大部分的数据,但仍有小部分数据无 法恢复。所有恢复的邮件我们都会放入您的收件箱里,请及时将重要的邮件下 载保存或者转发到其他第三方邮箱;将我们的邮箱设置为安全邮箱的用户也请 及时更改您的安全邮箱,建议使用网易的163邮箱或者126邮箱。我们的邮箱将 在2008年6月1日起正式停用,请务必在这之前做好邮件备份和邮箱转移的工作; 对于期间给您带来的不便,我们表示深深的歉意! 56.COM客户服务部
1. 兔死狐悲.. 免费邮箱这个职业不好做啊
2. 不好看 56 的视频业务。既然它不能体面的结束免费邮箱业务,说明它的团队还是有缺陷的。
3. 赶紧查了查 56 这个公司是在哪里——不出所料,果然是在广州——可惜无法乘机去挖人了,可能会便宜 QQ,呵呵
links for 2008-03-11
-
(這點是火力集中處)將第十點中非工作狂的,通通都解雇fire掉
今天成功做出一份锅塌里脊!
上周去 zzh 家做客,他媳妇做了一盘锅塌里脊,引得一桌天津人以及我这样的假天津人食指大动。说起来好像大家到北京后都自个下厨尝试做锅塌里脊来着,但无一例外结果会变成鸡蛋炒肉。现有厨师在眼前,连忙请教了秘诀回去尝试。
向公众报告服务器、网络状态?
几个月前看到一家 Email Hosting 服务商 FastMail.FM 专门设了一个 http://status.fastmail.fm/ 来报告网站的维护和故障情况。当时觉得挺有意思的,还订了它的 RSS 输出。
今天看到 SaaS 的代表 salesforce 也有这么一个网站:http://trust.salesforce.com/. 难道向公众(包括客户和潜在客户)报告服务器运行状态会是一项很重要的公关和宣传手段?就好比现在的企业 blog 一样。
附:知道 FastMail.FM 是因为他们付钱给 nginx 开发出了 pop3/imap4 的反向代理,还有 FastMail.FM 的网站好像需要翻墙才能去看.
这也会过去
有两件事情让我相当的郁闷——或者用网络流行用语——相当的纠结
睡一觉醒来后就好多了现在回头再想,对于我的主要目标来说,这两件事情都是小事。可以放在一边
但使得思考的是引发这两件事情的起因,希望以后少犯类似的错误,用科学的手段去做决策。
最后要说的是,我们一家三口已经成功在北京生存了三周了,现在没有父母帮忙,也没有保姆小时工...对于我们这样一个互联网一个电信行业的家长来说,应该够少见了吧..




本站的feed
最新评论