
Linuxを使っているなら、セキュアシェル(SSH)は日常的に使っているかもしれません。実際、この高く評価されているツールがなければ、Linuxサーバーをリモート管理するのは困難です。SSHは設計上非常に安全ですが、完璧ではありません。サーバー、特に外部からアクセスできるサーバーでSSHデーモンを実行している場合、定期的に攻撃を受ける可能性があります。最終的には、こうした攻撃の1つがブルートフォース攻撃でサーバーに侵入し、データを盗み出す可能性があります。そのため、SSHを確実に保護するために必要なあらゆる予防策を講じる必要があります。
例えば、ログファイルをチェックしているときに、特定の望ましくないIPアドレスがSSH経由でサーバーにログインしようとしたことを発見したとします。今回は失敗したかもしれませんが、2回目、3回目、4回目と総当たり攻撃による侵入を試みてくる可能性があります。どうすればよいでしょうか?Linuxを使用しているので、この攻撃に対処するために必要なツールはすべて既に揃っています。
組み込みツールを使用して特定のIPアドレスまたはアドレス範囲をブロックする2つの方法を紹介します。ここで紹介する2つのツールは、Uncomplicated Firewall (UFW) とTCP Wrappersです。Ubuntu Server 16.04でデモを行いますが、手順はほとんどのディストリビューションで同じです。
注意: ディストリビューションが UFW を利用していない場合は、使用しているファイアウォールに基づいてこのプロセスを調整する必要があります。
シンプルなファイアウォール
最初の方法は最も複雑です。UFW経由でiptablesを使用するためです。例えば、ブロックしたいIPアドレスが192.168.1.162だとします。UFWを使って、以下のコマンド1つでこれをブロックします。
sudo ufw deny from 192.168.1.162 port 22
sudo uwf statusコマンドを実行して、UWF が実行中かつ有効になっているかどうかを確認します。UFW がアクティブで、新しいルールが表示されていれば(図 A)、準備完了です。
図A

UFW が非アクティブとしてリストされている場合は、 sudo ufw enableコマンドを発行すると、UFW が起動して新しく記述したルールが読み込まれ、問題のある IP アドレスがブロックされます。
そのルールを削除するには、次のコマンドを発行します。
sudo ufw delete 1
SSH ブロッキング ルールは唯一のルールなので、関連付けられた番号は 1 になります。ルールが複数ある場合は、正しい番号に従ってルールを削除する必要があります。
アドレスの範囲をブロックする必要がある場合、コマンドは次のようになります。
sudo ufw deny from 192.168.1.162/24 port 22
CIDR 表記法を使用して、必要な範囲をブロックできます。
TCPラッパー
それでは、IPアドレスからのSSH経由のサーバーアクセスをブロックする、より簡単な方法を試してみましょう。その方法はTCP Wrappersです。これもLinuxに組み込まれているので、インストールする必要はありません。
UFWで行ったのと同じIPアドレスをブロックするには、コマンドsudo nano /etc/hosts.denyでhosts.denyファイルを開きます。そのファイルに次の行を追加します。
sshd 192.168.1.162
ファイルを保存して閉じます。
次のコマンドで SSH デーモンを再起動します。
sudo systemctl restart sshd
この時点で、問題のある IP アドレスがログインしようとすると、図 Bに示すエラーが表示されます。
図B

アドレスの範囲をブロックする場合、エントリは次のようになります。
sshd 192.168.1.*
特定の IP アドレスをブロックしたい場合は、次のようにリストできます。
sshd 192.168.1.101, 192.168.1.102, 192.168.1.103
2つの簡単な方法
これで完了です。Linuxサーバーで特定のIPアドレスからのSSHアクセスをブロックする、非常にシンプルな2つの方法をご紹介します。騙されないでください。もっと良い、あるいはもっと複雑な方法もありますが、手軽でシンプルな方法をお探しなら、UFWルールやTCP Wrapperの追加が効果的です。