2

この問題は、pop-before-smtp / Postfix / Dovecot のコンテキストで発生しますが、Perl の文字列解析を知っていれば、自分で答えを見つけることができます。しかし、私はとても迷っており、正確な質問さえ知りません。ウィット:

私たちは Postfix を長い間使用しており、それに夢中になっています。今、私たちは「現代に移行」し、人々が私たちのネットワークの外にいても、私たちの SMTP サーバーから電子メールを送信できるようにする必要があります。それで、この仕事を任されて、pop-before-smtp を見つけました。

ここで見つけることができます。

だから、私はそれをすべて構成しましたが、テストに失敗しました。こちらの指示に従ってトラブルシューティングを行ったところ、ログを解析しようとしている Perl が間違っているように見えることがわかりました。Dovecot を IMAP / POP サーバーとして使用しており、構成ファイルには 3 つの選択肢があります。以下は、3 つのセットを示す構成ファイルからの抜粋です。

# For Dovecot POP3/IMAP when using syslog.
#$pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
#$out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';

# For Dovecot POP3/IMAP when it does its own logging.
##$logtime_pat = '(\d\d\d\d-\d+-\d+ \d+:\d+:\d+)';
#$pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
#$out_pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Disconnected.*? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';

# For older Dovecot POP3/IMAP when it does its own logging.
#$pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Login: \S+ \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';
#$out_pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Disconnected.*? \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';

該当するもののコメントを外すことになっていますが、どれも機能しません。

「pat」はログインのパターンであり、out-pat はログアウトまたは切断のパターンであると推測します。

実際のログ レコード形式は、これら 3 つのいずれとも明らかに異なりますが、ほぼ同じです。ペアの例を次に示します。

Mar 11 17:53:55 imap-login: Info: Login: user=<username>, method=PLAIN, rip=208.54.4.205, lip=192.168.1.1, TLS

Mar 11 17:59:10 IMAP(username): Info: Disconnected: Logged out bytes=352/43743

POP を使用すると、'imap-login' が 'pop-login' に置き換えられ、ログアウトすると、'POP' が 'IMAP' に置き換えられます。

インポートおよびデータは次のとおりです。タイムスタンプ、ユーザー名、およびログイン時の「リモート」IP (「rip」)。

十分な時間があれば、うまくいくものを組み立てることができるかもしれませんが、実際にはPerlを知らないので、これはちょっと難しいです. Dovecot パッケージで使用されるログ出力を解析するための新しいルールを作成するのを手伝ってください。

4

1 に答える 1

1

(:?..Perl正規表現の一部は、クラスタリングを要求しますが、キャプチャは要求しません。これにより、キャプチャグループ番号に影響を与えることなく、グループ全体をグループとして一致または無視できます。すべての行は、許可するIPである1つのフィールドのみをキャプチャします。(これは少し奇妙なことですが、ユーザー名とIPの両方を期待していたかもしれませんが、長期的にはこれは簡単かもしれません。)

# For Dovecot POP3/IMAP when using syslog.
$pat = '^[LOGTIME] \S+ (?:imap|pop3)-login: Info: ' .
    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
# not necessary? see comment header START OF PATTERNS
# $out_pat = '^[LOGTIME] \S+ (?:IMAP|POP3)\(\S+\): Info: ' .
#    'Disconnected.*';

dovecot入力に含まれていなかったため、ピースを削除しました。Info:両方の行にを追加しました。を変更して、元のバージョンからではなく、$out_pat使用するようにしました。(ユーザー名にスペースがある場合、の使用は中断されます。この仮定はファイルの他の場所で行われたため、問題ないことを願っています。)IMAP(username)imap-login\S+

ログアウトライン用にキャプチャするIPアドレスがなくなったため、定義しない$out_patことをお勧めします。START OF PATTERNSコメントブロックには次のフレーズが含まれます。選択したエントリにもが含まれている場合は$out_pat、その変数のコメントも解除する必要があります。これにより、次のことが可能になります。サーバーにまだ接続しているユーザーを追跡するため(たとえば、Thunderbirdは開いているIMAP接続をキャッシュします)。

私はこれをテストしていませんが、私はそれについて良い気持ちを持っています。

于 2012-03-12T02:37:52.920 に答える