ウェブサイト検索

SSHGuard で SSH サーバーを保護する方法: 実践ガイド


SSHGuard を使用して SSH サーバーをブルート フォース攻撃から効果的に防御するための頼りになるガイドです。その方法をご覧ください。

SSH (Secure Shell) はサーバーへの重要なエントリ ポイントとして機能し、強力な暗号化されたリモート管理方法を提供します。ただし、そのセキュリティの強さは、それを保護するための手段によって決まります。

SSHGuard を導入してください。これは、SSH サーバーをブルート フォース攻撃やその他の一般的な脆弱性から保護するために設計された堅牢なツールです。このガイドでは、これを実装してサーバーのセキュリティを強化し、安心感を与える実践的な手順を示します。

しかし、実際的な部分に入る前に、ソフトウェア自体にさらに光を当てましょう。

SSHGuard とは何ですか?

SSHGuard は、主に SSH サービスをターゲットとしたブルート フォース攻撃からサーバーを保護するセキュリティ ツールです。これはログベースの侵入防御システムとして機能し、ログイン試行の繰り返しの失敗など、悪意のあるアクティビティの兆候がないかサーバー ログを監視します。

SSHGuard は、このような不審な動作を検出すると、ファイアウォール ルールを使用して、問題のある IP アドレスを自動的にブロックします。

さらに、いくつかのログ形式をサポートしており、UFW、firewalld、iptables、nftables、IPFW、pf などのさまざまなファイアウォール バックエンドと統合して、潜在的に悪意のあるトラフィックのブロックとブロック解除を管理できます。

はい、知っています。これは Fail2Ban の動作を思い出させるかもしれません (詳細についてはガイドをご覧ください)。 2 つのツールには類似点がありますが、重要な違いもあります。そこで、どのツールが自分のニーズに最も適しているかを判断するために、それらを簡単に調べてみましょう。

SSHGuard と Fail2Ban: 主な違い

SSHGuard と Fail2Ban は両方とも、ログ ファイルを監視して不審なアクティビティがないか確認し、問題のある IP アドレスをブロックする措置を講じます。ただし、機能は似ていますが、両者には次のような違いがあります。

モニタリングのアプローチ:

  • SSHGuard はログ ファイルを直接監視し、正規表現を必要とせずにログ エントリ自体を解釈できます。
  • 一方、Fail2Ban は、ログ ファイルを解析し、不正行為のパターンを特定するために正規表現に大きく依存しています。これにより、ログ ファイルに書き込む事実上あらゆるサービスを監視するように適応できるため、非常に柔軟で構成可能になります。

監視されるデフォルトのサービス:

  • SSHGuard は主に SSH サーバーを保護するように設計されていますが、メール サーバーや FTP などの他のサービスもサポートしています。
  • Fail2Ban は、ウェブ サーバー、メール サーバー、ファイル共有サーバー、FTP など、SSH を超えた幅広いサービスを保護するように設定できます。

実装とパフォーマンス:

  • SSHGuard は C で書かれており、速度とリソース使用量に関してパフォーマンスが向上する可能性があります。
  • Fail2BanPython で書かれているため、少し遅くなる可能性がありますが、Python の豊富なライブラリとスクリプト作成の容易さにより適応性も高くなります。

ブロックメカニズム:

  • SSHGuard は、UFW、firewalld、iptables、pf、IPFW などのファイアウォール ツールと直接統合する、よりシンプルなブロック メカニズムを使用します。
  • Fail2Ban は主に iptables を使用しますが、電子メールの送信、カスタム スクリプトの実行、より複雑なファイアウォール設定との統合など、他のさまざまなアクションと連動するように構成できます。

設定が簡単:

  • SSHGuard は、主に SSH およびその他のいくつかのサービスに関係するユーザー向けに、より簡単なセットアップを提供し、多くの場合、カスタマイズの必要性が少なくなります。
  • Fail2Ban では、正規表現を設定し、さまざまなサービスの特定のルールとアクションを定義するために、より詳細な構成が必要になる場合がありますが、これにより、より優れた制御とカスタマイズも可能になります。

Linux への SSHGuard のインストール

以下は、Linux ディストリビューションに応じて SHHGuard をインストールする方法です。

Debian/Ubuntu/Linux Mint

sudo apt install sshguard

フェドーラ

sudo dnf install sshguard

上記のコマンドを実行すると、Firewalld 以降の「sshguard-firewalld」パッケージもインストールされることに注意してください。これは、Fedora システムで使用されるデフォルトのファイアウォールです。必要に応じて、SSHGuard の代替ファイアウォール バックエンドとして「sshguard-iptables」または「sshguard-nftables」パッケージをインストールすることもできます。

サービスを有効にして開始します。

sudo systemctl enable --now sshguard.service

アルマ リナックス/ロッキー リナックス

SSHGuard パッケージは EPEL リポジトリにあるため、まずシステムに追加し (まだ追加していない場合)、パッケージ インデックスを更新します。

sudo dnf install epel-release
sudo dnf update

次に、次のコマンドを実行して SSHGuard をインストールできます。

