web-dev-qa-db-ja.com

ログインに失敗したときにメールを送信しますか?

ログインに失敗したときにUbuntuが私にメールを送信するように設定することが可能かどうか疑問に思っていましたか?もちろん、試行が行われたときにコンピューターがインターネットに接続されていない場合は、試行して失敗し、ログインを通知するのではなく、再度インターネットに接続したらメールを送信する必要があります。電子メールには、失敗したログイン試行の日付と時刻(day/month/year - hour:minute:second)が含まれている必要があります(ただし、オプションで-言い換えれば、これを行う方法を説明しない回答は、大きい可能性があるため、受け入れられます)尋ねる)実行されたアクション。したがって、たとえば、私がそれを持っている場合 5分間または他の人をロックアウトするためのセットアップ それから、そのアクションを実行したという事実を警告する必要があります。 GNOME 3.18でUbuntu GNOME 15.10を実行していますが、これは可能ですか?

3
user364819

ログへのアクセス

Root権限を持つユーザーは、コマンドlastbを使用して、コンピューターでのすべての失敗したログイン試行を確認できます。また、1週間の期間で失敗したログイン試行を記録するより詳細なログファイルは/var/log/auth.log(ルート権限は不要)で、不正なログイン試行は次のようにリストされます。

MONTH  DAY HH:MM:SS MACHINE lightdm: pam_unix(lightdm:auth): authentication failure; logname= uid=0 euid=0 tty=:0 ruser= rhost=  user=USER

脚本

これらのログファイルを読み取るスクリプトを作成し、新しい不正なログイン試行がログに記録されるたびに電子メールで送信できます。ここに私の見解があります:

まず、誰かがログインして失敗しようとするたびにスクリプトの実行をトリガーしましょう。 PAMは/var/log/auth.logを保持するため、それを使用してスクリプトをトリガーできます。 /etc/pam.d/common-authを開きます:

Sudo vim /etc/pam.d/common-auth

次に、行の直前:

auth    requisite                       pam_deny.so

これを追加:

auth [default=ignore] pam_exec.so seteuid /usr/bin/report_badlogin

上記の行で、success=1の出現をsuccess=2に変更し、もしあれば、success=2success=3に変更します。

次に、指定されたスクリプトを作成します。

Sudo vim /usr/bin/report_badlogin

レポートメールを送信するコマンドを記述します。

#! /bin/sh
# report_badlogin

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "[email protected]"; then
  cp -f /var/log/auth.log /var/log/auth.log.old
  chown YOURUSERNAME /var/log/auth.log.old
fi

exit 0

簡単な説明:最初のgrepは、最後に保存したコピー(.old)からログファイルを差し引くことにより、ログファイルの変更を取得します。 2番目のgrepは、重要な行のみを取得します。この行は、ログインが試行された日付、時刻、およびユーザーに通知します。 mailは、件名悪いログイン試行通知を含む電子メールとしてその1行を送信します。電子メールが正常に送信された場合、auth.log.oldは更新されますが、スクリプトがルートとして実行されているため、ファイルの所有権をユーザーに戻します。

保存して閉じます(VIMコマンド:wq)。

スクリプトに実行許可があることを確認します。

Sudo chmod a+x /usr/bin/report_badlogin

auth.logの最初のコピーを手動で作成します。

cp /var/log/auth.log{,.old}

インターネット接続シナリオなしの取引

潜在的な侵入者は、通知メールを防ぐためにパスワードを推測しようとしている間、インターネットからPCを切断することができますが、たとえそうだとしても、不正なログイン試行はすべてauth.logに記録されます。

できるだけ早く通知を受け取るためにできることは、インターネットに接続されたマシンでのログインが成功すると、わずかに異なるスクリプトをトリガーすることです。それを行うには、ログインするたびに実行される~/.bashrcスクリプトを使用します。

vim ~/.bashrc

これらの行をファイルの最後に追加します。

# Pending bad login attempts notification
sh /usr/bin/report_pending

保存して終了します。次に、そのスクリプトを作成します。

Sudo vim /usr/bin/report_pending

そして次のように書きます:

#! /bin/sh
# report_pending

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure'; then
    if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "[email protected]"; then
        cp -f /var/log/auth.log /var/log/auth.log.old
    fi
fi

exit 0

簡単な説明:このスクリプトは最初とほぼ同じですが、ログイン時に常に実行されるため、最初に保留中のレポートの存在を確認します。そうでない場合、ログインするたびに空のメールが届きます。このスクリプトはルート権限で実行されていないため、更新後にauth.log.old所有権を変更する必要はありません。

次に、スクリプトに実行許可を追加します。

Sudo chmod a+x /usr/bin/report_pending

SMTP設定を構成する

電子メールを送信するには、mailutilsおよびsSMTPをインストールします。

Sudo apt-get install mailutils ssmtp

構成sSMTP

Sudo vim /etc/ssmtp/ssmtp.conf

次のように編集します。

[email protected]    
mailhub=smtp.gmail.com:587    
AuthUser=yoursmtpemail    
AuthPass=PASSWORD    
UseSTARTTLS=YES    
[email protected]    
FromLineOverride=YES

GMailを使用していない場合は、プロバイダーに変更してください。

ご覧のとおり、このメールのパスワードをプレーンテキストファイルに保存しているため、個人のメールを使用せずに、SMTPサーバー([email protected])としてのみ使用するメールを作成することをお勧めします(rootのみがアクセスできます)このファイルですが、とにかく良い方法ではありませんが、他の方法でそれを行う方法はわかりませんが...)。

GMailの場合(他のプロバイダーで試したことはありません)、まだ許可する必要があります安全性の低いアプリへのアクセスecho "Test mail" | mail -s "Testing" [email protected]を実行しようとすると、GMailのセキュリティレベルを満たしていないアプリケーションでそのメールへのアクセスが拒否されたことを通知する[email protected]でメールを受信する必要があります。 詳細安全性の低いアプリケーションへのアクセスの許可については、それをクリックすると、GMailは最終的に許可するオプションを提示します。

できた!

6
Rodrigo Martins

これはおそらくやり過ぎですが、 ConfigServer Firewall (CSF)とLFDは、マシンの監視と保護に役立ちます。

ログイン試行の失敗に関する通知の送信は、多くの機能の1つにすぎません。これはそのまま使用でき、通知メールをルートに配信します。

別のマシンでメールを受信するには、メールを送信できるプログラムが必要です。 mail-transport-agentパッケージをインストールするだけで十分かもしれませんが、通常、exim4サーバーをインストールします。

CSFはUbuntuパッケージとして提供されていないため、 インストール手順 に従う必要があります。

cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
1
joeytwiddle