色々なしがらみでqmailをいまだに使ってたりすると色々パッチをあてて使うわけなんですが、tcpserver腐ってます。いや、ほんとにダメダメです。そのままでは実用になりません(ってqmail全般に言えることですが)。
qmailはやめてtcpserverはinetdを使えばいいだけの話なんですが、そうも言ってられない事情をお持ちの方へのパッチです。
tcpserverはFreeBSDのinetdみたいにIPアドレス毎の接続数制限には対応していません。が、今どきそんなんで稼働させてるとpop3/pop3sに大量のコネクションを張られて辞書攻撃とか仕掛けられてしまいます。
で、tcpserver perIP Limiting patchとかで検索すると色々ヒットするのですが、これがまた曲者でバグってるパッチがほとんどです。
http://qmail.jms1.net/ucspi-tcp/tcpserver-limits-2007-12-22.patch
これはよく見かけるパッチですが、コネクションがあるとforkした後に接続IPアドレスを調べてリミットに達していたらその旨メッセージを出すとともに1秒sleepして終了します。
まあ、古き良き時代のパッチですね。昔はこんなパッチでも有効だったのですね。sleepとかありえんし。
http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz
これはtcpserverをSSL対応にするパッチでこれもよく見かけます。
しかも -C オプションが追加されていて一見これでIPアドレス毎の制限ができそうです。manにもはっきりそう書いてありますし。
けど、バグってます。思いっきり。
-Cで制限するIPを評価する順番が間違っていて -C 10 でIP毎に10接続に制限したつもりになっても実は無制限になっています。あと、この機能を使うとポインタを初期化し忘れてらっしゃるのでsegfaultで落ちます。。。orz
で、それを修正したパッチはこちら。
ucspi-tcp-ssl-20130828.patch
-C 10とかでIP毎に接続数を制限できます。もちろんSSLも使えます。