sudo dnf install sshguard

Fedora と同様に、追加の「sshguard-firewalld」パッケージが SSHGuard で使用するデフォルトのバックエンドとしてインストールされます。他の 2 つのオプション「sshguard-iptables」と「sshguard-nftables」も使用できます。

最後に、サービスを有効にして開始します。

sudo systemctl enable --now sshguard.service

SSHGuard の構成

sshguard.conf」 ファイルは、サーバーを保護するための SSHGuard の設定を構成する場所です。このファイルを使用すると、SSHGuard がどのように動作するか、何を監視するか、および潜在的な攻撃にどのように対応するかを指定できます。

Debian ベースのシステム (Debian、Ubuntu など) では、ファイルは次の場所にあります。

/etc/sshguard/sshguard.conf

Alma Linux、Rocky Linux、Fedora などの RHEL ベースのディストリビューションでは、次のパスにあります。

/etc/sshguard.conf

Debian ではデフォルトで次のように表示されます。

一般的なオプションの説明は次のとおりです。

  • バックエンド: このオプションは、SSHGuard が攻撃者をブロックするために使用するファイアウォール バックエンドのタイプを指定します。たとえば、「sshg-fw-nft-sets」、「sshg-fw-firewalld」、「sshg-fw-iptables 」などの値が表示される場合があります。 」、「sshg-fw-pf」など、システムのファイアウォールに応じて異なります。
  • LOGREADER: SSHGuard がログ ファイルを読み取るために使用する方法を指定します。これは、SSHGuard がログ エントリを処理して悪意のあるアクティビティを検出する方法を決定します。
  • しきい値: これは、SSHGuard がそのアドレスをブロックするきっかけとなる、単一の IP アドレスからの不正なアクティビティ (ログイン試行の失敗など) の数です。この値を低く設定すると、禁止が早くなりますが、設定が低すぎると、パスワードを間違えた正規ユーザーがブロックされる可能性があるので注意してください。
  • BLOCK_TIME: これは、不正使用のしきい値に達した後、IP アドレスがブロックされる期間 (秒単位) を定義します。デフォルト設定は 2 分 (120 秒) です。この時間が経過すると、IP アドレスが別のブロックをトリガーしない限り、ブロックは解除されます。
  • DETECTION_TIME: 同じ IP による繰り返しの違反がブロックのしきい値に達するまでカウントされる時間枠 (秒単位) を設定します。基本的に、SSHGuard が特定の IP アドレスからの不審なアクティビティを追跡する期間を設定します。
  • WHITELIST_FILE: ファイルへの完全パス。動作に関係なく、ブロックしない IP アドレスまたは範囲を指定できます。これは、自分自身や信頼できる IP アドレスを誤ってブロックしないようにするのに役立ちます。

使用しているファイアウォールに応じて SSHGuard を構成する方法を説明します。

UFW/nftables を使用する場合の SSHGuard 構成

まず、重要な説明から始めたいと思います。多くのガイドでは UFW を SSHGuard のバックエンドとして挙げていますが、これは単純な理由により完全に真実ではありません。SSHGuard は UFW バックエンドを提供していませんが、実際には nftables バックエンドを提供しています。

UFW (Uncomplicated Firewall) は、Linux 上の iptables/nftables ファイアウォール ルールを内部的に管理するための、ユーザーフレンドリーなインターフェイス (抽象化レイヤー) です。これは、Ubuntu で使用されるデフォルトのものです。

したがって、SSHGuard が動作するように設定するには、「BACKEND」オプションに「/usr/libexec/sshguard/sshg-fw-nft-sets」が含まれていることを確認してください。価値。

ただし、SSHGuard が UFW ルールを操作できるようにするには、その前に、UFW が SSHGuard などの外部アプリケーションによって管理されるように設定されていることを確認する必要があります。これには、UFW の設定に SSHGuard のフックを追加することが含まれます。これを行うには、UFW の「before.rules」ファイルを編集します。

sudo nano /etc/ufw/before.rules

ループバックですべてを許可」セクションの後に次の行を追加して、SSHGuard の新しいチェーンを作成します。

# Create a chain for SSHGuard
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD

ファイルを保存して終了します。次に、UFW サービスを再起動します。

sudo systemctl restart ufw

SSHGuard 構成を変更した場合は、そのサービスも再起動してください。

sudo systemctl restart sshguard

それでおしまい。これで、ブルートフォース SSH 攻撃からサーバーを保護するための SSHGuard の設定がすべて完了しました。サーバーに対して間違った SSH 接続をいくつか行ってテストしてみてください。 3 回目の試行が失敗した後 (「THRESHOLD=30」)、SSHGuard は 2 分間接続をブロックします (「BLOCK_TIME=120」)。

どのアドレスがブロックされているかを確認したいですか?最も簡単な方法は、ブロックされた IP アドレスのリストが含まれる SSHGuard nftables テーブルを直接リストすることです。

sudo nft list table sshguard

また、「/var/log/auth.log」ファイルを監視して、SSHGuard のアクティビティとアクションの記録を表示することもできます。

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

iptables 使用時の SSHGuard 構成

