antibadmailでは 接続クライアントに応じた挙動を tcpserver のセットする 環境変数によって変更している。デフォルトの tcpserver では IPアドレスで書いたルールがマッチすると、ホスト名で書いたルールは 検索しない。基本的に接続自体を拒否する場合はそれでいいのだが、 antibadmailのようにいったん繋がせてその後で判定、のような 場合は、大きなIPアドレスレンジで大まかなルールを書いておき、 逆引き(PTRレコード)ホスト名マッチで詳細ルールを書く、 というほうが都合がよいのでIPアドレス/ホスト名両方のルールを 検索するようにtcpserver を 修正している。
さて実際のところ、antibadmailと同時に配布しているルールデータベースでも それを前提として hotmail/gmail/yahoo などのメイルドメインを 区別しているので、やはり修正版tcpserverが必須である。これまでは 推奨、という位置づけだったが、gmailなんかが拒否されたらびっくりする であろうことから、antibadmailでは修正版tcpserverを必須という 位置づけにしてドキュメントにも明記することにした。
ところでこれまでipv6化のベースとしていたfefeパッチのバージョン14では FreeBSDでの逆引きができなくなっているようだ(NetBSDでは問題ないので気付か なかった)。ちょっと追いかけたが手に余るのと、別にBSDのパッチを送っても 無視されちゃうようなfefeパッチを追いかける気もないのでバージョン10パッチ に落とした上で、独自のバグフィクスを加えたりしたものを新しく paranoid+freebsd ブランチとした。fefe版はtcprulesに文法間違いの ルールファイルを食わせると無限ループになるバグがあるけど それも修正している。
couriertcpdとかに乗り換えた方がいいのかな?
と、おもったら、courierはいつのまにかpcre依存になっている。 configure で --without-pcre もできない。pcreみたいに大きくて どんどん機能が増えていくライブラリはいまいち信頼できんよなあ、と 以前から思ってて……。 あやっぱり、今「pcre 脆弱性」で検索したらなんか出てきたぞ。2007年か。 もう大丈夫なんだろうが、 いちおうソース見るか。うーん、grepで、strcpy とか sprintf 探したら ボロボロ出てくるけどだいじょぶなのコレ? antibadmailでしばらく正規表現を使ってなかったのは、大きなparserを 組み込むのが恐かったから。で、使うようになったのは、各種OSのlibcには 標準正規表現ライブラリがあるということに遅蒔ながら気付いたからで、 万一標準正規表現ライブラリに脆弱性があったとしても、 OS付属のものなら諦めが付くという判断からである。もっとも 正規表現は使うときにミスを生じさせやすいので、クリティカルなツールでの 使用は実はあまりよくないと思ってはいる。
お、makeできた。tcpd/couriertcpd にはpcre混ざってなかった。 あ、よかったよかった。ucspi-tcp ipv6 がFreeBSDで動かなくなったり、 SMTPセッションIPv6での逆引きでの判定が必要になってきたら couriertcpd に移行すればよさそうだ。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb