SSHでIPをブロックする方法

SSHでIPをブロックする方法

非常に執拗な人物が、ここ数日、私のシステムへの (不正な) アクセスを継続的に試みています... 次のような膨大な数のエントリがあります/var/log/auth.log:

Jun 21 03:55:15 cloudy sshd[32487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root
Jun 21 03:55:16 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:19 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Received disconnect from 116.31.116.20: 11:  [preauth]
Jun 21 03:55:21 cloudy sshd[32487]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root

この個人がコンピューターのリソースを消費するのをブロックする方法についてアドバイスをお願いします。IP が SSH 接続を開かないように「ハードブロック」することは可能でしょうか? OS として Debian 8 を使用していることに注意してください。

答え1

答え2

使用することもできますiptables

ブロックしたいIPアドレスを記述したファイルを作成します。blocked.ips.txt

次に、次の内容を含むスクリプトを作成して実行します。

blocked=$(egrep -v -E "^#|^$" ./blocked.ips.txt)
for ip in $blocked
do
    iptables -I INPUT -s $ip -p tcp --dport ssh -j DROP
done

実行するとiptables -Lドロップされたパケットの出力が得られる。

答え3

iptables アプローチは最も直接的な方法です。Erik Handriks はこれをスクリプトとして提案しました。

ただし、2 つの問題があります。 - スクリプトは、再起動のたびに起動する必要があります (テーブルが iptables で内部的にバックアップされていない場合)。 - スクリプトをそのまま 2 回以上呼び出すと、エントリが重複します。

次のようにして悪者を捕まえてみましょう:

iptables -I 入力 -s BAD_IP -p tcp --dport ssh -j ドロップ

ほとんどのディストリビューションでは、iptables には独自のルール保存復元メカニズムがあります。 '/var/lib/iptables/rules-save' が存在するかどうかを確認してください。 ディストリビューションによっては、別の場所 (gentoo の場合) にある可能性があります。

すべての BAD IP を追加した後、次の操作を試してください。

iptables-save > /var/lib/iptables/rules-save

再起動後、「iptables -L」で何があるか確認します...

答え4

私のサーバー (Ubuntu 16.04) では、iptables の簡素化レイヤーである UFW (UncomplicatedFireWall) を使用しています。これは、Ubuntu サーバーではほぼ標準的な機能のようです (ただし、他のディストリビューションでも使用できるはずです)。このような場合には、次のものを使用します。

ufw insert 1 deny from nnn.nnn.nnn.nnn

UFWでは接続数を制限することもできます

ufw limit ssh/tcp

これは成功した接続にも適用されるため、複数の ssh コマンドを使用するスクリプトを使用する場合は、次のコマンドを発行して IP のこの制限を無効にする必要があります。

ufw insert 1 allow in from nnn.nnn.nnn.nnn

関連情報