« 2008年9月 | トップページ | 2008年11月 »

2008.10.28

SPAM対策その2…GreyListing

んで、Greylisting 機能を sendmail に入れ込む。
sendmail の milter 機能を使って plug in 的な感じでgreylist機能を追加する milter-greylist を使う。
Fedora ではパッケージもあるけど Solaris でも使うのでソースからコンパイルすることにしよう…。

やることは、
・sedmail パッケージから libmilter のインストール
・milter-greylist のビルド
・greylist のシステムへの登録
・sendmail の greylist 対応
ってな手順かな…

■libmilterのインストール
milter-greylistをビルドする前に libmilter が必要なので sendmail パッケージから生成しておく
sendmailパッケージを展開して libmilter/ ディレクトリの下で
# Build install
とやって、milter 関連のヘッダやライブラリをインストールしておく

■milter-greylistのビルド
ダウンロードは、[ http://hcpnet.free.fr/milter-greylist/ ] から…。
いまのところの最新版のmilter-greylist-4.0.1.tgzをゲット

パッケージを展開してみるといまどきには珍しいほとんどマッタイラなディレクトリ構成
で、
# configure --help
でパラメータをチェックするけど、特になにも指定する必要はなさそうなので
# configure && make && make install
でビルド&インストール

■greylistのシステムへの登録
Fedora や Solaris の /etc/init.d/ の下に置くファイル用のサンプルがそれぞれ rc-redhat.sh , rc-solaris.sh としてパッケージに含まれてるんで、それをちょびっと変更して使用。
ただし、Solaris10ではSMFでsendmailを起動してるんで、greylistもそっちに登録してsendmaiのdependencyにgreylistも追加しておいてgreylistが起動されてからsendmailが起動されるように細工…。

で /var/milter-greylist のオーナーをsendmailの起動オーナーに変えておく(これ忘れがちかも)
# chown -R smmsp:smmsp /var/milter-greylist

んで、/etc/mail/greylist.conf を作成する。
このファイルはパッケージ内の greylist.conf , greylist2.conf や man greylist.conf である程度作れる。
そういえばパッケージ内の greylist.conf をそのまま使うとエラーを起こしてたっけ…
dumpfile "/var/milter-greylist/greylist.db" 755

dumpfile "/var/milter-greylist/greylist.db"
としておきました。…とりえず。
それと
racl greylist list "grey users" delay 30m autowhite 3d
racl whitelist default
の2行で、指定のユーザー宛のメールのみ greylist してあとはしない…っていう設定になっているのをそれら2行を消して
racl greylist default
として全ユーザー宛てのメールに対して greylist 機能をかけるようにしました。
それと
report delays
と指定して、遅延が発生したメールにだけ X-Greylist: ヘッダを付加するようにしました。
あとはデフォルトの delay や autowhite の数値を指定したりといったところですかね。

■sendmail の greylist対応
これは楽っすね。 sendmail.cf の変更のみでよいし…。
sendmail パッケージの cf/feature ディレクトリの下に greylist パッケージ内にあるmilter-greylist.m4というファイルをコピーしておきます。
んで、従来の sendmail.mc に以下の行を追加して cf/cf の下において make install-cf で sendmail.cf をセット

FEATURE(`milter-greylist')dnl

これで対応完了…つつがなく動作しました。

| | コメント (0) | トラックバック (0)

2008.10.24

MySQL のINSERTが出来なくなった…

mysqlのJDBCコネクタ5.1.7がリリースしたんで、アップデートしてみたらインサート時にこんなexceptionを吐くようになっちまった。
===
java.sql.SQLException: !Statement.GeneratedKeysNotRequested!
===

5.1.7 のCHANGESを見てみるとこんな記述が…
===
- Fixed BUG#34185 - Statement.getGeneratedKeys() does not raise exception when statement was not
created with Statement.RETURN_GENERATED_KEYS flags.
===

んで、自分のソース見てみたらコネクションからprepareStatement()を呼び出してStatementを生成するときにしっかりとフラグは指定してなかった…。
だもんで、prepareStatement(String sql, int autoGeneratedKeys) で必要なときにはStatement.RETURN_GENERATED_KEYSを指定するように修正…つつがなく動作しました。

これ、はまりそうですよねぇ~。バグが修正されたんで正常(?でもないけど見た目には…)に動いてたものが、動かなくなるっちゅうのは…。
いや~社内サーバーでよかった…。

| | コメント (0) | トラックバック (0)

2008.10.21

SPAM対策


外にさらしているサーバーへのSPAM…。いい加減にいやになってなんか対策を入れ込むことにした。
だって月曜日とかに出社すると未読メールが3000通とかだし…。

特定の相手からしかメールを受け取らないサーバー:

これは sendmail の tcp_wrapper 機能をONにする。
これならほとんど100%SPAMをブロックできます。
sendmail を tcp_wrapper 機能つきでコンパイルするのはちっとわかりづらい…

まず、以下の2行のみのテキストファイルを生成し、例えば myconfig.m4 として保存する
---
APPENDDEF(`confENVDEF',`-DTCPWRAPPERS')
APPENDDEF(`conf_sendmail_LIBS',`-lwrap')
---

んで、Build コマンド時に -f /home/hoge/work/myconfig.m4 とかいう感じでフルパスでこのファイルを指定すればOK
このファイルはパッケージ展開時の devtools/Site/site.config.m4 においておけばデフォルトで読み込まれるんだけど、アップデートされたときとかいちいち元ファイルをここにコピーしてから Build しないとならないのが面倒なので、Build 時にパラメータ指定することにしました。

あ、それと Fedora のときだけど、tcp_wrappersパッケージとは別にtcp_wrappers-develパッケージが必要になるんで注意が必要…

んで、インストールして /etc/hosts.deny は今までどおり
---
ALL: ALL
---
でとりあえず全拒否
/etc/hosts.allow で
---
sendmail: 127.0.0.1/255.255.255.255, \
192.168.0.0/255.255.0.0
---
みたいにして許可するIPを指定。
これでつつがなく動作しました。

で、問題は残りのサーバー。
まずは sendmail の機能のgreet-pauseを設定してみる。
これは外のサーバーから sendmail に接続しに来たときにわざと返答を指定秒数遅らせる。通常のメールサーバーはこの返答がくるまでだまってじっと待ってるわけ。
一方、SPAM送信ソフトは膨大な数のメールを短時間に送りたいもんだから相手の返答なんぞ待たずに次々としゃべりかけてくる。
でこの特性を利用して、返事をするまえに相手がしゃべり始めたら相手が出ていくまで相手の言ってることをすべて拒絶する…ってな機能らしい。

この機能は sendmail.cf に書けば有効になる。具体的には
sendmail.mc に
FEATURE(`greet_pause',`10000')dnl
と追加して、cf/cf/ の下で make install-cf とすればよいようだ。
上記の 10000 の指定は10秒間返事をしないということ。

で、これでそうだなぁ、20%くらいかな。いやもう少し低いかもしれないけど少しはSPAMをブロックできるし、正規のメールは100%大丈夫でした。

でもまぁ、これでもまだ多いんで、それに追加で greylisting を入れ込んでみた。
sendmail を使っているので milter-greylist を使ってみる…と、これ案外いいじゃないですか。100%ってわけには行かないけど、朝のメール受信が憂鬱になることは無くなった気がする。

greylist の入れ込みは…また、後日書いておこうっと。

| | コメント (0) | トラックバック (0)

« 2008年9月 | トップページ | 2008年11月 »