2012-03-13 3 views
1

私は、ログファイルから情報を取り出し、特定の情報が見つかるたびに通知を出さなければならない作業に取り組んでいます。たとえば、私が取り組んでいる正確な問題は、/var/log/auth.log(FreeBSDシステム)を調べ、無効なSSHログイン試行を引っ張って、私と他の人に電子メールを送信するPythonスクリプトを作成する必要があることです。いつでも犯罪者がいる。ログファイルから情報を引き出し、pythonを使って通知メールを送信する

私は数日間ここを見てきましたが、ごくわずかな成功しか得ていませんでした。

答えて

0

cronジョブを数分おきに実行して、そのファイルの変更を確認できます。変更がある場合は、smtplibなどを使用して電子メールで通知します。 sendgridでのsmtplibの使用例を次に示します。http://docs.sendgrid.com/documentation/get-started/integrate/examples/python-email-example-using-smtp/

ファイルが変更されたかどうかを確認するにはどうすればよいですか?

  1. あなたは、ファイルのlast modification timeをチェックし、それは前のスクリプトの実行に見えたとして、ファイルのコピーを保持し、現在の内容
  2. にそれを比較します。

これは単なる一般的な考えであり、Googleではすべての「成分」を見つけることができるので、あなた自身でグーグルで実装できるはずです。

これが役に立ちます。

+0

私の答えと同じように、オペレーティングシステムのファイル監視サービスはおそらく、ファイルが変更されたかどうかを確認するためのより良い方法です。 'mtime'が変更されたかどうかを確認するためにファイルを繰り返しポーリングするのではなく、ファイルが書き込まれたときにオペレーティングシステムに通知するように頼むだけです。 (Linuxでは 'inotify'を使用してください。) –

+0

FreeBSDでは、devel/py-kqueueポート経由でkqueue(2)を使用できます。 –

1

実際には、fail2banのようなデーモンが、侵入試行のログファイルを調べるように特別に設計されていると思います。など、悪用のため 求めて、あまりにも多くのパスワードの失敗 - fail2ban wiki:

fail2banのスキャンから

は、ファイル(は/ var/log/apacheの/ error_logを)と禁止IPアドレス 悪質な兆しを見せログ一般的に、Fail2Banはファイアウォール を更新して、指定された時間、IPアドレスを拒否するようにしました。 任意の他のアクション(、または CD-ROMトレイを排出するなど)を設定することもできます。すぐに使用可能 Fail2Banには、さまざまなサービス(Apache、Curier、ssh、 など)用のフィルタが付属しています。

これはあなたが自分で焼いた解決策よりも優れています。

あなた自身をロールバックしたいなかった場合、ファイルの定期的なチェックを実装する素朴な方法は、それを5分ごとに読んで、それが変わったのかどうかを確認するために、単純である、と述べた

よりスマートな方法は、オペレーティングシステムのファイル監視サービスを使用することです。これは、ファイルシステムドライバにフックし、ファイルが変更されるとすぐに通知します。これにより、コードのCPU時間が短縮され、ファイルが変更されると即座に応答するという2つの利点があります。

Linuxでは、サービスはinotifyと呼ばれます。 BSDとWindowsには同等の機能があります。cronジョブのための目安として

+0

注:あなたの実際の問題(SSHログファイルの監視)を解決する解決策だと思っていますが、GabiとEthanの答えはPythonで独自のカスタムソリューションを実際に動かしたい場合に役立ちます。 –

0

with open('/var/log/auth.log') as auth: 
    for line in auth: 
     if 'blahblah' in line: 
      # send email 

あなたは詳細をメールするためにemail moduleをチェックアウトすることをお勧めします。既にスキャンされたものを追跡する方法が必要なので、重複した電子メールを送信することはありません。

関連する問題