ウェブサイト検索

SSHGUARDを使用してSSHブルートフォース攻撃をブロックする方法


SSHGuardは、ブルートフォース攻撃からホストを保護するオープンソースのデーモンです。これは、システムログの監視と集約を通じて攻撃を検出し、iptables、FirewallD、pf、ipfwのいずれかのLinuxファイアウォールバックエンドを使用して攻撃者をブロックすることで実現されます。

当初、OpenSSHサービスに追加の保護層を提供するように設計されたSSHGuardは、VsftpdやPostfixなど、さまざまなサービスも保護します。これは、Syslog、Syslog-ng、及び生のログファイルを含むいくつかのログ形式を認識します。

SSHGuard は Fail2ban と非常に似ていますが、C で書かれているのに対し、Fail2ban は Python で書かれています。また、より軽量で、提供される機能は少ないです。

このガイドでは、LinuxサーバーでSSHのブルートフォース攻撃をブロックするためにSSHGuardをインストールおよび構成する方法を示します。

ステップ1:LinuxにSSHGuardをインストールする

私たちはLinux上にSSHGuardをインストールすることから始めます。

Debian/UbuntuにSSHGuardをインストールする

まず、パッケージリストを更新し、その後、aptパッケージマネージャーを使用してデフォルトのリポジトリからSSHGuardをインストールしてください。

$ sudo apt update
sudo apt install sshguard

インストールが完了すると、SSHGuard サービスは自動的に起動し、このコマンドを使用して確認できます:

$ sudo systemctl status sshguard

RHELシステムにSSHGuardをインストールする

RHELベースのディストリビューション、例えばCentOS、Rocky、AlmaLinuxでは、以下のコマンドに記載されているように、まずEPELリポジトリをインストールします。

$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo dnf install epel-release

EPEL がセットアップされたら、dnf パッケージマネージャーを使用して SSHGuard をインストールしてください。

$ sudo dnf install sshguard 

インストールが完了したら、SSHGuard を起動して、システムの起動または再起動時に自動的に開始するように設定します。

$ sudo systemctl start sshguard
sudo systemctl enable sshguard

必ず SSHGuard が正常に動作していることを確認してください。

$ sudo systemctl status sshguard

ステップ2:LinuxでのSSHGuardの設定

SSHGuard は、/var/log/auth.log、/var/log/secure systemd ジャーナル、および syslog-ng ログファイルを監視し、失敗したログイン試行をアクティブに監視します。

失敗したログイン試行ごとに、リモートホストは制限時間内で禁止されます。この時間はデフォルトで120秒に設定されています。その後、禁止時間は連続した失敗したログイン試行ごとに1.5倍に増加します。

違反したホストが禁止される時間は、その他のパラメータとともにsshguard.confファイルに指定されています。設定ファイルには、示されているようにvimエディタを使用してアクセスできます。

$ sudo vim /etc/sshguard/sshguard.conf

RHELベースのディストリビューションでは、設定ファイルは次のパスにあります。

$ sudo vim /etc/sshguard.conf

ここに、Ubuntu/Debian から見た設定ファイルのサンプルがあります。

メインの選択肢に集中しましょう。

  • BACKENDディレクティブはバックエンド実行可能ファイルのフルパスを指します。この例では、IPtablesがデフォルトのファイアウォールバックエンドとして設定されていることがわかります。
  • THRESHOLDディレクティブは、攻撃者の攻撃スコアが指定された値を超えた場合に攻撃者をブロックします。
  • BLOCK_TIMEオプションは、攻撃者が毎回の失敗したログイン試行の後にブロックされる秒数です。デフォルトでは、最初の試行後に120秒に設定されています。これは、各連続した失敗したログイン試行ごとに増加します。
  • DETECTION_TIMEオプションは、攻撃者がシステムに登録または記憶されている秒数を指し、その後スコアがリセットされる前の時間を示します。
  • このWHITELIST_fileオプションは、ブラックリストに載るべきでないホストを含むホワイトリストファイルのフルパスを指します。

ステップ3: SSHGuardを設定してSSHブルートフォース攻撃をブロックする

ブルートフォース攻撃を防ぐためには、以下のファイアウォールをsshguardと連携させるように設定する必要があります。

UFWを使用してSSH攻撃をブロックする

UFWがインストールされ、有効になっている場合は、Ubuntu/Debianシステムの/etc/ufw/before.rulesファイルを修正してください。

$ sudo vim etc/ufw/before.rules

次の行をallow all on loopbackセクションのすぐ後に追加してください。

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

ファイルを保存してUFWを再起動します。

$ sudo systemctl restart ufw

異なるシステムから誤った資格情報でサーバーにログインを試みて、最初のログイン試行が失敗した後、120秒間ロックアウトされることに気付いてください。

このことは、auth.log ログファイルを確認することで検証できます。

$ sudo tail -f  /var/log/auth.log

次のログイン試行が失敗した後、ブロック時間は240秒に増加し、その後480秒、さらに960秒と続きます。

Firewalldを使用してSSH攻撃をブロックする

firewalldを実行している場合は、それが設定されて有効になっていることを確認してください。その後、好みのゾーンでsshguardを有効にするために、次のコマンドを実行します。

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

変更を適用するには、Firewalldとsshguardを再読み込みしてください。

$ sudo firewall-cmd --reload
sudo systemctl restart sshguard

次のようにルールを確認してください:

$ sudo firewall-cmd —-info-ipset=sshguard4

Iptablesを使用してSSH攻撃をブロックする

まだIptablesを使用している場合は、まずsshguardのためにIptablesで新しいチェーンルールを作成して、不正アクセスを防ぎ始めてください。

# iptables -N sshguard

次に、INPUT チェーンを更新して、トラフィックを sshguard に送信し、悪意のある当事者からのすべてのトラフィックをブロックします。

# iptables -A INPUT -j sshguard

悪用者からSSH、POP、およびIMAPなどの特定のポートをブロックするには、次のコマンドを実行します:

# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

そして最後に、変更が有効になるようにルールを保存してください。

# iptables-save > /etc/iptables/iptables.rules

ステップ4: SSHがブロックされたホストをホワイトリストに追加する方法

ブロックされたホストをホワイトリストに追加するには、そのホスト名またはIPアドレスをホワイトリストファイルに指定するだけで済みます。そのファイルは次の場所にあります:

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

その後、変更を適用するためにsshguardデーモンとファイアウォールのバックエンドを必ず再起動してください。

このガイドでは、LinuxサーバーでSSHGuardデーモンを使用してSSHのブルートフォース攻撃をブロックする方法を示しました。ご意見をお寄せください。

関連記事: