<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>肖建彬的博客 &#187; MailTech</title>
	<atom:link href="http://www.xiaojb.com/archives/category/mailtech/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xiaojb.com</link>
	<description>奋斗无止境 爱拼才会赢</description>
	<lastBuildDate>Tue, 06 Oct 2009 08:07:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>unable to open Berkeley db /etc/sasldb2</title>
		<link>http://www.xiaojb.com/archives/mailtech/unable-to-open-berkeley-db.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/unable-to-open-berkeley-db.shtml#comments</comments>
		<pubDate>Sun, 21 Dec 2008 13:47:46 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>
		<category><![CDATA[Authlib]]></category>
		<category><![CDATA[Cyrus-sasl2]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/?p=713</guid>
		<description><![CDATA[同事在迁移邮件系统的时候，发现邮件系统在新机器上报告这样的日志：
warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
我们使用的authdaemond的认证方式，所以出现这种情况肯定是sasl判断到最后使用了默认的sasldb来验证。由于我好久没看邮件系统，而且这个问题我碰到了多次，在blog上也没有记录，于是重新解决了一遍。思路如下：
1、要判断使用的sasl的版本
我是自己编译的sasl，安装目录是/home/postfix/sasl，使用ldd查看一下postfix使用的是系统的sasl2，还是自己编译的。
[root@squid5 ~]# ldd /home/postfix/sbin/postfix
        libmysqlclient.so.15 => /lib/libmysqlclient.so.15 (0&#215;00a40000)
        libm.so.6 => /lib/tls/libm.so.6 (0&#215;00647000)
        libsasl2.so.2 => /home/postfix/sasl/lib/libsasl2.so.2 (0&#215;00558000)
     [...]]]></description>
			<content:encoded><![CDATA[<p>同事在迁移邮件系统的时候，发现邮件系统在新机器上报告这样的日志：<br />
warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory</p>
<p>我们使用的authdaemond的认证方式，所以出现这种情况肯定是sasl判断到最后使用了默认的sasldb来验证。由于我好久没看邮件系统，而且这个问题我碰到了多次，在blog上也没有记录，于是重新解决了一遍。思路如下：</p>
<p>1、要判断使用的sasl的版本<br />
我是自己编译的sasl，安装目录是/home/postfix/sasl，使用ldd查看一下postfix使用的是系统的sasl2，还是自己编译的。<br />
[root@squid5 ~]# ldd /home/postfix/sbin/postfix<br />
        libmysqlclient.so.15 => /lib/libmysqlclient.so.15 (0&#215;00a40000)<br />
        libm.so.6 => /lib/tls/libm.so.6 (0&#215;00647000)<br />
        libsasl2.so.2 => /home/postfix/sasl/lib/libsasl2.so.2 (0&#215;00558000)<br />
        libssl.so.4 => /lib/libssl.so.4 (0&#215;002c8000)<br />
        libcrypto.so.4 => /lib/libcrypto.so.4 (0&#215;001dc000)<br />
        libpcre.so.0 => /lib/libpcre.so.0 (0&#215;001b8000)<br />
        libdb-4.2.so => /lib/tls/i686/libdb-4.2.so (0&#215;00717000)<br />
        libnsl.so.1 => /lib/libnsl.so.1 (0&#215;006d3000)<br />
        libresolv.so.2 => /lib/libresolv.so.2 (0&#215;006be000)<br />
        libc.so.6 => /lib/tls/libc.so.6 (0&#215;002fc000)<br />
        libcrypt.so.1 => /lib/libcrypt.so.1 (0&#215;0068e000)<br />
        libdl.so.2 => /lib/libdl.so.2 (0&#215;00641000)<br />
        /lib/ld-linux.so.2 (0&#215;004f9000)<br />
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0&#215;007fc000)<br />
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0&#215;00835000)<br />
        libcom_err.so.2 => /lib/libcom_err.so.2 (0&#215;0066c000)<br />
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0&#215;00812000)<br />
        libz.so.1 => /usr/lib/libz.so.1 (0&#215;0067c000)<br />
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0&#215;006fd000)<br />
2、查看sasl的配置smtpd.conf<br />
系统的路径应该是/usr/lib/sasl2/smtpd.conf<br />
内容应该如下：<br />
pwcheck_method: authdaemond<br />
mech_list:PLAIN LOGIN<br />
使用了authdaemond应该还可以指定socket文件的位置，不过我忘了。<br />
如果自己编译的，这个文件的位置应该是 ~/lib/sasl2</p>
<p>3、authdaemond的socket文件的权限<br />
我使用的是<a href="http://sourceforge.net/projects/courier">Courier-Authlib</a>，socket文件默认的路径应该是~/var/socket,所有要认证的程序的执行用户，都要有访问这个socket的权限。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/unable-to-open-berkeley-db.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[postfix] 查看某信箱发信的详细情况</title>
		<link>http://www.xiaojb.com/archives/mailtech/postfix-user-deliver-detail.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/postfix-user-deliver-detail.shtml#comments</comments>
		<pubDate>Wed, 18 Jul 2007 03:13:22 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[信箱]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/postfix-user-deliver-detail.shtml</guid>
		<description><![CDATA[
grep &#8220;from=&#8221; /var/log/maillog &#124; cut -d &#8216;:&#8217; -f4&#124;while read LINE;do echo;grep $LINE /var/log/maillog;done

如果查询某个信箱发信的详细情况，可以使用这个简陋的脚本。
]]></description>
			<content:encoded><![CDATA[<p><coolcode linenum="off"><br />
grep &#8220;from=<user@domain.com>&#8221; /var/log/maillog | cut -d &#8216;:&#8217; -f4|while read LINE;do echo;grep $LINE /var/log/maillog;done<br />
</coolcode></p>
<p>如果查询某个信箱发信的详细情况，可以使用这个简陋的脚本。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/postfix-user-deliver-detail.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix权威指南(Postfix: The Definitive Guide)中文PDF版下载</title>
		<link>http://www.xiaojb.com/archives/mailtech/postfix-guide.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/postfix-guide.shtml#comments</comments>
		<pubDate>Tue, 05 Jun 2007 03:53:05 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>
		<category><![CDATA[Postfix]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/postfix-guide.shtml</guid>
		<description><![CDATA[Postfix权威指南中文PDF版下载
还没看呢，先share给大家

如何编译、安装Postfix？如何用Postfix架设一台简单的邮件服务器？如何架设网域邮件网关？如何架设备用服务器？DNS与邮件系统的关系为何？mbox与maildir这两种邮箱格式有何不同？如何用同一台机器架设多个网域的邮件服务器？如何让Postfix使用MySQL或LDAP数据库里的账户信息而不使用系统的/etc/passwd密码文件？Postfix如何透过LMTP投递邮件给Cyrus IMAP server？如何使用TLS来保密通信内容？Postfix如何搭配Majordomo或Mailman之类的邮件列表管理程序？如何使用SASL让出差的同事也能使用办公室的邮件服务器来寄信？如何让Postfix预先挡掉部分垃圾邮件？Postfix如何与外部的过滤程序接轨来合作打击垃圾邮件？如果你曾经苦思过上述的某个问题，这本书就是你要的。
【目录信息】
序.
前言
第一章简介
Posftix的起源与设计理念
E-mail与Internet
Postnx的角色
Postfix的安全性
如何取得Postfix
第二章基本概念
Unix的概念
E-mail的概念
第三章Postfix的结构
Postfix的组件
邮件如何进入Postfix系统
Postfix的队列管理器
投递操作
实际追踪Postfix的邮件处理流程
第四章基本的配置与管理
第一次启动Posttfix
配置文件
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xiaojb.com/upload/postfix.rar">Postfix权威指南中文PDF版下载</a></p>
<p>还没看呢，先share给大家<br />
<coolcode><br />
如何编译、安装Postfix？如何用Postfix架设一台简单的邮件服务器？如何架设网域邮件网关？如何架设备用服务器？DNS与邮件系统的关系为何？mbox与maildir这两种邮箱格式有何不同？如何用同一台机器架设多个网域的邮件服务器？如何让Postfix使用MySQL或LDAP数据库里的账户信息而不使用系统的/etc/passwd密码文件？Postfix如何透过LMTP投递邮件给Cyrus IMAP server？如何使用TLS来保密通信内容？Postfix如何搭配Majordomo或Mailman之类的邮件列表管理程序？如何使用SASL让出差的同事也能使用办公室的邮件服务器来寄信？如何让Postfix预先挡掉部分垃圾邮件？Postfix如何与外部的过滤程序接轨来合作打击垃圾邮件？如果你曾经苦思过上述的某个问题，这本书就是你要的。<br />
【目录信息】<br />
序.<br />
前言<br />
第一章简介<br />
Posftix的起源与设计理念<br />
E-mail与Internet<br />
Postnx的角色<br />
Postfix的安全性<br />
如何取得Postfix<br />
第二章基本概念<br />
Unix的概念<br />
E-mail的概念<br />
第三章Postfix的结构<br />
Postfix的组件<br />
邮件如何进入Postfix系统<br />
Postfix的队列管理器<br />
投递操作<br />
实际追踪Postfix的邮件处理流程<br />
第四章基本的配置与管理<br />
第一次启动Posttfix<br />
配置文件<br />
<< 查看详细目录<br />
【前言】<br />
已经安装了sendmail的人不必失望，因为Postfix也兼容于sendmail。在换成Postfix之后，原本针对sendmail而写的应用程序或脚本同样可继续使用。.<br />
本书宗旨在于弥补在线说明的不足。虽然在线文件提供了所有参数的说明与语法，但是却没示范如何完成特定的工作，也没解释隐藏在那些参数之后的运作理念。作者Kyle D. Dent在这本书解释了Postfix的组织结构与设计理念，并示范如何设定Postfix来担任特殊工作。Postfix的祖师爷，也就是大名鼎鼎的网络安全专家—— Wietse Venema，他全程参与了本书的审阅工作。.. 如何编译、安装Postfix？如何用Postfix架设一台简单的邮件服务器？如何架设网域...<br />
【序言】<br />
“所有程序员都是理想主义者。”大约三十年前，Frederick P．Brooks，Jr.写下了这么一句至理名言(注1)，而Postfix邮件系统刚好就是最佳例证。Postfix起源于我在纽约州IBM Research的网络安全部门的一个半年期的项目。虽然半年的时光确实足以让我换掉自己工作站上的邮件系统，但是还不足以建构出一套通用的完整邮件系统。在接下来的几年，一组合作无间的专家在测试这套软件时，又为它添加了许多程序代码。五年之后，当我决定将以通用公共许可证(GPL)来发表 Postfix时，它的规模——程序量与功能性，已经是初期版本的两倍了，而且研发进程比以往更为活跃。. Postfix的主要目标之一是使其具有“...<br />
</coolcode linenum="off"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/postfix-guide.shtml/feed</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>权威的RBL列表查询网址</title>
		<link>http://www.xiaojb.com/archives/mailtech/rbl-list.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/rbl-list.shtml#comments</comments>
		<pubDate>Fri, 20 Apr 2007 04:19:45 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/rbl-list.shtml</guid>
		<description><![CDATA[http://www.dnsstuff.com/tools/ip4r.ch?ip=1.1.1.1
大部分的rbl都可以一次查询到。
SPF的出现，使得RBL逐渐消失。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dnsstuff.com/tools/ip4r.ch?ip=1.1.1.1">http://www.dnsstuff.com/tools/ip4r.ch?ip=1.1.1.1</a></p>
<p>大部分的rbl都可以一次查询到。</p>
<p><a href="http://www.xiaojb.com/archives/mailtech/postfix-spf.shtml">SPF</a>的出现，使得RBL逐渐消失。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/rbl-list.shtml/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Postfix 2.4 stable release</title>
		<link>http://www.xiaojb.com/archives/mailtech/postfix-240-release.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/postfix-240-release.shtml#comments</comments>
		<pubDate>Thu, 29 Mar 2007 06:16:23 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/postfix-240-release.shtml</guid>
		<description><![CDATA[http://www.postfix.org
milter的增强，kqueue/epoll/poll的支持，增进了效率，TLS的增强。SMTP access control等，更多的看RELEASE_NOTES
同时还能认出pix防火墙来，参考新参数smtp_pix_workarounds。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.postfix.org/">http://www.postfix.org</a></p>
<p>milter的增强，kqueue/epoll/poll的支持，增进了效率，TLS的增强。SMTP access control等，更多的看<a href="ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.4.0.RELEASE_NOTES">RELEASE_NOTES</a></p>
<p>同时还能认出pix防火墙来，参考新参数smtp_pix_workarounds。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/postfix-240-release.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改邮件内容的工具alterMIME</title>
		<link>http://www.xiaojb.com/archives/mailtech/altermime.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/altermime.shtml#comments</comments>
		<pubDate>Fri, 02 Feb 2007 02:33:46 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/altermime.shtml</guid>
		<description><![CDATA[Homepage: http://www.pldaniels.com/altermime/
alterMIME能做什么？
    * Insert disclaimers
    * Insert arbitary X-headers
    * Modify existing headers
    * Remove attachments based on filename or content-type
    * Replace attachments based on filename
postfix的邮件列表有人问如何给邮件追加signature/footers，有人推荐了这个工具。
从这个网站上还可以看到一些其它的项目。
]]></description>
			<content:encoded><![CDATA[<p>Homepage: <a href="http://www.pldaniels.com/altermime/">http://www.pldaniels.com/altermime/</a></p>
<p>alterMIME能做什么？<br />
    * Insert disclaimers<br />
    * Insert arbitary X-headers<br />
    * Modify existing headers<br />
    * Remove attachments based on filename or content-type<br />
    * Replace attachments based on filename</p>
<p>postfix的邮件列表有人问如何给邮件追加signature/footers，有人推荐了这个工具。<br />
从这个网站上还可以看到一些其它的<a href="http://www.pldaniels.com/opensource-projects.php">项目</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/altermime.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[maildrop] Unable to open mailbox.</title>
		<link>http://www.xiaojb.com/archives/mailtech/maildrop-vpopmail-authlib.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/maildrop-vpopmail-authlib.shtml#comments</comments>
		<pubDate>Thu, 02 Nov 2006 03:14:01 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>
		<category><![CDATA[Maildrop]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/maildrop-vpopmail-authlib.shtml</guid>
		<description><![CDATA[因为忘记了曾经给courier-authlib的这个patch，导致今天又忙活了半天。当初发现这个问题后写信给courier的作者Sam Varshavchik,Sam没有理睬。

diff -urN courier-authlib-0.58.org/preauthvchkpw.c courier-authlib-0.58/preauthvchkpw.c
&#8212; courier-authlib-0.58.org/preauthvchkpw.c    2005-02-20 12:41:20.000000000 +0800
+++ courier-authlib-0.58/preauthvchkpw.c        2006-11-02 11:02:45.000000000 +0800
@@ -56,6 +56,7 @@
 static char User[256];
 static char Domain[256];
 static char options[80];
+static char maildir[256];
        /* Make sure the auth struct is empty */
   [...]]]></description>
			<content:encoded><![CDATA[<p>因为忘记了曾经给courier-authlib的这个patch，导致今天又忙活了半天。当初发现这个问题后写信给<a href="http://www.courier-mta.org/">courier</a>的作者Sam Varshavchik,Sam没有理睬。<br />
<coolcode lang="diff" download="authlib.patch"><br />
diff -urN courier-authlib-0.58.org/preauthvchkpw.c courier-authlib-0.58/preauthvchkpw.c<br />
&#8212; courier-authlib-0.58.org/preauthvchkpw.c    2005-02-20 12:41:20.000000000 +0800<br />
+++ courier-authlib-0.58/preauthvchkpw.c        2006-11-02 11:02:45.000000000 +0800<br />
@@ -56,6 +56,7 @@<br />
 static char User[256];<br />
 static char Domain[256];<br />
 static char options[80];<br />
+static char maildir[256];</p>
<p>        /* Make sure the auth struct is empty */<br />
         memset(&#038;auth, 0, sizeof(auth));<br />
@@ -140,6 +141,7 @@<br />
          */<br />
         vset_lastauth(User, Domain, service);<br />
 #endif<br />
+       snprintf(maildir,255,&#8221;%s/Maildir/&#8221;,vpw->pw_dir);</p>
<p>        /* save the user&#8217;s passwd fields into the appropriate<br />
         * courier structure<br />
@@ -148,6 +150,7 @@<br />
        auth.sysuserid          = &uid;<br />
        auth.sysgroupid         = gid;<br />
        auth.homedir            = vpw->pw_dir;<br />
+       auth.maildir            = maildir;<br />
        auth.address            = userid;<br />
        auth.fullname           = vpw->pw_gecos;<br />
        auth.passwd             = vpw->pw_passwd;<br />
</coolcode></p>
<p>说明：<br />
本patch适用于maildrop+<a href="http://www.inter7.com/vpopmail/">vpopmail</a>+authlib的情况。<br />
maildrop在投递是是根据authlib返回的maildir来投递的，默认情况下的authlib不返回maildir，maildrop将信投递到/var/mail目录，所以会出现“Unable to open mailbox.”的错误。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/maildrop-vpopmail-authlib.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPF在Postfix上的实现</title>
		<link>http://www.xiaojb.com/archives/mailtech/postfix-spf.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/postfix-spf.shtml#comments</comments>
		<pubDate>Sat, 16 Sep 2006 14:20:18 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/personal/postfix-spf-2.shtml</guid>
		<description><![CDATA[学习了一下SPF(Sender Policy FrameWork),SPF目前已经是互联网标准，是对抗垃圾邮件的一项手段
hotmail.com/gmail.com/sohu.com/tom.com/sina.com等都支持这个协议，Postfix从2.3起，支持Sendmail的Milter协议，这使得Postfix能轻松的支持SPF(Sender ID &#038;SPF)，我们今天先说SPF。
sid-milter是一个milter协议的SPF和Sender-ID实现，这个软件需要sendmail的libmilter支持，所以我们首先要下载sendmail并编译sendmail。

wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.13.8.tar.gz
tar zxf sendmail.8.13.8.tar.gz
cd sendmail-8.13.8/libmilter/
make

我们只需要编译libmilter就可以了，另外还需要知道编译后的libmilter.a的位置，通常在sendmail源码的目录下有一个obj.xxx的目录，我们需要记住这个目录下libmiter.a的位置

debian:/home/xjb/mail/sendmail-8.13.8/libmilter# pwd
/home/xjb/mail/sendmail-8.13.8/libmilter
debian:/home/xjb/mail/sendmail-8.13.8/libmilter# cd ../obj.Linux.2.6.17-1-686.i686/libmilter/
debian:/home/xjb/mail/sendmail-8.13.8/obj.Linux.2.6.17-1-686.i686/libmilter# ls libmilter.a
libmilter.a
debian:/home/xjb/mail/sendmail-8.13.8/obj.Linux.2.6.17-1-686.i686/libmilter#

然后我们sid-milter的网站去下载最新的代码，然后解压。

tar zxf sid-milter-0.2.14.tar.gz
cd sid-milter-0.2.14

这个时候我们可以看看INSTALL&#038;README再进行下一步。
Postfix的官方文档给出了sid-milter的一些patch，我们需要先打上patch

diff -urN sid-milter-0.2.14.org/sid-filter/sid-filter.c sid-milter-0.2.14/sid-filter/sid-filter.c
&#8212; sid-milter-0.2.14.org/sid-filter/sid-filter.c       2006-07-21 06:28:09.000000000 +0800
+++ sid-milter-0.2.14/sid-filter/sid-filter.c   2006-09-16 23:32:10.000000000 +0800
@@ -1949,6 +1949,10 @@
assert(ctx != NULL);
#endif /* !DEBUG */
+       ret = mlfi_eoh(ctx);
+   [...]]]></description>
			<content:encoded><![CDATA[<p>学习了一下<a href="http://www.xiaojb.com/archives/mailtech/spf.shtml">SPF(Sender Policy FrameWork)</a>,SPF目前已经是互联网标准，是对抗垃圾邮件的一项手段<br />
hotmail.com/gmail.com/sohu.com/tom.com/sina.com等都支持这个协议，Postfix从<a href="http://www.xiaojb.com/archives/mailtech/postfix-2_3.shtml">2.3</a>起，支持Sendmail的Milter协议，这使得Postfix能轻松的支持SPF(Sender ID &#038;SPF)，我们今天先说SPF。<br />
<a href="http://sid-milter.sourceforge.net/">sid-milter</a>是一个milter协议的SPF和Sender-ID实现，这个软件需要sendmail的libmilter支持，所以我们首先要下载sendmail并编译sendmail。</p>
<pre>
wget <a href="ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.13.8.tar.gz">ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.13.8.tar.gz</a>
tar zxf sendmail.8.13.8.tar.gz
cd sendmail-8.13.8/libmilter/
make
</pre>
<p>我们只需要编译libmilter就可以了，另外还需要知道编译后的libmilter.a的位置，通常在sendmail源码的目录下有一个obj.xxx的目录，我们需要记住这个目录下libmiter.a的位置</p>
<pre>
debian:/home/xjb/mail/sendmail-8.13.8/libmilter# pwd
/home/xjb/mail/sendmail-8.13.8/libmilter
debian:/home/xjb/mail/sendmail-8.13.8/libmilter# cd ../obj.Linux.2.6.17-1-686.i686/libmilter/
debian:/home/xjb/mail/sendmail-8.13.8/obj.Linux.2.6.17-1-686.i686/libmilter# ls libmilter.a
libmilter.a
debian:/home/xjb/mail/sendmail-8.13.8/obj.Linux.2.6.17-1-686.i686/libmilter#
</pre>
<p>然后我们<a href="http://sid-milter.sourceforge.net/">sid-milter</a>的网站去下载最新的代码，然后解压。</p>
<pre>
tar zxf sid-milter-0.2.14.tar.gz
cd sid-milter-0.2.14
</pre>
<p>这个时候我们可以看看INSTALL&#038;README再进行下一步。<br />
Postfix的官方文档给出了<a href="http://www.postfix.org/MILTER_README.html#workarounds">sid-milter的一些patch</a>，我们需要先打上patch<br />
<coolcode lang="c" download="sid-milter.patch"><br />
diff -urN sid-milter-0.2.14.org/sid-filter/sid-filter.c sid-milter-0.2.14/sid-filter/sid-filter.c<br />
&#8212; sid-milter-0.2.14.org/sid-filter/sid-filter.c       2006-07-21 06:28:09.000000000 +0800<br />
+++ sid-milter-0.2.14/sid-filter/sid-filter.c   2006-09-16 23:32:10.000000000 +0800<br />
@@ -1949,6 +1949,10 @@<br />
assert(ctx != NULL);<br />
#endif /* !DEBUG */</p>
<p>+       ret = mlfi_eoh(ctx);<br />
+       if (ret != SMFIS_CONTINUE)<br />
+           return ret;<br />
+<br />
    memset(stathdr, &#8216;\0&#8242;, sizeof stathdr);<br />
    memset(spf_errmsg, &#8216;\0&#8242;, sizeof spf_errmsg);<br />
    memset(sid_errmsg, &#8216;\0&#8242;, sizeof sid_errmsg);<br />
    @@ -2392,7 +2396,7 @@<br />
    mlfi_envfrom,   /* envelope sender filter */<br />
    NULL,           /* envelope recipient filter */<br />
    mlfi_header,    /* header filter */<br />
-       mlfi_eoh,       /* end of header */<br />
+       NULL,           /* end of header */<br />
    NULL,           /* body block filter */<br />
    mlfi_eom,       /* end of message */<br />
    NULL,           /* message aborted */</p>
<p></coolcode><br />
然后我们编辑sid-filter/Makefile.m4，这里定义了sid-milter使用的库和库的位置,我的Makefile.m4如下<br />
<coolcode download="Makefile.m4"><br />
include(confBUILDTOOLSDIR`/M4/switch.m4&#8242;)</p>
<p>define(`confMT&#8217;, `TRUE&#8217;)<br />
define(`confREQUIRE_LIBSM&#8217;, `true&#8217;)</p>
<p>dnl Sometimes enabling this next line clears up some load-time warnings<br />
dnl APPENDDEF(`confLIBS&#8217;, `-lcipher &#8216;)</p>
<p>bldPUSH_SMLIB(`sm&#8217;)<br />
bldPUSH_SMLIB(`marid&#8217;)</p>
<p>PREPENDDEF(`confINCDIRS&#8217;, `-I../../sendmail &#8216;)<br />
PREPENDDEF(`confINCDIRS&#8217;, `-I../../libmarid &#8216;)</p>
<p>dnl Disable these three lines if you want to use the OS-provided resolver<br />
dnl instead of the provided asynchronous resolver library.<br />
bldPUSH_SMLIB(`ar&#8217;)<br />
PREPENDDEF(`confINCDIRS&#8217;, `-I../../libar &#8216;)<br />
APPENDDEF(`confENVDEF&#8217;, `-DUSE_ARLIB &#8216;)</p>
<p>dnl Enable these next line if needed to specify the locations of libmilter.a<br />
dnl and the libmilter include files:<br />
APPENDDEF(`confINCDIRS&#8217;, `-I/home/xjb/mail/sendmail-8.13.8/include&#8217;)<br />
APPENDDEF(`confLIBDIRS&#8217;, `-L/home/xjb/mail/sendmail-8.13.8/obj.Linux.2.6.17-1-686.i686/libmilter&#8217;)</p>
<p>bldPRODUCT_START(`executable&#8217;, `sid-filter&#8217;)<br />
define(`bldSOURCES&#8217;, `sid-filter.c rfc2822.c util.c &#8216;)<br />
PREPENDDEF(`confLIBS&#8217;, `-lmilter &#8216;)<br />
bldPRODUCT_END</p>
<p>bldPRODUCT_START(`manpage&#8217;, `sid-filter&#8217;)<br />
define(`bldSOURCES&#8217;, `sid-filter.8&#8242;)<br />
bldPRODUCT_END</p>
<p>bldFINISH</p>
<p></coolcode><br />
AR(asynchronous resolver library)早在某公司的某个程序里边看到过了。23行是sendmail的头文件路径，24行改为上边提到的libmitler.a的路径。修改保存后就可以编译和安装了。</p>
<pre>
make
make install
</pre>
<p>sid-filter被默认安装在/usr/bin/目录下，它的参数可以看man。<br />
我的启动参数是</p>
<pre>
/usr/bin/sid-filter -a /etc/postfix/milter/peerlist -l -p inet:3332@127.0.0.1 -h
</pre>
<p>-a是设置了一个信任列表，这里边的域名或者IP不会被过滤，-l是记录syslog，-p是指定socket文件或者监听端口。<br />
-h是在mail的header增加Sid-milter的版本等信息。</p>
<p>另外我们还需要修改DNS，增加一个TXT记录</p>
<pre>
@       IN      TXT     "v=spf1 ip4:192.168.0.3 ?all"
</pre>
<p>我还没有看RFC，这里暂且猜测是指定了这个域的邮件服务器的IP地址列表，spf支持的格式有</p>
<pre>
# host -t txt gmail.com
gmail.com descriptive text "v=spf1 redirect=_spf.google.com"
# host -t txt _spf.google.com
_spf.google.com descriptive text "v=spf1 ip4:216.239.56.0/23 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ?all"

# host -t txt hotmail.com
hotmail.com descriptive text "v=spf1 include:spf-a.hotmail.com include:spf-b.hotmail.com include:spf-c.hotmail.com include:spf-d.hotmail.com ~all"

# host -t txt spf-a.hotmail.com
spf-a.hotmail.com descriptive text "v=spf1 ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15 ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24 ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24 ~all"
</pre>
<p>redirect和include作用相似？</p>
<p><a href="http://www.xiaojb.com/archives/mailtech/postfix-2_3.shtml">Postfix 2.3</a>及以上的版本支持milter,如果需要这些功能需要升级至2.3。Postfix的main.cf的配置</p>
<pre>
smtpd_milters = inet:127.0.0.1:3332
</pre>
<p>关于<a href="http://www.postfix.org/MILTER_README.html">Postfix对Milter的支持</a>，请看<a href="http://www.postfix.org/">Postfix</a>官网。</p>
<p>SPF的更多实现：<a href="http://new.openspf.org/Implementations">http://new.openspf.org/Implementations</a></p>
<p>注：由于环境的限制，本文只是一个初步的笔记，等我有互联网服务器，并详细测试后，本文会随时更新。</p>
<p>参考：<br />
<a href="http://www.zytrax.com/books/dns/ch9/spf.html">Howto: Define an SPF Record</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/postfix-spf.shtml/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>整理vpopmail用户信息的awk脚本</title>
		<link>http://www.xiaojb.com/archives/mailtech/vpopmail-userinfo.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/vpopmail-userinfo.shtml#comments</comments>
		<pubDate>Tue, 12 Sep 2006 05:42:52 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/vpopmail-userinfo.shtml</guid>
		<description><![CDATA[vpopmail的vuserinfo输出的用户信息较乱，我写了一个awk脚本将其处理。
用法：

./vuserinfo -D xxxx.com &#124; ./user.awk

输出：
                User       Name                Quota         Usage
   [...]]]></description>
			<content:encoded><![CDATA[<p>vpopmail的vuserinfo输出的用户信息较乱，我写了一个<a href="http://www.xiaojb.com/archives/it/awk.shtml">awk脚本</a>将其处理。<br />
用法：<br />
<code><br />
./vuserinfo -D xxxx.com | ./user.awk<br />
</code><br />
输出：<br />
                User       Name                Quota         Usage<br />
                xxxx       xxxxx            NOQUOTA    NOQUOTA</p>
<p><coolcode download="userinfo.awk" linenum="off"><br />
#!/usr/bin/awk -f<br />
function trim(str) { sub(/^[ \t]*/,&#8221;",str); sub(/[ \t]*$/,&#8221;",str); return str }</p>
<p>BEGIN {<br />
        FS=&#8221;:&#8221;<br />
        U=&#8221;"<br />
        A=&#8221;"<br />
        N = &#8220;&#8221;<br />
        Q = &#8220;&#8221;<br />
        printf(&#8221;%20s %10s %20s %10s\n&#8221;, &#8220;User&#8221;, &#8220;Name&#8221;, &#8220;Quota&#8221;, &#8220;Usage&#8221;);<br />
}<br />
{<br />
        if($1 == &#8220;name&#8221;) {<br />
                if(U != &#8220;&#8221;) {<br />
                        printf(&#8221;%20s %10s %20s %10s\n&#8221;, U, N, Q, A);<br />
                }<br />
                U = trim($2)<br />
                A = &#8220;&#8221;<br />
                N = &#8220;&#8221;<br />
                Q = &#8220;&#8221;<br />
        }<br />
        if($1 == &#8220;usage&#8221;) {<br />
                A = trim($2)<br />
        }<br />
        if($1 == &#8220;gecos&#8221;) {<br />
                N = trim($2)<br />
        }<br />
        if($1 == &#8220;quota&#8221;) {<br />
                Q = trim($2)<br />
        }<br />
}<br />
END {<br />
        if(U) {<br />
                printf(&#8221;%20s %10s %20s %10s\n&#8221;, U, N, Q, A);<br />
        }<br />
}</p>
<p></coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/vpopmail-userinfo.shtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ecartis安装笔记</title>
		<link>http://www.xiaojb.com/archives/mailtech/ecartis-install.shtml</link>
		<comments>http://www.xiaojb.com/archives/mailtech/ecartis-install.shtml#comments</comments>
		<pubDate>Fri, 08 Sep 2006 03:23:23 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[MailTech]]></category>

		<guid isPermaLink="false">http://www.xiaojb.com/archives/mailtech/ecartis-install.shtml</guid>
		<description><![CDATA[ecartis是一款maillist软件。
下载地址：ftp://ftp.ecartis.org/pub/ecartis/snapshots/
首先下载软件并解包

wget ftp://ftp.ecartis.org/pub/ecartis/snapshots/tar/ecartis-1.0.0-snap20060813.tar.gz
tar zxf ecartis-1.0.0-snap20060813.tar.gz
cd ecartis-1.0.0

ecartis没有configure等工具，需要到src目录下编译安装

cd src
cp Makefile.dist Makefile
make
make install

另外还需要建立用户ecartis，并且把相应的东西拷贝过去

useradd -d /home/ecartis -s /bin/false ecartis

也可以制作RPM完成安装

useradd -d /home/ecartis -s /bin/false ecartis
cp ../ecartis-1.0.0-snap20060813.tar.gz /usr/src/redhat/SOURCES/ecartis-1.0.0.tar.gz
rpmbuild -bb &#8211;target=i686 ecartis.spec
rpm -ivh /usr/src/redhat/RPMS/i686/ecartis-1.0.0-1.i686.rpm

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ecartis.org/">ecartis</a>是一款maillist软件。<br />
下载地址：<a href="ftp://ftp.ecartis.org/pub/ecartis/snapshots/">ftp://ftp.ecartis.org/pub/ecartis/snapshots/</a></p>
<p>首先下载软件并解包<br />
<code><br />
wget ftp://ftp.ecartis.org/pub/ecartis/snapshots/tar/ecartis-1.0.0-snap20060813.tar.gz<br />
tar zxf ecartis-1.0.0-snap20060813.tar.gz<br />
cd ecartis-1.0.0<br />
</code><br />
ecartis没有configure等工具，需要到src目录下编译安装<br />
<code><br />
cd src<br />
cp Makefile.dist Makefile<br />
make<br />
make install<br />
</code><br />
另外还需要建立用户ecartis，并且把相应的东西拷贝过去<br />
<code><br />
useradd -d /home/ecartis -s /bin/false ecartis<br />
</code></p>
<p>也可以制作RPM完成安装</p>
<ol>
<li>useradd -d /home/ecartis -s /bin/false ecartis</li>
<li>cp ../ecartis-1.0.0-snap20060813.tar.gz /usr/src/redhat/SOURCES/ecartis-1.0.0.tar.gz</li>
<li>rpmbuild -bb &#8211;target=i686 ecartis.spec</li>
<li>rpm -ivh /usr/src/redhat/RPMS/i686/ecartis-1.0.0-1.i686.rpm</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaojb.com/archives/mailtech/ecartis-install.shtml/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
