私はこのパーティーに非常に遅れていることに気づきましたが、AUTHステートメントについて私が行ったコメントはおそらく3行以上前であることに疑問を抱きました。
私は少し異なるアプローチを取りました。そこでは、最小限の仮定を行います(ログファイルの内容に関する限られた知識に基づいています)。
- IPアドレスごとに1人のユーザーがいます(ファイアウォールの背後にいる場合は正しくない可能性があります)
- すべてのAUTHエントリに対して、同じIPアドレスからの「適切な」USERエントリが1つだけ存在する必要があります。
- ログファイルにエントリがあるIPアドレスの並べ替えられたリストには、「不正な」要求が行われたIPアドレスに対する「AUTH」要求よりも多くの「USER」が表示されます。
これらの仮定が合理的/真実である場合、単純なbashスクリプトは、必要なものを正確に提供するという非常に優れた機能を果たします(これは、正しくログインしなかったユーザーのリストです。これは、要求していたものとは異なります。 )::
#!/bin/bash
# first, find all the "correct" IP addresses that did the login "right", and sort by IP address:
grep -F "AUTH TLS" $1 | awk '{print $1}' | sort > goodLogins
# now find all the lines in the log file with USER and sort by IP address
grep USER $1 | awk '{print $1}' | sort > userLogins
# now see if there were user logins that didn't correspond to a "good" login:
echo The following lines in the log file did not have a corresponding AUTH statement:
echo
sdiff goodLogins userLogins | grep "[<>]" | awk '{print $2 ".*USER"}' > badUsers
grep -f badUsers $1
echo -----
これにより、削除する可能性のある3つの一時ファイル(goodLogins、userLogins、badUsers)が残ることに注意してください。chmod u+x scrubLog
上記のコードを使用してテキストファイルを作成し、実行可能ファイル( )に設定し、ログファイルの名前をパラメーター( )として実行する方法を知っていることを前提としています./scrubLog proftpd.log.2
。
楽しみ!
PS-「正しくログインする」とはどういう意味かわかりませんが、適切な動作を強制する方法は他にもあります。たとえば、ポート21をブロックして、sftp(ポート22)要求のみが通過するようにしたり、匿名ftpをブロックしたりできます...しかし、それはあなたが求めていたものではありません。