サーバーに接続し、電話やラップトップなどのリモートシステムからコマンドを実行するために、opensshを使用してubuntuサーバーを構成しました。問題は...おそらく私だけではない。
サーバーに対して行われたすべてのログイン試行を知る方法はありますか?
Ubuntuサーバーでは、ファイル/var/log/auth.log
で誰がいつどこからログインしたかを確認できます。そこで、次のようなエントリを見つけます。
May 1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May 1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May 1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)
Fedora/CentOS/RHELなどのRed Hatベースのディストリビューションでは、ファイル内でログインしているユーザーを確認できます/var/log/secure
。
さらに詳しい情報が必要な場合は、 SSHアクセスの試行をログに記録し、サーバーでSSHユーザーが実行することを追跡するにはどうすればよいですか 。
Ubuntuでは、SSH経由でログインし、Linux tailコマンドを使用して、/var/log/auth.log
ファイルの最後のx行を表示できます。 SSH経由でログインしている場合は、次のコマンドを使用して、SSHログの最後の100行を表示します。
tail /var/log/auth.log -n 100
またはもっとすっきり
tail -100 /var/log/auth.log | grep 'sshd'
Ubuntuのデフォルト設定では、sshログインを/var/log/auth
ファイルに記録しないことに注意してください。これはINFO
ロギングレベルです。
ログファイルにログイン試行を含める場合は、/etc/ssh/sshd_config
ファイルを編集し(rootとして、またはSudoを使用)、LogLevel
をINFO
から変更する必要があります。 VERBOSE
に。
その後、sshdデーモンを再起動します
Sudo service rsyslog restart
その後、sshログイン試行は/var/log/auth.log
ファイルに記録されます。
私の推奨はauditdを使用することです。これはlinuxカーネルの監査サブシステムを使用したロギングであり、私の意見では、深刻な場合にそれを行う適切な方法です。また、質問{セキュリティ関連}の性質を考えると、[〜#〜] pam [〜#〜]も使用する必要があります。 auditdと[〜#〜] pam [〜#〜]がインストールされているだけのデフォルトレベルでは、自動的にすべての成功したSSH試行と失敗したSSH試行をaudit.logファイルに記録します。したがって、実際には何も設定する必要はありません。auditdと[〜#〜] pam [〜#〜]インストールされています。私はSLESのこの最初の手を知っています。そして、RHELと他のenterpriseバージョンのLinuxも同様に動作することに賭けます。
http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html
auditdによって生成された未加工の監査ログ内で、aureport
のようなものを使用して、auditdmanページ、独自のテキストパーサーを作成、またはVIを使用してキーワードを検索します。
これは、私の/var/log/audit/audit.log
ファイルを除いて、私がLinuxサーバーにsshしているところです。
node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
date --date @1480622612.317
のようなものを介して変換する必要があります。これはThu Dec 1 15:03:32 EST 2016
になり、サーバーにsshしたときです。res=failed
は、これらのIPアドレスとホスト名を調査して、どのシステムがどのユーザー名で接続しようとしているかを確認する場合です。そして、明らかに成功したsshは、システムで何が起こっているかを理解しようとします。たとえば、hostname = bobscomputerとip address = 192.168.5.5で毎日同じ机に座っている同僚のbobです。たとえば、昨日午前2時にIPアドレス10.10.5.6からの彼のユーザー名でsshの試みが成功した場合、bobに相談して調査することをお勧めします。他の誰かによるハッキングの試みの可能性は?そしてその直後に、ボブのアカウントから監査ログにroot化しようとするsuの試みがありますか?
res=failed
とauid=0
とacct=root
が繰り返し表示される場合、それは誰かがボックスにrootアカウントにSSHでログインしようとしていることであり、そのIPアドレスで/etc/hosts.deny
を変更すると、 SSHD。
私はこれが古いことを知っていますが、成功および失敗したSSH接続/試行を監視するために何かを書きました。 sshguardを使用している場合はIPも禁止されます。ソフトウェアはPythonで書かれています。誰かがssh経由で正常に接続したとき、誰かがsshのパスワードを間違えたとき、または多くの試行が失敗したために誰かが禁止されたときに、メールで通知されます。うまくいけば、これが将来この問題を検索して私のコードを見つける誰かを助けるでしょう!
https://github.com/amboxer21/SSHMonitor
pythonスクリプトの場合、プロセスを監視するbashスクリプトを作成しました。ルートcronタスクを介して毎分実行されているかどうかを確認します。実行されていない場合は、別のプロセスを開始します。 root cronタスクによって毎分。
SSHコマンドのログ記録で私が遭遇した中で最高のものは、このツールでrootshを実行することです。このツールを使用すると、管理者は、あらゆるレベルのログからすべてのコマンドを取得できます。
UbuntuとCentOS/RHELにROOTSHをインストールして構成するスクリプトを作成しました
githubからダウンロードはこちらリンクです
https://Gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh
chmod +x setup_rootssh.sh ; Sudo ./setup_rootssh.sh