SSHアクセス試行のロギング


60

私はそれに接続し、電話やラップトップのようなリモートシステムからコマンドを実行するためにopensshでubuntuサーバーを設定しました。問題は...おそらく私だけではないでしょう。

サーバーに対して行われたすべてのログイン試行を知る方法はありますか?


非標準ポートでsshdを実行することも検討する必要があります。また、1つのIPが1分間にX回新しいssh接続を試行する場合、iptablesを設定して新しい接続試行を拒否することができます。
ivanivan

私にとっての問題は、私が聞いたことがなかった何かfail2banのが、sshguardはなかった
レイフォス

回答:


55

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)

2
好奇心から、Ubuntuにlastbコマンドがありますか?
ブラッチリー

1
@JoelDavis私のUbuntu 12.04はありますが、出力は1行であり、出力のようには見えません。たぶん設定する必要があります。
アントン


Ubuntuのサーバ14.04以上では、これは読むべき/var/log/auth.log
セルジュStroobandt

29

Fedora / CentOS / RHELなどのRed Hatベースのディストリビューションでは、ファイル内にログインしているユーザーを確認できます/var/log/secure

さらに詳しい情報が必要な場合は、SSHアクセス試行をログに記録し、SSHユーザーがサーバー上で実行した結果を追跡するにはどうすればよいですか。


1
/var/log/secureUbuntuシステムには何もありません。
アントン

@Anthon、驚いたことに、私は/var/log/auth自分のシステムにいません。答えを投稿する前に、私がチェックし、なぜ私が持っていた場合にはそれがあります/var/log/secure:)また、Ubuntuのサーバである私のシステムで
ラメシュ

14.04、12.04、および8.04未満の古いマシンをチェックしました。どのバージョンを実行していますか?そのファイルを取得するために特別なことをしましたか?
アントン

@Anthon、私がテストしたサーバーはRHELでした。しかし、私が提供したリンクの回答は、Ubuntuの3つのバリエーションをチェックしたので、Ubuntu用ではありません/var/log/secure
ラメシュ

6
/var/log/secureFedora / CentOS / RHEL ismです。
slm

8

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'

7

Ubuntuのデフォルト設定では、sshログインを/var/log/authファイルに記録しないことに注意してください。これはINFOロギングレベルです。

ログファイルにログイン試行を含めたい場合は、/etc/ssh/sshd_configファイルを(rootまたはsudoで)編集し、LogLevelfrom INFOを変更する必要がありますVERBOSE

その後、sshdデーモンを再起動します

sudo service rsyslog restart

その後、sshログイン試行が/var/log/auth.logファイルにログインします。


4

私の推奨はauditdを使用することです。これは、Linuxカーネルの監査サブシステムを使用してログを記録することであり、私の意見では、深刻な場合に適切な方法です。また、質問{セキュリティ関連}の性質を考えると、PAMも使用する必要があります。auditdPAMをインストールしただけのデフォルトレベルでは、成功したSSH試行と失敗したSSH試行がすべてaudit.logファイルに自動的に記録されます。したがって、実際には何も構成する必要はなく、監査PAMをインストールするだけです。SLESのこの最初の手を知っています。そして、RHELとLinuxの他のエンタープライズバージョンは同様に動作するでしょう。

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

auditdによって生成された生の監査ログ内aureportで、auditedのマニュアルページで説明されているようにフィルタリングするか、独自のテキストパーサーを記述するか、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)'
  • 上記から、私のサーバー名はsharkです。
  • このような多くの行がaudit.logにあります。exe = "/ usr / sbin / sshd"に基づいてこの行が必要です
  • sshされるアカウントのuidはauidの値で、この例では23456です
  • auidに関連付けられたユーザーアカウントの名前はacct = "ron"で指定されます
  • ほとんどの場合、監査システムは接続しようとしているシステムのDNSホスト名を記録しますが、常にIPアドレスを持っています
  • エントリの日付はエポック時間であるため、サーバーにsshしたときにdate --date @1480622612.317結果Thu Dec 1 15:03:32 EST 2016となるようなものを介して変換する必要があります。

ときにres=failedユーザー名を試みたものを下に、システムが接続しようとしていたものを見るために、これらのIPアドレスとホスト名を調査したいときです。そして明らかに、成功したsshは、システムで何が起こっているのかを理解しようとします。たとえば、昨日の午前2時にIPアドレス10.10.5.6のユーザー名でsshの試みが成功した場合は、bobと話をして調査するのが最善の方法です。他の誰かによるハッキングの試みの可能性 また、間もなく、bobのアカウントから監査ログをルート化するsuの試みがありますか?

あなたが繰り返し見たときres=failedauid=0し、acct=rootその後、それは、rootアカウントにあなたのボックスにsshをしようとしている誰かがいて、あなたが変更する場合である/etc/hosts.denySSHDのためにそのIPアドレスを持ちます。


2

私はこれが古いことを知っていますが、成功および失敗したssh接続/試行を監視するために何かを書きました。sshguardを使用している場合は禁止IPも同様です。ソフトウェアはPythonで書かれています。誰かがssh経由で正常に接続したとき、誰かがsshパスワードを間違えたとき、または多くの失敗した試行のために誰かが禁止されたときに、それはあなたにメールを送ります。これが将来この問題を検索して私のコードを見つける人を助けることを願っています!

https://github.com/amboxer21/SSHMonitor

Pythonスクリプトの場合、プロセスを監視するためのbashスクリプトを作成しました。ルートcronタスクを介して毎分実行されているかどうかを確認します。実行されていない場合は、別のプロセスを開始します。これは毎分ルート cronタスクによって呼び出されます。


-2

SSHコマンドロギングで私が今まで出会った中で最高のことはrootshです。このツールを使用すると、管理者は広範囲のレベルのロギングですべてのセッションからすべてのコマンドを取得できます。

ubuntuおよびCentOS / RHELでROOTSHをインストールおよび構成するスクリプトを作成しました

ここにリンクがあります

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh

これはgithubプロファイルを宣伝するのに悪い方法だと思います...基本的に、Webからスクリプトをダウンロードし、rootを使用して実行することを求めています。ダウン投票
UserK

私は自分のgithubプロフィールを宣伝していません。プロフィールを宣伝するために私に反対票を投じた場合、上記のように物事を単純化しようとしました。さらに、スタック交換のルールガイドには、個人リポジトリのコードファイルを共有できないようなものは何も書かれていません。
マンスールアリ

私の悪いユーモアのセンスを許してください。まず第一に、マンスールの答えに感謝します。ダウンボートは、ルートユーザーとして多数の不明なコマンドを実行するように要求しているという事実に基づいています。前回それをやったとき、中に「rm -Rスラッシュ」がありました。
UserK

1
スタック交換では、このような長いコードを許可しないので、そのスクリプトを回答に入れたのはそのためです。Linuxは非常に単純です。
マンスールアリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.