web-dev-qa-db-ja.com

成功したかどうかにかかわらず、ログイン試行でアラートを受信する方法は?

私のLinuxマシンは外部ログインから合理的に保護されていると思います。しかし、私は軽度の妄想であるため、サーバーへのログイン試行が成功したかどうかにかかわらず、サーバーへのログイン試行があったときにアラートを受け取りたいと思います。

サイトをスキャンすると、これを行うための統一的な方法が見つかりません。私が知る限り、失敗した試行については logcheckが推奨されています 、成功した試行については sshrcまたは(おそらくそれ以上)pam_execメソッド です。私はツー・ストーン・イン・ワン・スローの方法が好きで、これらの方法のいずれかを両方を行う方法があるかどうかあなたのプロの誰かが知っているのだろうか?特にPAMは、物事を行うのに賢い場所のようです。なぜなら、結局のところ、それは私の知る限り、ubuntuマシンの中央認証システムだからです。

何かアドバイス?

5
Nick The Swede

cronを愚かな小さなスクリプトで使用して、10分ごとに/var/log/auth.logをチェックできます。正しく設定すると、cronはどこでも好きな場所に出力をメールで送信するので、実行するスクリプトが必要です。

#!/bin/bash
cat /var/log/auth.log | Perl -MDate::Parse -ne '
  print if /login|ssh/ && /^(\S+\s+\d+\s+\d+:\d+:\d+)\s/ && str2time($1) > time-600'

これは、 F。Hauri による SOに関するこの回答 に基づいています。

loginまたはsshが含まれるアイテムを探しているだけです。さらに追加するか、一部を除外することもできます。しかし、私のシステムでは、次のように生成されます。

Aug 29 10:19:50 bert Sudo:      oli : TTY=pts/10 ; PWD=/home/oli ; USER=root ; COMMAND=/bin/login
Aug 29 10:19:52 bert login[15544]: pam_unix(login:session): session opened for user oli by oli(uid=0)
Aug 29 10:19:54 bert login[15544]: pam_unix(login:session): session closed for user oli
Aug 29 10:20:11 bert sshd[15614]: Accepted publickey for oli from ::1 port 41663 ssh2: RSA XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Aug 29 10:20:11 bert sshd[15614]: pam_unix(sshd:session): session opened for user oli by (uid=0)

そのスクリプトを/usr/local/sbin/checkauth(およびchmod u+x it)のような名前で保存すると、Sudo crontab -eでルートcrontab行を追加できます。

*/10 * * * * /usr/local/sbin/checkauth

Cronファイルの先頭にもMAILTO="[email protected]"行を貼り付けてください(メールサーバーがインストールされている場合-postfixがインストールされていない場合)、出力のメールを受け取りますiff出力があります。

3
Oli