<?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:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>fanta-orange</title>
	<atom:link href="http://www.fanta-orange.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fanta-orange.com/blog</link>
	<description>by mocchi.</description>
	<pubDate>Thu, 12 Feb 2009 04:25:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/feed/" />
		<item>
		<title>やっぱりまた来た大量の日本語SPAMメール</title>
		<link>http://www.fanta-orange.com/blog/2009/02/12/spam_again/</link>
		<comments>http://www.fanta-orange.com/blog/2009/02/12/spam_again/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 01:29:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[amavisd-new]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[postgrey]]></category>

		<category><![CDATA[spam]]></category>

		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=384</guid>
		<description><![CDATA[またお前か！
と思いつつも、
飛んで火に入る夏の虫・・
とも思った。
ヤツがまた来た。それはもう清清しいくらいに同じ手法で。
おなじみの内容、件名におなじみの差出人（似非日本人みたいな差出人名）、おなじみの方法（1025 [...]]]></description>
			<content:encoded><![CDATA[<h2><span style="color: #ff6600;">またお前か！</span></h2>
<p>と思いつつも、</p>
<h1><span style="color: #ff6600;">飛んで火に入る夏の虫・・</span></h1>
<p>とも思った。</p>
<p><a href="http://www.fanta-orange.com/blog/2009/01/21/spam/">ヤツ</a>がまた来た。それはもう清清しいくらいに同じ手法で。</p>
<p>おなじみの内容、件名におなじみの差出人（似非日本人みたいな差出人名）、おなじみの方法（1025秒前後で再送）で、おなじみの頻度（300通over/1日）だ。</p>
<p>でも内心また来て欲しいとも願っていた。あの後<a href="http://www.fanta-orange.com/blog/2009/02/06/spamassassin-1/" target="_blank">サーバーサイドに導入したSpamassassin</a>の効果を確かめる絶好のチャンス。前回はspam対策として施していた以下の対策が全てスルーされていた。</p>
<ol>
<li>送信元ドメインの存在チェック</li>
<li>Greylistingによる受信制限</li>
<li>DNSBLを利用した受信制限</li>
</ol>
<p>今回は以下の対策を施していた。</p>
<ol>
<li>送信元ドメインの存在チェック</li>
<li>Greylistingによる受信制限</li>
<li><span style="color: #ff0000;">Spamassassinによるspam判定</span></li>
</ol>
<p>前回まで「3.」で施していた対策はPostfixへの以下の設定によるものであった。</p>
<pre id="conf">smtpd_client_restrictions =
・・・・・
    reject_rbl_client dsn.rfc-ignorant.org,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client dul.dnsbl.sorbs.net,
    reject_rbl_client bl.spamcop.net,
・・・・・</pre>
<p>実はこれ、送信元IPアドレスがDNSBLに含まれる場合に問答無用でrejectするという男気溢れる挙動であった。情け容赦なしにrejectする様をPostfixのログから眺めるのもある種の味わいがあって好きであったし、それはそれで良かったのだが、今回導入したSpamassassinは実はそのあたりのチェックも行ってくれている。</p>
<p>上記のPostfixの設定は送信元のIPアドレスのみをチェックしているのだが、Spamassassinではこれと合わせてメール本文中に含まれるURL（のFQDN部分）もブラックリストと照合してくれている。</p>
<p>Spamassassinでは、その他、様々なチェックを行い、それぞれに「スコア」がつけれれており、最終的な「スコア」がある閾値（任意で設定出来る）を超えたメールをSPAMメールとして判定する。例えば、あるDNSBLチェックに引っかかってしまった場合でも、その他のチェックに引っかからなければ（閾値を超えなければ）SPAMメールとは判定されない。</p>
<p>よってこの慈悲深い挙動を確かめるために今回からPostfixの設定から「reject_rbl_client」の記述を削除することにした。</p>
<p>で、肝心のSpamassassin導入による効果だがヤツらからのほぼ全てのメールを以下の通り判定してくれた。</p>
<div id="conf">To: &lt;xxx@fanta-orange.com&gt;<br />
Subject: 究極のスペルおよび英文法チェックツールを体験してください<br />
From: &#8220;=?iso-2022-jp?B?iMmNspNjjE4=?=&#8221; &lt;uchiumi.ryozo@porchchops.com&gt;<br />
Delivered-To: xxx@fanta-orange.com<br />
X-Spam-Flag: YES<br />
<span style="color: #ff0000;">X-Spam-Score: 42.371</span><br />
X-Spam-Level: ******************************************<br />
X-Spam-Status: Yes, score=42.371 tagged_above=-999 required=13  tests=[BAYES_99=7.5, CONTENT_TYPE_PRESENT=-0.1, DATE_IN_FUTURE_12_24=2.189, DOSMXPBL=3.5, DOS_OE_TO_MX=2.75, \<br />
FH_HELO_EQ_D_D_D_D=0.001, HELO_DYNAMIC_IPADDR=2.426, HTML_MESSAGE=1,    ISO2022JP_BODY=-0.1, MIMEQENC=0.2, MULTIPART_ALTERNATIVE=0.1,   QENCPTR1=0.2, QENCPTR2=0.2, RCVDCB\<br />
L99=3.5, RCVDXBL99=3.5,       RCVD_IN_BL_SPAMCOP_NET=0.1, RCVD_IN_CBL=0.1, RCVD_IN_PBL=0.905, RCVD_IN_SORBS_DUL=0.5, RCVD_IN_XBL=0.5, RDNS_DYNAMIC=0.1,       RIPE_NCC=0.1, S\<br />
ORBSDUL99=2, SPAMCOP99=3, SURBL99=3.5, URIBLSBL99=2,     URIBL_BLACK=1, URIBL_SBL=0.1, URIBL_WS_SURBL=1.5,       X_MAILER_PRESENT=0.1]<br />
X-Greylist: delayed 1024 seconds by postgrey-1.32 at xxx.fanta-orange.com; Tue, 10 Feb 2009 00:55:32 JST<br />
Message-ID: &lt;59b801c98b4f$23023920$1fb60d50@LRouen-151-72-23-31.w80-13.abo.wanadoo.fr&gt;</div>
<p>ちなみにルールセットは <a href="http://tlec.linux.or.jp/" target="_blank">TELC様</a> のものを活用させていただいています。</p>
<p>というわけで、<span style="color: #ff0000;">リベンジ成功</span>です。上のスコアを見ると、ベイジアンフィルタによるスコア（BAYES_99=7.5）以外にも色々助けられてるな～と。それぞれの意味の詳細については今後書いていきたいと思います（多分書かない）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/02/12/spam_again/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/02/12/spam_again/" />
	</item>
		<item>
		<title>SpamAssassin導入（1)</title>
		<link>http://www.fanta-orange.com/blog/2009/02/06/spamassassin-1/</link>
		<comments>http://www.fanta-orange.com/blog/2009/02/06/spamassassin-1/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 09:08:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[amavisd-new]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[unix]]></category>

		<category><![CDATA[サーバー構築]]></category>

		<category><![CDATA[メールサーバー]]></category>

		<category><![CDATA[spam]]></category>

		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=358</guid>
		<description><![CDATA[さてさて、先日のSPAMの記事の最後の方に書いた通り、ベイジアンフィルタを導入してみた。あれからちょっと時間が空いてしまったのには理由がある。
オープンソースで有名なベイジアンフィルタと言えば

bsfilter
Spa [...]]]></description>
			<content:encoded><![CDATA[<p>さてさて、先日の<a href="http://www.fanta-orange.com/blog/2009/01/21/spam/" target="_blank">SPAM</a>の記事の最後の方に書いた通り、ベイジアンフィルタを導入してみた。あれからちょっと時間が空いてしまったのには理由がある。</p>
<p>オープンソースで有名なベイジアンフィルタと言えば</p>
<ul>
<li>bsfilter</li>
<li>SpamAssassin</li>
</ul>
<p>等が挙げられる（っていうか、この2つか知らない:-) ）</p>
<p>前職で後者のSpamAssassinを使用していたので今回もサクッと導入出来るであろうと踏んでいたが、それは大きな間違いであった。「やりたいこと」は明確であったのだけど、その「やりたいこと」の1歩手前までは上手く行くんだけど最後の最後でどうしても解決方法が見つからない事ばかり。</p>
<p>「やりたいこと」というのは</p>
<div id="conf">
<ol>
<li>ベイジアンフィルタを導入する</li>
<li>ベイジアンフィルタにてSPAMと判定された場合はサーバーサイドでSPAMフォルダ（IMAP）に移動する</li>
<li><span style="color: #ff0000;">個々のユーザ（メールアドレス）ごとにベイジアンフィルタの判定DBを持たせる</span></li>
<li><span style="color: #ff0000;">以上のことを仮想ドメイン・仮想ユーザ環境で実現する<br />
</span></li>
</ol>
</div>
<p>これだけ。たったのこれだけなのに全てを満たすのに苦労した。</p>
<p>構築にあたって、必須の構成要素は</p>
<ul>
<li>MTA： Postfix</li>
<li>ベイジアンフィルタ： SpamAssassin</li>
</ul>
<p>とした。（この構成を変更しだすとキリがないので）</p>
<p>巷のWebページでも「Postfix + SpamAssassinによる迷惑メール対策」的な解説ページが多数見受けられたのだが、どのページを見ても、上の「やりたいこと」を全て満たすものではなかった。大抵のWebページが仮想ドメイン・仮想ユーザを想定しておらず、システムの実ユーザ環境での構築方法であった。</p>
<p>そう考えると前職で扱っていた環境は、MTAこそPostfixではなくqmailであったのだけど、「やりたいこと」を全て満たせていたので見事であった。（自分で言うな）</p>
<p>前職で扱っていた仕組みはこんな感じ↓（もう構成とか設定方法をだいぶ忘れているので適当に）</p>
<div id="conf">
<ul>
<li>qmailの仮想ユーザ環境と言えば、vpopmaiが定番であるが、これは使わない。</li>
<li><span style="color: #ff0000;">qmailの control/virtualdomains を駆使して、仮想ユーザと実ユーザーを紐付ける</span></li>
<li>実ユーザへのローカルメール配送から .qmail経由でprocmailを呼び出す。</li>
<li>procmailのレシピにてspamassassin（spamc）を呼び出す</li>
<li>procmailのレシピにてSPAM判定メールをフォルダ振り分け</li>
</ul>
</div>
<p>但し、短所としては<span style="color: #ff0000;">赤色文字</span>にあるように仮想ドメイン+仮想ユーザの組み合わせ分だけ実ユーザを作成しなければならなかったので管理が煩雑であった。</p>
<p>今の構成は Postfix + LDAP で仮想ドメイン・ユーザー環境を構成しており、仮想ユーザ宛のメール配送先等の情報はLDAPに格納している。Postfixでもqmailのような仮想ユーザと実ユーザの紐付けは可能であるが、上に挙げた短所を許容したくないためにこのような構成をとった。</p>
<p>よって「やりたいこと」の 4. の条件を次のように厳しくすることとする。</p>
<div id="conf">
<ol>
<li>ベイジアンフィルタを導入する</li>
<li>ベイジアンフィルタにてSPAMと判定された場合はサーバーサイドでSPAMフォルダ（IMAP）に移動する</li>
<li>個々のユーザ（メールアドレス）ごとにベイジアンフィルタの判定DBを持たせる</li>
<li>以上のことを仮想ドメイン・仮想ユーザ環境で実現する<span style="color: #ff0000;">（完全な仮想ドメイン・ユーザ環境とする）</span></li>
</ol>
</div>
<p>次記事以降に実際の構築方法を「苦労した点」「解決方法」と共に書いていきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/02/06/spamassassin-1/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/02/06/spamassassin-1/" />
	</item>
		<item>
		<title>DNSBLの挙動をdigコマンドから確認してみる</title>
		<link>http://www.fanta-orange.com/blog/2009/01/23/dnsbl/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/23/dnsbl/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 07:40:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[DNS]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=311</guid>
		<description><![CDATA[DNSBLとの通信プロトコルがDNSだって先日初めて知ったよ。（恥）
専用のプロトコル、もしくはいろんな面で扱いやすいHTTP使ってるのかと思ってた。
Wikipediaによると、

DNSBL クエリ
メールサーバがク [...]]]></description>
			<content:encoded><![CDATA[<p>DNSBLとの通信プロトコルがDNSだって<a href="http://www.fanta-orange.com/blog/2009/01/21/spam/" target="_blank">先日</a>初めて知ったよ。（恥）<br />
専用のプロトコル、もしくはいろんな面で扱いやすいHTTP使ってるのかと思ってた。</p>
<p>Wikipediaによると、</p>
<div id="conf">
<h2>DNSBL クエリ</h2>
<p>メールサーバがクライアントからコネクションを受け付けたとき、クライアントをDNSBL（ここでは dnsbl.example.net）に照らしてチェックするには、以下のようなことをする。</p>
<ol>
<li>クライアントのIPアドレス（ここでは 192.168.42.23）のバイト順を逆転させ 23.42.168.192 とする。</li>
<li>これにDNSBLのドメイン名を連結し 23.42.168.192.dnsbl.example.net とする。</li>
<li>これをドメイン名（&#8221;A&#8221;レコード）としてDNSで参照する。クライアントが一覧にあればアドレスが返ってくる。そうでなければ &#8220;NXDOMAIN&#8221; (&#8221;No such domain&#8221;) というコードが返ってくる。</li>
<li>クライアントが一覧にある場合、その名前をテキストレコード（&#8221;TXT&#8221;レコード）として参照することができる。多くのDNSBLはTXTレコードで何故そのクライアントが一覧に加えられたかという情報を公表している。</li>
</ol>
<dl></dl>
<p>引用元: <a href="http://ja.wikipedia.org/wiki/DNSBL">DNSBL - Wikipedia</a>.</div>
<p>ということなので、実際にDNSクエリを投げて挙動を確かめてみよう。</p>
<p>ということで</p>
<ul>
<li>DNSBLドメイン（ゾーン）：zen.spamhaus.org</li>
<li>確認用IPアドレス：78.162.167.215</li>
</ul>
<p>とする。</p>
<p>「zen.spamhaus.org」は Postfixの reject_rbl_client に実際に設定しているホスト名だ。</p>
<p># これがDNSのゾーンを表していたとは知らなかった。</p>
<p>spamhausは<a href="http://neta.ywcafe.net/000678.html" target="_blank">このあたり</a>で「使ってはいけない」とか書かれているが、わたしはどちらかと言うと<a href="http://moin.qmail.jp/spam" target="_blank">こういうスタンス</a>の方が好きなので今後もガシガシ使っていく。（メールの到達性の保証とかあまり気にしないので）</p>
<p>「78.162.167.215」は<a href="http://www.fanta-orange.com/blog/2009/01/21/spam/" target="_blank">先日の件</a>（って今も継続中だけど）で晒したIPアドレスの中の1つだ。</p>
<p>さて、まずは「1.」にならって、「78.162.167.215」を「215.167.162.78」とする。<br />
で、「2.」にならって、「215.167.162.78.zen.spamhaus.org」とする。<br />
「3.」で「2.」のAレコードを引けっていってるので</p>
<div id="conf"><strong>$ dig 215.167.162.78.zen.spamhaus.org</strong></p>
<p>; &lt;&lt;&gt;&gt; DiG 9.3.4-P1 &lt;&lt;&gt;&gt; 215.167.162.78.zen.spamhaus.org<br />
;; global options:  printcmd<br />
;; Got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 51309<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 23, ADDITIONAL: 0</p>
<p>;; QUESTION SECTION:<br />
;215.167.162.78.zen.spamhaus.org. IN    A</p>
<p>;; ANSWER SECTION:<br />
<span style="color: #ff6600;">215.167.162.78.zen.spamhaus.org. 1800 IN A      <strong>127.0.0.10</strong><br />
215.167.162.78.zen.spamhaus.org. 1800 IN A      <strong>127.0.0.4</strong></span></p>
<p>;; AUTHORITY SECTION:<br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">y.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">0.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">1.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">3.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">5.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">8.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">a.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS <span style="color: #008000;"> b.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">c.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">d.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">f.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">g.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">h.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">i.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS <span style="color: #008000;"> k.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">l.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">m.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">o.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS <span style="color: #008000;"> q.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS <span style="color: #008000;"> r.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS <span style="color: #008000;"> s.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">t.ns.spamhaus.org.</span><br />
zen.spamhaus.org.       66886   IN      NS      <span style="color: #008000;">x.ns.spamhaus.org.</span></p>
<p>;; Query time: 6 msec<br />
;; SERVER: 38.99.90.217#53(38.99.90.217)<br />
;; WHEN: Fri Jan 23 14:56:07 2009<br />
;; MSG SIZE  rcvd: 452</p></div>
<p>Authorityを持つサーバがこれだけ（<span style="color: #008000;">緑色文字</span>）あるみたい。世界中からのDNSクエリをさばかないといけないわけだから当然といえば当然か。</p>
<p>実際のANSWERセクション（DNSクエリに対する回答）は<span style="color: #ff6600;">オレンジ色文字</span>の部分。Aレコードが、「127.0.0.10」と「127.0.0.4」と2つ返ってきた。ここは大抵127.0.0/8のループバックアドレスらしく、末尾の数字によって、IPアドレスの迷惑具合（SPAMMERホストなのか、open relayホストなのか）がわかるらしい。（このあたりは要確認）</p>
<p>さて、次に「2.」のAレコードがある場合、「2.」のTXTレコードに何やら付随した情報が含まれるというので早速引いてみる。</p>
<div id="conf"><strong>$dig 215.167.162.78.zen.spamhaus.org txt</strong></p>
<p>; &lt;&lt;&gt;&gt; DiG 9.3.4-P1 &lt;&lt;&gt;&gt; 215.167.162.78.zen.spamhaus.org txt<br />
;; global options:  printcmd<br />
;; Got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 12454<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 23, ADDITIONAL: 0</p>
<p>;; QUESTION SECTION:<br />
;215.167.162.78.zen.spamhaus.org. IN    TXT</p>
<p>;; ANSWER SECTION:<br />
<span style="color: #ff6600;">215.167.162.78.zen.spamhaus.org. 1800 IN TXT    &#8220;<strong>http://www.spamhaus.org/query/bl?ip=78.162.167.215</strong>&#8220;</span></p>
<p>;; AUTHORITY SECTION:<br />
zen.spamhaus.org.       64090   IN      NS      l.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      m.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      o.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      q.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      r.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      s.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      t.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      x.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      y.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      0.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      1.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      3.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      5.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      8.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      a.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      b.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      c.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      d.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      f.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      g.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      h.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      i.ns.spamhaus.org.<br />
zen.spamhaus.org.       64090   IN      NS      k.ns.spamhaus.org.</p>
<p>;; Query time: 64 msec<br />
;; SERVER: 38.99.90.217#53(38.99.90.217)<br />
;; WHEN: Fri Jan 23 15:42:44 2009<br />
;; MSG SIZE  rcvd: 483</p></div>
<p>おお、何やらURLが記載されてる！ので<br />
<a href="http://www.spamhaus.org/query/bl?ip=78.162.167.215" target="_blank">http://www.spamhaus.org/query/bl?ip=78.162.167.215</a></p>
<p>へアクセスすると</p>
<p><a href="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen.jpg" rel="lightbox[311]"><img class="size-thumbnail wp-image-334 alignnone" title="zen" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen-150x150.jpg" alt="zen" width="150" height="150" /></a></p>
<p>と、こんな感じで「PBL」と「XBL」の中にリストされてるよ！って表示される。（さっきの 127.0.0.4と127.0.0.10は「PBL」と「XBL」に対応してるのかも？）</p>
<p>で「PBL」の方をクリックすると</p>
<p><a href="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen21.jpg" rel="lightbox[311]"><img class="alignnone size-thumbnail wp-image-340" title="zen21" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen21-150x150.jpg" alt="zen21" width="150" height="150" /></a></p>
<p>/13でブラックリスト入りしてやがる。ザマーミロ（笑）</p>
<p>「CBL」の方は /32 のようだ。（残念）</p>
<p>どちらにも共通して「ブラックリスト入りしているアドレスレンジ」、「いつブラックリスト入りしたのか？」、「ブラックリストからの削除用リンク（ボタン）」が用意されている。</p>
<p>削除用リンクをクリックすると、</p>
<p><a href="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen3.jpg" rel="lightbox[311]"><img class="alignnone size-thumbnail wp-image-343" title="zen3" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen3-150x150.jpg" alt="zen3" width="150" height="150" /></a></p>
<p>URLの部分の「ip=<span style="color: #ff0000;">ブラックリスト化されたIPアドレス</span>」となっている。</p>
<p><a href="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen4.jpg" rel="lightbox[311]"><img class="alignnone size-thumbnail wp-image-344" title="zen4" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/zen4-150x150.jpg" alt="zen4" width="150" height="150" /></a></p>
<p>もしかして、spamメール送信用とは別のボットかなんかで無差別にブラックリストから削除とか出来ちゃうんじゃないかと心配してHTMLのソースを眺めてみたら</p>
<pre id="conf">&lt;input name="ip" type="hidden" value="78.162.167.215" /&gt;
&lt;input name="confirm" type="hidden" value="<span style="color: #ff0000;">dhofgjaamcpnkikepedalhopnhiilgba</span>" /&gt;</pre>
<p>って<span style="color: #ff0000;">赤色文字</span>部分のようなランダムな値を持つinput要素があったので、多分この値とマッチングさせて削除可否を判断してるんだろうな。とか思ったけど、<a href="http://ja.wikipedia.org/wiki/CAPTCHA" target="_blank">CAPTCHA</a>とか使ってるわけじゃないから、このランダムな値も機械的に読み取れちゃうよな。。</p>
<p>ってことで、ブラックリスト削除ボットのためのブラックリストが出来て・・（以下ループ）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/23/dnsbl/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/23/dnsbl/" />
	</item>
		<item>
		<title>DNSBLやGreylistingを突破する大量のSPAMメールについて</title>
		<link>http://www.fanta-orange.com/blog/2009/01/21/spam/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/21/spam/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 11:13:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[postfix]]></category>

		<category><![CDATA[postgrey]]></category>

		<category><![CDATA[unix]]></category>

		<category><![CDATA[spam]]></category>

		<category><![CDATA[ムカつく]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=267</guid>
		<description><![CDATA[なんじゃこりゃ？！
と言いたくなるくらい、まさに今、メールボックスが悲惨な事になってる。
1つのアドレスに 100 ～ 200通ほど、以下の内容のSPAMメールが届いてる。
   洗練された英文ライティングを実現!
   [...]]]></description>
			<content:encoded><![CDATA[<h2><span style="color: #ff9900;">なんじゃこりゃ？！</span></h2>
<p>と言いたくなるくらい、まさに今、メールボックスが悲惨な事になってる。<br />
1つのアドレスに 100 ～ 200通ほど、以下の内容のSPAMメールが届いてる。</p>
<pre id="conf">   洗練された英文ライティングを実現!
    単調な文章も、一瞬で洗練された英文に！
    文法、スペル、句読点のチェックに加え、 英英辞書とシソーラス(同 意語辞典)機能で完璧なライティングを可能に。

          a 文法チェック a 文章の修飾 a シソーラス(同意語辞典)
          a スペルチェック a 英英辞書 a 英文テンプレート

    購入!</pre>
<p>件名（Subject）についてはこんな感じ↓でランダム。（といっても幾つかのパターンだが）</p>
<div id="conf">
<ul>
<li>英文を洗練させる最善の方法</li>
<li>次の E-mail では、さらに洗練されるでしょう。</li>
<li>誰にもあなたの英語力の秘密を知られることはありません</li>
<li>このソフトは、あなたの英文を向上させます</li>
<li>正しいスペルを思い出せませんか？ 私たちがお手伝いします。</li>
<li>非常に簡単にプロに近いライティングが可能</li>
<li>格調高い英文レター</li>
<li>パーフェクトな英語のための手段が、ここにあります</li>
<li>かつてないほど完璧な E-mail。</li>
<li>ライティングを向上させる最も手軽な方法</li>
<li>自分の英語力が完全でないとお感じなら、このソフトをお使いください。</li>
<li>英語スキルをアップグレードしましょう</li>
<li>あなたの英語スキルが向上します</li>
<li>究極のスペルおよび英文法チェックツールを体験してください</li>
<li>受賞歴を誇るスペルおよび英文法チェックツール</li>
<li>もっと上手い言い方は？</li>
<li>アメリカのネイティブスピーカーのようなライティングも夢ではありません</li>
</ul>
</div>
<p>差出人アドレスもこんな感じ↓でランダム。</p>
<div id="conf">
<ul>
<li>umaba_shino@reach.ic.org</li>
<li>yoshizawa_yuna@remoteworking.info</li>
<li>BouzukiRan@orientaltranny.com</li>
<li>FujimuraManabu@ozas.itg.lt</li>
<li>Kamei-@phonebookofguatemala.com</li>
<li>Saikawa.Akemi@realsunglasses.com</li>
<li>Shikikawa.Sachiko@reliefuk.org</li>
<li>Tagami-Kawa@organizados.org</li>
<li>kudoumiwa@page2page.net</li>
<li>horikawahojo@painkill.net</li>
<li>ito.leiko@palmcourt.net</li>
<li>fukumoto-masu@petley.net</li>
<li>shiniakimi@pazova.net</li>
<li>・・・・・</li>
</ul>
</div>
<p>と、こんな感じでこちらは数限りなくありそうなので、このあたりにしておく。</p>
<p>差出人アドレスのドメイン部分（@以降）が存在しないドメインである場合はMTA（Postfix）で拒否するようにしているので、それでも届くということは上記アドレス群のドメインは全て存在するドメインなんだと思う。</p>
<p>で、やっかいなのがリレー元MTAのIPアドレスで、これも以下の通り大量にある。</p>
<div id="conf">
<ul>
<li> 83.30.72.40</li>
<li>92.82.11.172</li>
<li>121.246.209.44</li>
<li>213.227.246.142</li>
<li>82.232.126.166</li>
<li>78.162.167.215</li>
<li>77.51.129.184</li>
<li>88.238.122.17</li>
<li>89.139.232.114</li>
<li>94.99.91.176</li>
<li>83.7.155.131</li>
<li>94.178.72.224</li>
<li>60.45.186.31</li>
<li>89.201.146.39</li>
<li>89.149.62.54</li>
<li>61.198.98.107</li>
<li>79.165.213.173</li>
<li>95.56.12.13</li>
<li>78.165.232.225</li>
<li>・・・・・</li>
</ul>
</div>
<p>あー、もう大量にありすぎて晒しきれないのがムカつく（笑）</p>
<p><a href="http://ja.wikipedia.org/wiki/DNSBL" target="_blank">DNSBL</a>制限もすり抜けてきているので、この、今日1日で数えるだけで200個くらいありそうなIPアドレス全てが未だ世界中のDNSBLにも登録されていない（？）</p>
<p>で、最もイタタタなのが、<a href="http://www.kozupon.com/postgrey/index.html" target="_blank">Postgrey</a>導入によって効果てき面！Dis率90%以上を誇っていた<span style="color: #ff0000;">Greylisting</span>も全て突破してきてるぅぅぅ！！</p>
<div id="conf">
<dl>
<dt><strong><span style="color: #ff0000;">Greylisting</span>とは？</strong></dt>
<dd>ホワイトリスト（接続許可リスト）でもなく、ブラックリスト（接続拒否リスト）でもなく、グレーリスト（受信可否判断待ちリストとでも呼ぶ）を用いた受信制限のこと。Greylistingを実装するMTAはメール受信時、まずは全てのメール送信元（MTA）に対して「一時配送エラー」を返し、送信元IPアドレスをグレーリストに加える。「まともな」メール送信元（MTA）であれば、「一時配送エラー」を受け取った場合、一定期間経過後にメールの再送を試みる。メールの再送がなされた場合、その接続元（MTA）のIPアドレスを「お行儀の良いMTAである」とみなして、グレーリストから削除し、ホワイトリストに追加し、メールを受信する。SPAMメール送信元（MTA）は単位時間あたり出来るだけ多くのメールをばら撒こうとするため、「一時配送エラー」を受け取った場合はわざわざ再送することをしない。このSPAMMERの挙動を逆手にとったものが「Greylisting」による受信制限である。</dd>
</dl>
</div>
<p>これら突破されたメールがどれくらいの間隔で再送されているのかを調べると、ほぼ全てが「1020秒～1050秒」の間で再送されてきていることがわかった。明らかにGreylistingすり抜け対策だ。</p>
<p>これだけの数のネットワーク上のMTAを駆使して、Greylistをすり抜けるようなメール送信方法を全てのMTAが実装してるってことは、spam送信プログラムがopen relayなMTAを利用しているのではなく、自身がMTAになってSMTPしゃべってるんだろう。<br />
これがいわゆるボットネットを利用したSPAMメール送信ってやつですか？こんなに強烈なのは初体験です。</p>
<p>いよいよベイジアンフィルタ導入せねばならんのか？？</p>
<p>最後に、大量SPAM被害前と後でのPostfixのログのサマリをご覧頂いてお別れします。</p>
<h3>■被害前</h3>
<pre id="conf">Grand Totals
------------
messages

    290   received
    144   delivered
      0   forwarded
      0   deferred
      0   bounced
    425   rejected (74%)
      0   reject warnings
      0   held
      0   discarded (0%)

    896k  bytes received
    896k  bytes delivered
    133   senders
    130   sending hosts/domains
      5   recipients
      2   recipient hosts/domains

Per-Day Traffic Summary
    date          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    Jan 16 2009        88         44          0          0        203
    Jan 17 2009       202        100          0          0        222

Per-Hour Traffic Daily Average
    time          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    0000-0100           1          1          0          0         25
    0100-0200          82         41          0          0         68
    0200-0300          18          9          0          0         19
    0300-0400           0          0          0          0          3
    0400-0500           1          1          0          0          3
    0500-0600           2          1          0          0          6
    0600-0700           1          1          0          0          2
    0700-0800           1          1          0          0          4
    0800-0900           2          1          0          0          2
    0900-1000           3          2          0          0          4
    1000-1100           4          2          0          0          4
    1100-1200           4          2          0          0          8
    1200-1300           1          1          0          0          3
    1300-1400           5          3          0          0          8
    1400-1500           3          2          0          0          2
    1500-1600           3          2          0          0         14
    1600-1700           2          1          0          0          4
    1700-1800           0          0          0          0          7
    1800-1900           0          0          0          0          4
    1900-2000           1          1          0          0          4
    2000-2100           4          2          0          0          6
    2100-2200           3          2          0          0          9
    2200-2300           3          2          0          0          8
    2300-2400           1          1          0          0          3</pre>
<h3>■被害後</h3>
<pre id="conf">Grand Totals
------------
messages

   1038   received
    517   delivered
      0   forwarded
      0   deferred
      0   bounced
   1021   rejected (66%)
      0   reject warnings
      0   held
      0   discarded (0%)

   3628k  bytes received
   3628k  bytes delivered
    504   senders
    497   sending hosts/domains
      5   recipients
      2   recipient hosts/domains

Per-Hour Traffic Summary
    time          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    0000-0100           0          0          0          0          0
    0100-0200           0          0          0          0          0
    0200-0300         104         52          0          0        122
    0300-0400         133         66          0          0         80
    0400-0500          32         16          0          0         97
    0500-0600         160         80          0          0        126
    0600-0700          24         12          0          0         54
    0700-0800          38         19          0          0         10
    0800-0900           8          4          0          0         19
    0900-1000          54         27          0          0         61
    1000-1100          22         11          0          0         17
    1100-1200           6          3          0          0          5
    1200-1300           0          0          0          0          4
    1300-1400           6          3          0          0         15
    1400-1500          46         23          0          0         47
    1500-1600          16          8          0          0          7
    1600-1700          15          7          0          0         44
    1700-1800          40         20          0          0         47
    1800-1900         283        140          0          0        248
    1900-2000          51         26          0          0         17
    2000-2100           0          0          0          0          1
    2100-2200           0          0          0          0          0
    2200-2300           0          0          0          0          0
    2300-2400           0          0          0          0          0</pre>
<h2>※1/22追記</h2>
<p>SPAMをはじめとする「迷惑メール」発信元のIPアドレスをブラックリスト化したものを「RBL」と今まで呼んでたけど、どうやらメールに限らず、色々なプロトコル上で迷惑な振る舞いをするIPアドレスの一覧データベースのことを「DNSBL」と呼んで、「RBL」は「DNSBL」のイチ実装に過ぎず、かつ、登録商標を持つシステム名に過ぎない（※1）みたいなので、本投稿中の表記を「RBL」⇒「DNSBL」へと修正した。</p>
<p><em>※1  携帯用音楽プレーヤーのことをウォークマン（今ならiPodか？）、ゲームのことを「ファミコン」と呼ぶのと同じようなもんか？</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/21/spam/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/21/spam/" />
	</item>
		<item>
		<title>Apacheでリアルタイムアクセス統計情報を表示させる方法</title>
		<link>http://www.fanta-orange.com/blog/2009/01/20/mod_status_apache/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/20/mod_status_apache/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 10:41:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=232</guid>
		<description><![CDATA[あまり知られていないApacheの小技を１つ紹介する。
Apacheのリアルタイムなアクセス統計情報を表示させるために「mod_status」を利用する。（※おそらく大抵のconfigでデフォルトでこの記述があるはず）
 [...]]]></description>
			<content:encoded><![CDATA[<p>あまり知られていないApacheの小技を１つ紹介する。</p>
<p>Apacheのリアルタイムなアクセス統計情報を表示させるために「mod_status」を利用する。（※おそらく大抵のconfigでデフォルトでこの記述があるはず）<br />
まずは、mod_statusを読み込む必要があるため、httpd.confに以下を追加する。</p>
<div id="conf">LoadModule status_module modules/mod_status.so</div>
<p>続いて、ステータスレポート（リアルタイムの統計情報）を表示させたいコンテキスト内（サーバ設定ファイルorバーチャルホスト）で</p>
<blockquote>
<h3>Status を使用可能にする</h3>
<p>example.com ドメインからのブラウザのみに対して ステータスの報告を使用可能にするには 以下のコードを httpd.conf 設定ファイルに追加します</p>
<div id="conf">&lt;Location /server-status&gt;<br />
SetHandler server-status<br />
Order Deny,Allow<br />
Deny from all<br />
Allow from .example.com<br />
&lt;/Location&gt;</div>
</blockquote>
<p>引用元: <a href="http://httpd.apache.org/docs/2.2/ja/mod/mod_status.html">mod_status - Apache HTTP サーバ</a></p>
<p>上記マニュアルにある通り、以下の設定を記述する。</p>
<pre id="conf">
&lt;Location /server-status&gt;
    SetHandler server-status

    Order Deny,Allow
    Deny from all
    Allow from 許可するホスト または IPアドレスのリスト
&lt;/Location&gt;</pre>
<p>で、Apache再起動の後に、http://○○○/server-status/ へアクセスすると・・・</p>
<p><img src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/status1.jpg" alt="status1" title="status1" width="497" height="632" class="alignleft size-full wp-image-247" /></p>
<p>のような画面が表示される。<br />
表示される内容は以下の通り。（マニュアル抜粋）</p>
<div id="conf">
    *  リクエストを扱っているワーカーの数<br />
    * アイドル (訳注: リクエストを扱っていない) ワーカーの数<br />
    * サーバが起動もしくは再起動された時刻と動作している時間
</div>
<p>但し、このままでは表示出来る情報がそれほど多くないので、</p>
<div id="conf">
ExtendedStatus  On
</div>
<p>とすることで（この設定のコンテキストは「サーバ設定ファイル」のみ/バーチャルホスト内では使えない）</p>
<p><img src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/status3.jpg" alt="status3" title="status3" width="497" height="804" class="alignleft size-full wp-image-252" /></p>
<p>上記の通り「ExtendedStatus Off」の時と比べて</p>
<div id="conf">
    * 各ワーカーの状態、ワーカーが扱ったリクエストの数、 ワーカーが送った総バイト数<br />
    * 総アクセス数と総バイト数<br />
    * 平均の 1 秒あたりのリクエスト数、1 秒あたりの送られたバイト数、 リクエストあたりのバイト数<br />
    * 各ワーカーと Apache 全体で使用されている CPU の割合<br />
    * 現時点のホストと処理されているリクエスト
</div>
<p>上記情報が追加される。<br />
これらの情報があれば問題発生時に色々と切り分け出来るのだが、その切り分け方法については後日・・・（多分書かない）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/20/mod_status_apache/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/20/mod_status_apache/" />
	</item>
		<item>
		<title>アイツのUNIX環境にいたずらしよう！(1)</title>
		<link>http://www.fanta-orange.com/blog/2009/01/19/trick_unix/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/19/trick_unix/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 10:52:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[unix]]></category>

		<category><![CDATA[tips]]></category>

		<category><![CDATA[良い子は真似するな]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=216</guid>
		<description><![CDATA[※全て自己責任で実行してね。当方はいかなる責任も負いません。
ムカつくアイツが席を立ったならば、彼のunixコンソール上で以下のコマンドを実行だ！
$ bash -n
$
Ctrl-l あたりでとりあえず画面をキレイにし [...]]]></description>
			<content:encoded><![CDATA[<h6><span style="color: #ff9900;">※全て自己責任で実行してね。当方はいかなる責任も負いません。</span></h6>
<p>ムカつくアイツが席を立ったならば、彼のunixコンソール上で以下のコマンドを実行だ！</p>
<div id="conf">$ bash -n<br />
$</div>
<p>Ctrl-l あたりでとりあえず画面をキレイにしておくことも忘れるな。</p>
<p><span style="color: #ffffff;">情け</span></p>
<p><span style="color: #ffffff;">情け</span></p>
<p><span style="color: #ffffff;">情け</span></p>
<p><span style="color: #ffffff;">情け</span></p>
<h6>彼が本気で困っている事が窺える場合は耳元でそっと「Ctrl-D」と囁くべし。</h6>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/19/trick_unix/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/19/trick_unix/" />
	</item>
		<item>
		<title>suexecを再コンパイルすることなくCGI実行可能なトップディレクトリを変更する方法</title>
		<link>http://www.fanta-orange.com/blog/2009/01/19/emacs_suexec/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/19/emacs_suexec/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 09:42:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[apache]]></category>

		<category><![CDATA[unix]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=171</guid>
		<description><![CDATA[suexecの実行可能なディレクトリ制限って鬱陶しくない？
suexec使うからにはセキュリティ上必要な機能だっていうのはわかるんだけど、特にCentOSのhttpdパッケージに含まれるsuexecは「&#8211;wi [...]]]></description>
			<content:encoded><![CDATA[<p>suexecの実行可能なディレクトリ制限って鬱陶しくない？</p>
<p>suexec使うからにはセキュリティ上必要な機能だっていうのはわかるんだけど、特にCentOSのhttpdパッケージに含まれるsuexecは「<strong>&#8211;with-suexec-docroot=<span style="color: #ff0000;">/var/www</span></strong>」なんかでコンパイルしてあるもんだから、CentOSの流儀ではsuexecを使用する場合、DocumentRootを/var/www以下に設定しないといけない。</p>
<p>パッケージ如きにディレクトリ・レイアウトを強制されるのもムカつくのだが、じゃあ、最初からパッケージ使わずにソースからインストールすればいいじゃん？というのはごもっともなのだが、やっぱメンテナンス性を考えるとパッケージの利便性を選択してしまう。（昔は何かよくわからずにとりあえず最新を追いかけたかったからソースインストールばかりしてたけど）</p>
<p>だったら、せめてSRPMから再ビルドすれば？って話なのだが、もちょっとお手軽（？）に件の設定を変更したい。所詮、設定値なのだから。</p>
<p>ということで、ちょっと強引な方法を紹介する。</p>
<p>用意するものは</p>
<ul>
<li>suexec</li>
<li>emacs</li>
</ul>
<p>そう、</p>
<h2>emacsをバイナリエディタとして使用して、バイナリに含まれる値を変更してしまおう。</h2>
<p>具体的なやり方は以下の通りである。なお、もちろん動作については一切保証しないので自己責任で試してね。</p>
<p>まずは何か問題が発生してもすぐに切り戻せるようにsuexecをバックアップしよう。</p>
<div id="conf"><span style="color: #ff9900;"><em>※suexecのインストール場所の確認</em></span><br />
# rpm -ql httpd | grep suexec<br />
/usr/sbin/suexec</p>
<p><span style="color: #ff9900;"><em>※suexecのバックアップ</em></span><br />
# cd /usr/sbin<br />
# cp -p suexec suexec.bk</div>
<p>suexecの現在の設定値を確認する。</p>
<div id="conf"># ./suexec.bk -V<br />
-D AP_DOC_ROOT=&#8221;<span style="color: #ff0000;">/var/www</span>&#8221;<br />
-D AP_GID_MIN=100<br />
-D AP_HTTPD_USER=&#8221;apache&#8221;<br />
-D AP_LOG_EXEC=&#8221;/var/log/httpd/suexec.log&#8221;<br />
-D AP_SAFE_PATH=&#8221;/usr/local/bin:/usr/bin:/bin&#8221;<br />
-D AP_UID_MIN=500<br />
-D AP_USERDIR_SUFFIX=&#8221;public_html&#8221;<br />
#</div>
<p>そして、emacs登場。</p>
<div id="conf"><span style="color: #ff9900;"><em>※バックアップの方をいぢる</em></span><br />
# emacs suexec.bk</div>
<p><img class="alignleft size-full wp-image-182" title="image3" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image3.jpg" alt="image3" width="447" height="270" /></p>
<p>バイナリエディタとして使用するために「hexl-mode」としよう。</p>
<p>emacs上で「M-x hexl-mode」とする。</p>
<p><img class="alignleft size-full wp-image-189" title="image4" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image4.jpg" alt="image4" width="447" height="270" /></p>
<p>こんな感じ</p>
<p><img class="alignleft size-full wp-image-192" title="image5" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image5.jpg" alt="image5" width="447" height="270" /></p>
<p>CGI実行可能なトップディレクトリのパス（今回は /var/www）を検索する</p>
<p><img class="alignleft size-full wp-image-194" title="image6" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image6.jpg" alt="image6" width="447" height="270" /></p>
<p>カーソルを合わせて（画像の中の緑色の部分）</p>
<p><img class="alignleft size-full wp-image-196" title="image7" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image7.jpg" alt="image7" width="447" height="270" /></p>
<p>今回 /var/www を /home へ変更するとして、「/home」と入力</p>
<p><img class="alignleft size-full wp-image-199" title="image81" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image81.jpg" alt="image81" width="447" height="270" /></p>
<p>画像の例だと、/homewww となっているので、wwwの部分はnullにしよう。<br />
emacs上で「M-x hexl-insert-hex-string」として</p>
<p><img class="alignleft size-full wp-image-200" title="image9" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image9.jpg" alt="image9" width="447" height="270" /></p>
<p>nullにしたい各文字毎に「00」を入力、<br />
※ 画像中では www を null に変えたいので 「000000」と入力した</p>
<p><img class="alignleft size-full wp-image-202" title="image11" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image11.jpg" alt="image11" width="447" height="270" /></p>
<p>「/var/www」が「/home&#8230;」となったことを確認して保存（ C-c C-s ）すると下記のように聞かれるので「y」すると</p>
<p><img class="alignleft size-full wp-image-203" title="image12" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image12.jpg" alt="image12" width="447" height="270" /></p>
<p>conding systemを選べとか言われるので、バカヤロー、バイナリだこのやろーということで「no-conversion」と入力</p>
<p><img class="alignleft size-full wp-image-204" title="image13" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image13.jpg" alt="image13" width="447" height="270" /></p>
<p>無事保存出来たらemacsを終了しよう。</p>
<p><img class="alignleft size-full wp-image-206" title="image14" src="http://www.fanta-orange.com/blog/wp-content/uploads/2009/01/image14.jpg" alt="image14" width="447" height="270" /></p>
<p>さて、動作確認のために以下のコマンドを実行すると</p>
<div id="conf"># ./suexec.bk -V<br />
-D AP_DOC_ROOT=&#8221;<span style="color: #ff0000;">/home</span>&#8221;<br />
-D AP_GID_MIN=100<br />
-D AP_HTTPD_USER=&#8221;apache&#8221;<br />
-D AP_LOG_EXEC=&#8221;/var/log/httpd/suexec.log&#8221;<br />
-D AP_SAFE_PATH=&#8221;/usr/local/bin:/usr/bin:/bin&#8221;<br />
-D AP_UID_MIN=500<br />
-D AP_USERDIR_SUFFIX=&#8221;public_html&#8221;</div>
<p>あとは</p>
<div id="conf"># service httpd stop<br />
# mv suexec suexec.orig<br />
# mv suexec.bk suexec<br />
# service httpd start</div>
<p>上記のようにsuexecを差し替えて適当に動作確認して下さい。suexecのログもちゃんと確認してね！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/19/emacs_suexec/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/19/emacs_suexec/" />
	</item>
		<item>
		<title>ヒアドキュメント内でインデントしても</title>
		<link>http://www.fanta-orange.com/blog/2009/01/16/here_document_inden/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/16/here_document_inden/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 05:03:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[unix]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=136</guid>
		<description><![CDATA[シェルスクリプトの中でヒアドキュメントを使う場合、
#!/bin/sh

cat &#60;&#60; EOF
	hoge
	fuga
EOF
と書いて、これを実行すると
	hoge
	fuga
という出力となる。
ヒアドキ [...]]]></description>
			<content:encoded><![CDATA[<p>シェルスクリプトの中でヒアドキュメントを使う場合、</p>
<pre id="conf">#!/bin/sh

cat &lt;&lt; EOF
	hoge
	fuga
EOF</pre>
<p>と書いて、これを実行すると</p>
<pre id="conf">	hoge
	fuga</pre>
<p>という出力となる。</p>
<p>ヒアドキュメントでは識別文字（この例ではEOF）から識別文字までの間を「忠実に」出力するわけなので、この出力で正しい。</p>
<p>このため、実行結果には反映させたくなくとも、スクリプト内の「見やすさ」のためにヒアドキュメント内で空白文字を使うと、予期せぬ（この場合は忠実であることが人間にとって予期せぬ＝期待しないというだけだが）こととなる。</p>
<p>ヒアドキュメントとはそういうものだ、と長らく思っていたが、実は実に簡単な方法での解決方法があった。</p>
<p>以下の通り実行する。</p>
<pre id="conf">#!/bin/sh

cat &lt;&lt;<span style="color: #ff0000;">-</span> EOF
	hoge
	fuga
EOF</pre>
<p><span style="color: #ff0000;">赤色文字</span>の「<span style="color: #ff0000;">-</span>」を追加しただけだが、たったのこれだけで</p>
<pre id="conf">hoge
fuga</pre>
<p>前述の例のように先頭に空白文字は含まれず、このように都合のいい出力となる。<br />
sh(1)によると</p>
<div id="conf">
<pre><strong>Here Documents</strong>
       This  type  of  redirection  instructs the shell to read input from the
       current source until a line containing  only  word  (with  no  trailing
       blanks)	is seen.  All of the lines read up to that point are then used
       as the standard input for a command.

       The format of here-documents is:

	      &lt;&lt;[-]word
		      here-document
	      delimiter

       No parameter expansion, command substitution, arithmetic expansion,  or
       pathname expansion is performed on word.  If any characters in word are
       quoted, the delimiter is the result of quote removal on word,  and  the
       lines  in the here-document are not expanded.  If word is unquoted, all
       lines of the here-document are subjected to parameter  expansion,  com-
       mand  substitution,  and arithmetic expansion.  In the latter case, the
       character sequence \&lt;newline&gt; is ignored, and \ must be used  to  quote
       the characters \, $, and `.

       <span style="color: #ff0000;">If the redirection operator is &lt;&lt;-, then all leading tab characters are
       stripped from input lines and  the  line  containing  delimiter.   This
       allows  here-documents within shell scripts to be indented in a natural
       fashion.</span></pre>
</div>
<p><span style="color: #000000;">とあるようにリダイレクトが「<span style="color: #ff0000;">&lt;&lt;-</span>」である場合はそれぞれの行の行頭にあるタブは全て取り除かれる、とある。<br />
試してみたところ、タブが複数あっても全て取り除かれる、またタブではなく空白文字（スペース）ではNG（取り除かれない）であった。</span></p>
<p><span style="color: #000000;">以上の内容をBシェル触りだして10年ほど経つ今日初めて知った。（恥）<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/16/here_document_inden/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/16/here_document_inden/" />
	</item>
		<item>
		<title>PostfixのSMTP Proxy時の挙動（XFORWARD）</title>
		<link>http://www.fanta-orange.com/blog/2009/01/14/talk_to_oneself_postfix/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/14/talk_to_oneself_postfix/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 11:40:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[amavisd-new]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[unix]]></category>

		<category><![CDATA[独り言]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=98</guid>
		<description><![CDATA[smtpd_proxy_filterを設定することで勝手にXFORWARD コマンド送ってくれるの？
/etc/postfix/master.cfで
smtp      inet  n       -       n   [...]]]></description>
			<content:encoded><![CDATA[<p>smtpd_proxy_filterを設定することで勝手にXFORWARD コマンド送ってくれるの？</p>
<p>/etc/postfix/master.cfで</p>
<div id="conf">smtp      inet  n       -       n       -       -       smtpd<br />
-o smtpd_proxy_filter=127.0.0.1:10024<br />
-o smtpd_client_connection_count_limit=10</div>
<p>とかやって</p>
<p>smtp(25)-&gt;amavisd(10024)-&gt;smtp(10025)の時、postfixのlogを見るとsmtp(10025)でちゃんと元のSMTPクライアントのIPアドレス拾えてるんだけど。</p>
<p>smtp(25)でsmtp_send_xforward_command=yesにする必要ないのかな？</p>
<h2>1/15追記</h2>
<p>client(x.x.x.x)  -(1)-&gt; smtp(25) -(2)-&gt; amavisd(10024) -(3)&gt; smtp(10025) の時、</p>
<p>amavisdは(3)でsmtp(10025）に対して <strong>XFORWARD ADDR=x.x.x.x </strong>を送っていることがログから確認出来た。</p>
<p>またtcpdumpで(2)の通信をキャプった結果、以下の通りであった。</p>
<div id="conf">220 [127.0.0.1] ESMTP amavisd-new service ready<br />
EHLO (amavisd-newに設定してあるFQDN)<br />
250-[127.0.0.1]<br />
250-VRFY<br />
250-PIPELINING<br />
250-SIZE<br />
250-ENHANCEDSTATUSCODES<br />
250-8BITMIME<br />
250-DSN<br />
250 XFORWARD NAME ADDR PROTO HELO<br />
<span style="color: #ff0000;">XFORWARD NAME=(x.x.x.xの逆引きホスト名) ADDR=x.x.x.x HELO=(x.x.x.xの逆引きホスト名) PROTO=SMTP</span><br />
<span style="color: #0000ff;">250 2.5.0 Ok XFORWARD</span><br />
MAIL FROM: &lt;Fromアドレス&gt;<br />
250 2.1.0 Sender  &lt;Fromアドレス&gt; OK<br />
RCPT TO: &lt;Toアドレス&gt;<br />
250 2.1.5 Recipient &lt;Toアドレス&gt;  OK<br />
DATA<br />
354 End data with .</div>
<p>CentOS 5のパッケージ「amavisd-new-2.5.4-1.el5.rf（DAGリポジトリ）」に含まれる amavisd.conf-sample を見ると</p>
<div id="conf"># @mynetworks is an IP access list which determines if the original SMTP client<br />
# IP address belongs to our internal networks, i.e. mail is coming from inside.<br />
# It is much like the Postfix parameter &#8216;mynetworks&#8217; in semantics and similar<br />
# in syntax, and its value should normally match the Postfix counterpart.<br />
# It only affects the value of a macro %l (=sender-is-local),<br />
# and the loading of policy &#8216;MYNETS&#8217; if present (see below).<br />
<span style="color: #ff0000;"># Note that &#8216;-o smtp_send_xforward_command=yes&#8217; (or its lmtp counterpart)<br />
# must be enabled in the Postfix service that feeds amavisd, otherwise<br />
# client IP address is not available to amavisd-new.</span></div>
<p>という記述があったので、amavisd-newにfeedするPostfix serviceであるところのsmtp(25)の設定で &#8216;-o smtp_send_xforward_command=yes&#8217;  を有効にしないといけないのかな？と思ったのだけれど、どうやらこの記述は smtp(25)に設定したcontent_filter経由で、例えば content_filter=amavis-smtp:127.0.0.1:10024 とした時の<strong>SMTPクライアントである amavis-smtpに設定するもの</strong>であるようだ。</p>
<p>なるほど、確かにsmtpd_proxy_filterはその名の通り SMTPのProxyであるので、デフォルトでXFORWARDを付与してくれており（HTTP ProxyがProxy先にX-Forwarded-Forを付与するイメージ）、content_filterの場合は SMTP Proxyというわけではないので（結果、SMTP Proxyとして動作するにせよ）明示的に smtp_send_xforward_command=yes を設定する必要がある、と。</p>
<p>よくよくPostfixのマニュアルを読むと</p>
<div id="conf">
<dl>
<dt><strong>smtp_send_xforward_command (デフォルト: no)</strong></dt>
<dd>Postfix SMTP サーバの EHLO 応答で XFORWARD サポートが通知された場合に、 非標準的な XFORWARD コマンドを送ります。<br />
これにより、コンテンツフィルタにメールを投入するのに使われる <span style="color: #ff0000;">&#8220;smtp&#8221; 配送エージェントが</span>元のメールの名前やアドレス、プロトコル、HELO 名を コンテンツフィルタや下流でキューに入れる SMTP サーバに渡すことが できます。これは localhost[127.0.0.1] 等よりも便利なログを生成する ことができます。 </dd>
</dl>
</div>
<p>と書かれている。まさしくSMTPエージェント（クライアント）の設定項目であった。</p>
<p>smtpd_proxy_filterを設定したSMTPデーモン（サーバー）もProxyする際はまさにSMTPクライアントとして動作するのだけど、その場合はデフォルトでXFORWARDを付与してくれるのでsmtp_send_xforward_command=yesを設定する必要はない、というのが結論。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/14/talk_to_oneself_postfix/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/14/talk_to_oneself_postfix/" />
	</item>
		<item>
		<title>標準エラー出力へのリダイレクト</title>
		<link>http://www.fanta-orange.com/blog/2009/01/07/stderr/</link>
		<comments>http://www.fanta-orange.com/blog/2009/01/07/stderr/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 11:46:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[unix]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.fanta-orange.com/blog/?p=88</guid>
		<description><![CDATA[標準エラー出力を標準出力に出力（リダイレクト）する方法は次のような方法でよく用いられる。
echo "test" 2&#62;&#38;1
その逆で、標準出力を標準エラー出力に出力（リダイレクト）する方法はあまり知られてい [...]]]></description>
			<content:encoded><![CDATA[<p>標準エラー出力を標準出力に出力（リダイレクト）する方法は次のような方法でよく用いられる。</p>
<p><code>echo "test" 2&gt;&amp;1</code></p>
<p>その逆で、標準出力を標準エラー出力に出力（リダイレクト）する方法はあまり知られていないが、以下の通りとなる。</p>
<p><code>echo "test" &gt;&amp;2</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fanta-orange.com/blog/2009/01/07/stderr/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.fanta-orange.com/blog/2009/01/07/stderr/" />
	</item>
	</channel>
</rss>
