可能なSSH攻撃者のIPアドレスを取得する方法は?


17

記録しcat /var/log/auth.logて、| grep "Failed password for"記録がたくさんあることを確認しました。

ただし、有効/無効なユーザー用の2つのレコードタイプがあります。それは| cut彼らへの私の試みを複雑にします。

考えられる攻撃者のIPアドレスと各IPアドレスの試行回数を含むリスト(テキストファイル)を作成したいと思います。簡単に作成する方法はありますか?

また、のみに関してssh/var/log/auth.log可能な攻撃者のリストを作成する際に考慮すべきすべての記録は何ですか?

隠し番号を使用した「auth.log」の例:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

結果:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1

私は完全にあなたのサーバーのsshdの設定ファイルでサーバーを無効パスワードにそれらをインストールし、あなたがSSHキーを作成示唆/etc/ssh/sshd_config...検索の設定をPasswordAuthentication noし、PermitRootLogin without-password その後、そのようなすべてのパスワードの試みがこれまでauth.logをに入る前に阻止されます... ...
スコットステンズランド

回答:


19

次のようなものを使用できます。

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

文字列Failed password forを取得し、-oIPアドレスを抽出()します。ソートされ、発生uniq回数をカウントします。

出力は次のようになります(入力ファイルとしての例を使用)。

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

出力の最後の1つは6回試行しました。


これが@chaosのベストアンサーです-便利なonelinersのボックスに追加-ありがとう!
ジェイク

素晴らしい解決策。grepがフィルター行だけでなく正規表現の一致を抽出できることも知りませんでした。| sort -nチェーンに追加しました。
クラベミール

1
良い答え-複数のgrepsは通常sedを使用するためのサインです。sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'両方のgrepsを置き換えます。
オリオン

1
@orion trueですが、最初のgrepでzgrep "Failed" /var/log/auth.log*圧縮ログアーカイブも検索できることを想像してくださいsed
カオス

1
IPv6はどうですか?
Ortomala Lokni

6

肥大化したソリューションかもしれませんが、Fail2Banのようなものをインストールすることをお勧めします

この種のロギングのために作られており、ファイアウォールに(一時的な)ルールを追加して繰り返しの攻撃者をブロックできるというボーナスが追加されています。ただし、自分のIPをホワイトリストに登録してください。数回、一時的に自分をロックアウトすることができました。


まあ、いい解説ですが、質問への答えではありません。質問の必要性を排除できる提案に似ていますが、ファイルを監視するためのデーモンは必要ありません。スクリプトだけでそのリストをテキストファイルとして作成する必要があるのには理由があります。:)
クラベミール

@Miroに同意します。ここで言及していなければ、コメントに追加します。
セーラーサイア

@Miro、あなたは正しい、質問自体への答えではなく、この種のロギングのための便利なツールとして思い浮かんだ。
ジェイク

0

これは私にとって本当にうまくいきました。(有罪を保護するためにIPが変更されました)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4

0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u

結果はpassword-動作していません。さまざまな種類のエントリもカバーしていません。awk印刷列はcutソリューションではなくの代替です。
クラベミール

本当の/var/log/auth.log上記のサンプルで動作します
-Archemar

まあ、それは編集の前に機能しませんでした-コメントが行われたとき。今では正しく動作します。ただし、uniq -cベストアンサーのように見逃しています。
クラベミール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.