時代遅れだと言われても構いませんが (おっしゃるとおりなので反論はしません)、私はバックエンドに iptables ファイアウォールを備えた SSHGuard を使用することを好みます。その方法は次のとおりです。

まず、SSHGuard 構成ファイルをチェックして、SSHGuard が iptables を使用するように構成されていることを確認します。このファイルには、「BACKEND」オプションが「/usr/libexec/sshguard/sshg-fw-iptables」に設定されている必要があります。

sudo nano /etc/sshguard/sshguard.conf

もちろん、SSHGuard 構成に変更を加えた場合は、必ず再起動してください。

sudo systemctl restart sshguard

次に、SSHGuard 用の新しい iptables チェーンを作成します。

sudo iptables -N sshguard

すべての SSH トラフィックが「sshguard」チェーンを通過することを確認します。

sudo iptables -A INPUT -p tcp --dport 22 -j sshguard

変更を永続的(再起動後に利用可能)にするには、このガイドを参照するか、以下のコマンドに従ってください。

sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4

現在 SSHGuard によってブロックされている IP アドレスのリストを表示するには、次のコマンドを実行します。

sudo iptables -L sshguard -n

次のコマンドを実行して、リアルタイムの SSHGuard アクションを監視することもできます。

sudo journalctl -u sshguard -f

firewalld 使用時の SSHGuard 構成

Firewalld は、Linux 用のファイアウォール管理ツールです。これは主に、Alma Linux、Rocky Linux、Fedora などの RHEL ベースのディストリビューションで使用されます。このツールは、ネットワーク接続またはインターフェイスの信頼レベルを定義するファイアウォール ゾーンをサポートします。その詳細と使用方法については、詳細ガイド「Firewalld の例」を参照してください。さて、本題に戻ります。

SSHGuard に firewalld をバックエンドとして使用するように指示するには、「sshguard.conf」ファイルの「BACKEND」オプションが「/usr」に設定されていることを確認してください。 /libexec/sshguard/sshg-fw-firewalld。 」

sudo nano /etc/sshguard.conf

さらに、構成自体に変更を加えた場合は、SSHGuard サービスを再起動することを忘れないでください。

sudo systemctl restart sshguard

ブロックされた攻撃者は、それぞれ「sshguard4」 (IPv4 アドレスの場合) と「sshguard6」 (IPv6 アドレスの場合) という名前の 2 つのルールに追加され、デフォルトの firewalld ゾーンに追加されます ( 「公開」)。

現在 SSHGuard によってブロックされている IP アドレスのリストを表示するには、次のコマンドを実行します。

sudo firewall-cmd --info-ipset=sshguard4

したがって、IPv6 アドレスの場合、コマンドは次のようになります。

sudo firewall-cmd --info-ipset=sshguard6

最後に、次のコマンドを実行して、リアルタイムの SSHGuard アクションを監視できます。

sudo journalctl -u sshguard -f

ただし、別のファイアウォール ゾーンを使用している場合は、以下の手順に従ってセットアップできます。 「」を特定のゾーン名に置き換えるだけです。

sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop"
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"

IPアドレスのホワイトリスト登録

SSHGuard で IP アドレスをホワイトリストに登録すると、アクティビティに関係なく、特定の IP アドレスが決してブロックされないようにすることができます。これは、正当な SSH アクセスを頻繁に行うシステム管理者や自動プロセスなど、信頼できる IP にとって重要になる可能性があります。 SSHGuard で IP アドレスをホワイトリストに登録する方法は次のとおりです。

まず、「sshguard.conf」ファイルの「WHITELIST_FILE」オプションがアクティブであり、コメントアウトされていないことを確認します。

ホワイトリストに登録されたアドレスのリストを含むファイルの場所は、Linux ディストリビューションによって異なる場合があります。 Ubuntu などの Debian ベースのシステムを使用している場合は、次の場所にあります。

/etc/sshguard/whitelist

Alma、Rocky、Fedora などの RHEL ベースの場合:

/etc/sshguard.whitelist

ここでは、SSHGuard によってブロックされないようにしたいホストを 3 つの異なる方法で入力できます。

  • 単一の IP アドレス
  • ネットワーク範囲
  • ホストの完全なドメイン名 (FQDN)

例えば:

192.168.0.34
192.168.0.0/24
myhost.domain.com

したがって、テキスト エディタでファイルを開き、必要なアドレスを入力し、ファイルを保存して終了します。もちろん、その後、SSHGuard サービスを再起動することを忘れないでください。

sudo systemctl restart sshguard

結論

SSHGuard を使用して SSH サーバーを保護すると、ブルート フォース攻撃やその他の不正アクセスの試みに対する堅牢な保護層が提供されます。セキュリティを維持する鍵は、初期設定だけではなく、新しい脅威の出現に応じて構成を継続的に監視し、更新することにあることを忘れないでください。

詳細については、プロジェクトの Web サイトにアクセスするか、SSHGuard のドキュメントを参照してください。

お時間をいただきありがとうございました!ご質問がある場合は、以下のコメント欄に残してください。

関連記事: