Dovecot で pop-before-smtp.pl( http://popbsmtp.sourceforge.net/にある) を使いたい場合は、 POP3 と IMAP ログインが成功したかの判断に、以下の正規表現を使うことができます。
$pat = '^(... .. ..:..:..) \S+ (?:pop3|imap)-login: Login: .+ \[(\d+\.\d+\.\d+\.\d+)\]'; |
これは IPv4 でしか動かないので、誰か修正してください。
Fedora で私は以下のようにして動かしています: <drak at navel.gr>
$pat = '(?:pop3|imap)-login: (... .. ..:..:..) Info: Login: \S+ \[(\d+\.\d+\.\d+\.\d+)\]'; |
バージョン 1.0 Alpha 4 では、以下のようにすれば動きます:
$pat = '^(... .. ..:..:..) \S+ (?:dovecot: )?(?:imap|pop3)-login: Login: \S+ \S+ rip=(\d+\.\d+\.\d+\.\d+)' |
DRAC( http://mail.cc.umanitoba.ca/drac/) 向けの Dovecot のプラグインが http://www.dovecot.org/patches/drac.c にあります。 Drac はデーモンとは別に動作し、 POP3 や IMAP 経由での認証が成功した IP のを BDB データベースで保持し、 30 分で有効期限が切れます。 なので、それをインストールすることは、 POP3/IMAP サーバと、 SMTP デーモン (postfix/sendmail/qmail) の両方をサポートするために準備する必要があります。 Drac は小さな C でできたプログラムで、 BDB のデータベースへのアクセスは 効率的なので、とても良く動作します。
drac.c ファイルは、先頭のコメントとして、どのようにコンパイルするのか 指示があります。 指示に従うことで、 imap や pop3 ロード可能なモジュールの dovecot のライブラリのディレクトリに drac.so ファイルをインストール できます。 dovecot で新しい drac プラグインを可能にするため、 dovecot.conf に 以下のような行を設定する必要があります。 'protocol imap' と別の下にある 'protocol imap' の別々のセクションが あります;両方とも有効にすることを確認してください。
# Support for dynamically loadable modules. mail_use_modules = yes # default is "no" mail_modules = /usr/lib/dovecot/imap # set for your installation |
パーミッションの注意: drac.so ファイルがあるディレクトリは、一般のユーザが読み込むことが できなければなりません。 dovecot のエラーログをチェックが助けになります。
有利な点:ログを読むための数メガバイトの perl のデーモンが必要ありません。
不利な点:それぞれのログインのため、このスクリプトを実行するために、 時間と領域が必要です。
1)SQL テーブルからリレーの認可がある IP を調べるように MTA に知らせます
2)定期的にテーブルから古い IP を削除してください (例えば cron job を使ったり、以下のスクリプトを編集します)
3)ログインの成功を SQL テーブルに更新するよう dovecot に 知らせます
Dovecot 1.0(と、多分 0.99 でも) では、以下のスクリプトを使って SQL テーブルの更新ができます。
#!/bin/sh # This script created 2005-08-21 by Lorens Kockum # Released into the Public Domain # Action: when called by dovecot 1.0 as described below, updates an SQL table # with logged-in IP and current time, and then executes the relevant process. # Output: normally nothing # dovecot.conf should be modified with these lines (where # /usr/lib/dovecot/popbsmtp.sh represents this script): # protocol pop3 { # mail_executable = /usr/lib/dovecot/popbsmtp.sh /usr/lib/dovecot/pop3 # } # protocol imap { # mail_executable = /usr/lib/dovecot/popbsmtp.sh /usr/lib/dovecot/imap # } # The HOME= lines are necessary to find $HOME/.my.cnf containing login info, # because mail_executable is executed as root, but without a home directory. # Of course this script must not be writable by anyone else than root. ( # drop out IPs from local networks that can relay anyway IP=`echo $IP | grep -v '^192\.168\.'` if [ -n "$IP" ] then export HOME=/root/ echo "replace into popbsmtp VALUES('$IP',now());" | mysql mail export HOME=/ fi ) >> /var/log/dovecot3 2>&1 exec $* |