2

そこで、FTPログを解析して、特定のユーザーが安全にログインしているかどうかを確認しようとしています。これまでのところ、ユーザーがログインした後、次の数行をプルするためにこれを持っています

cat proftpd.log.2 | grep -B 3 "USER $sillyvariable"

これはそれが作成するサンプル出力です

::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "AUTH TLS" 234 -
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "USER $sillyvariable" 331 -

これは私が望むものの完璧な例です。AUTHTLSメッセージが表示され、IPが一致します。ただし、これは常に当てはまるわけではありません。多くのユーザーが常にログインとログアウトを行っており、ほとんどの場合、出力が乱雑になっているためです。

USER $sillyvariable前の行の「AUTHTLS」を含む一致するIPをgrepして見つけて、安全にログインしていることを確認する方法はありますか?ユーザーをgrepしてから、逆方向にgrepして、ユーザーが発信した接続(IPが一致する)が安全であるかどうかを確認したいと言うことができると思います。私はこれに固執しているので、本当に助けを借りることができます。ありがとう!

4

2 に答える 2

1
$ grep -B3 'USER $sillyvariable' proftpd.log.2 |
  tac | awk 'NR==1 {IP=$1} $1==IP {print}' | tac
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "AUTH TLS" 234 -
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "USER $sillyvariable" 331 -

これはtac、grep の結果の行を逆にするために使用されます。次に、IP アドレスが行内のアドレスと一致するすべての行を探しますUSER。最後にtac、行を元の順序に戻すために再度実行します。

于 2013-01-24T17:20:15.560 に答える
0

私はこのパーティーに非常に遅れていることに気づきましたが、AUTHステートメントについて私が行ったコメントはおそらく3行以上前であることに疑問を抱きました。

私は少し異なるアプローチを取りました。そこでは、最小限の仮定を行います(ログファイルの内容に関する限られた知識に基づいています)。

  1. IPアドレスごとに1人のユーザーがいます(ファイアウォールの背後にいる場合は正しくない可能性があります)
  2. すべてのAUTHエントリに対して、同じIPアドレスからの「適切な」USERエントリが1つだけ存在する必要があります。
  3. ログファイルにエントリがある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をブロックしたりできます...しかし、それはあなたが求めていたものではありません。

于 2013-01-24T23:50:03.590 に答える