SSHGuardは、ブルートフォース攻撃からホストを保護するオープンソースデーモンです。これは、システムログの監視と集約、攻撃の検出、Linuxファイアウォールバックエンドの1つ(iptables、FirewallD、pf、ipfw)を使用した攻撃者のブロックを通じて実現されます。
SSHGuardは、当初、OpenSSHサービスに追加の保護レイヤーを提供するように設計されていましたが、VsftpdやPostfixなどの幅広いサービスも保護します。 Syslog、Syslog-ng、rawログファイルなど、いくつかのログ形式を認識します。
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

Yum/RHELシステムにSSHGuardをインストールする
CentOSなどのRHELベースのディストリビューションの場合は、以下のコマンドで提供されるようにEPELリポジトリをインストールすることから始めます。
$ sudo yum install epel-release
または
$ 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から見た場合の構成ファイルのサンプルです。

主なオプションに焦点を当てる:
- バックエンド ディレクティブは、バックエンド実行可能ファイルのフルパスを指します。この例では、IPtablesがデフォルトのファイアウォールバックエンドとして設定されていることがわかります。
- THRESHOLD ディレクティブは、攻撃スコアが指定された値を超えると、攻撃者をブロックします。
- BLOCK_TIME オプションは、ログイン試行が連続して失敗するたびに攻撃者がブロックされる秒数です。デフォルトでは、これは最初の試行後に120に設定されます。これは、ログイン試行が連続して失敗するたびに増加します。
- DETECTION_TIME オプションとは、攻撃者がスコアをリセットする前に、攻撃者がシステムに登録または記憶されている時間を秒単位で示します。
- WHITELIST_file オプションは、ブラックリストに登録されていないホストを含むホワイトリストファイルのフルパスを指します。
ステップ3:SSHブルートフォース攻撃をブロックするようにSSHGuardを構成する
ブルートフォース攻撃を防ぐには、sshguardと連携するように次のファイアウォールを構成する必要があります。
UFWを使用してSSH攻撃をブロックする
Ubuntu / DebianシステムにUFWをインストールして有効にしている場合は、/ etc / ufw/before.rulesファイルを変更します。
$ sudo vim etc / ufw / before.rules
$ sudo vim etc/ufw/before.rules
「ループバックですべてを許可する」セクションの直後に次の行を追加します。
# 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を実行している場合は、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を使用している場合は、まず、Iptablesでsshguardの新しいチェーンルールを作成して、不要なゲストのブロックを開始します。
# 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ブルートフォース攻撃をブロックする方法を示しました。
詳細なガイドについては、当社のホームページを参照してください。