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 $*
|