FreeBSD14 + SSHGuard + PF(Packet Filter)で不正な攻撃を自動ブロック
SSHGuardを導入した方がssh攻撃を放っておくより圧倒的にリソース消費を抑えるとのことなので導入したときの覚書。 Gemini 2.5 Proに教えてもらっている。 環境: FreeBSD 14.3-RELEASE-p2, SSHGuard 2.5.1,1 1. SSHへの攻撃を放置しておいた場合のリソース消費 仮想マシン提供側のファイアウォール(ConoHaだとセキュリティグループ)だけだとリソースを消費し続ける。 ネットワークリソースの消費: 攻撃者が送りつけてくる不正なパケットを、ネットワークインターフェースがすべて受信します。これだけでネットワーク帯域とCPUの割り込み処理リソースを消費します。 sshdプロセスの生成: SSHへの接続試行があるたびに、OSは新しいsshdのプロセスをフォーク(生成)します。プロセスの生成自体がCPUとメモリを消費します。 ログにはsshd[19312], sshd[19314], sshd[19317]... と大量のプロセスIDが記録されており、これが頻繁に発生している証拠です。 認証処理の実行: 生成されたsshdプロセスは、ユーザー名が存在するかどうかを確認し、パスワード認証の準備をします。これには、/etc/passwdへのアクセス、暗号化関連のライブラリの呼び出しなどが含まれ、CPUリソースを消費します。 ログの書き込み: 認証失敗のたびに、sshdはログ(/var/log/auth.logなど)に詳細を書き込みます。頻繁なディスクI/Oが発生し、ディスク性能やCPUリソースを消費します。 PFとsshguardを導入すると、攻撃元IPアドレスごとに最初の数回の試行に対してはリソースを消費するが、ブロックされた後はそのIPからの攻撃による負荷はほぼゼロ。 定常的に動作するPFとsshguard自体のリソース消費量は、 放置した場合の負荷に比べて圧倒的に軽微 。 2. SSHGuardとは sshdなどのログファイルをリアルタイムで監視し、短時間に繰り返される認証失敗を検知すると、その攻撃元IPアドレスをOSのファイアウォール(PF, IPFWなど)と連携して動的にブロックする。 公式サイト: SSHGuard 特徴 動作原理: ログファイル(例: /var/log/auth.log)をt...