概要
Brutelockは各種システムログ(ssh、ftp、pop、imapなど)を監視し、ブルートフォース攻撃や不審なログイン試行を行うIPアドレスを自動でブロックするオープンソースプログラムです。ルールは拡張可能な形式で、ログファイルと正規表現パターンを指定するだけで他のサービスも追加監視できます。
定義:ブルートフォース攻撃 — パスワードや認証を総当たりで試す攻撃手法。短い定義ですが、これが防ぎたい主な脅威です。
事前準備
- root または sudo 権限を持つアカウント
- ビルドツール(tar, make, gcc 等)
- サーバーのSSHログパス(ディストリごとに異なります。例: /var/log/auth.log や /var/log/secure)
- 必要に応じてサブスクリプションキー(Brutelockの有償オプションを利用する場合)
インストール手順
以下はエージェントを /usr/local/ に展開してインストールする標準的な手順です。
- Brutelockエージェントをダウンロードして /usr/local/ に保存します。
cd /usr/local/
tar -xjvf brutelock-version_number.tar.bz2
cd /usr/local/brutelock-version_number
./configure
make
make install
- 新しく作成された設定ファイル(/usr/local/brutelock/conf/brutelock.conf)を編集し、必要ならサブスクリプションキーを設定します。
- 設定ファイル内でSSHログへのパスが正しいか確認し、必要なら修正します。システムのログ場所が不明な場合は、Brutelockソースに同梱されるREADMEを参照してください。ftp、pop、imap等を保護したい場合は該当サービスの行をコメント解除してください。
- BrutelockがブロックしてはならないIPは /usr/local/brutelock/conf/whitelist に追加します(各IPを改行で区切る)。
- iptablesに専用チェインを追加します(例):
/sbin/iptables -N Brutelock-Firewall-INPUT
/sbin/iptables -I INPUT -j Brutelock-Firewall-INPUT
- Brutelockデーモンを起動します。
/usr/local/brutelock/bin/brutelockd
- ログを監視して、失敗したログイン試行が減ることを確認します。
重要: whitelistにはlocalhost(127.0.0.1)に加え、少なくともサーバー自身のグローバルIPを登録しておくべきです。誤って自分の管理IPをブロックしないための基本対策です。
設定のポイントと例
- サブスクリプションキー: 無料オプションでも自動ブロックは機能しますが、有料プランは追加の保護ルールや更新を受け取る場合があります。キーの有無による機能差は、Brutelock公式情報を参照してください。
- 監視ルールの正規表現: 例えばSSHのAUTH失敗を検知する簡単な例は次のようなパターンです(実際のログ形式に合わせて調整してください):
Failed password for .* from ([0-9]{1,3}\.){3}[0-9]{1,3}
- 複数サービスを監視する場合: 各サービスごとにログパスと正規表現を設定ファイルに追加します。
iptables運用の注意点
- iptablesルールは再起動で消えることがあるため、恒久化(iptables-save / iptables-restore、またはディストリのネットワーク管理ツールで保存)を必ず行ってください。例:
/sbin/iptables-save > /etc/iptables/rules.v4
- Brutelockチェインに、管理用IPの優先許可ルールを追加すると安全です。例えば先にホワイトリストIPをACCEPTするルールを挿入しておきます。
systemdでの自動起動(例)
以下はBrutelockのデーモンをsystemdで管理するための簡易unitファイル例です。環境に合わせてパスやUserを調整してください。
[Unit]
Description=Brutelock daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/brutelock/bin/brutelockd
Restart=on-failure
[Install]
WantedBy=multi-user.target
ファイルを /etc/systemd/system/brutelock.service に保存し、次を実行します。
systemctl daemon-reload
systemctl enable --now brutelock.service
トラブルシューティング
- 起動しない: /usr/local/brutelock/log/ または標準エラーログを確認。権限不足でファイルに書き込めない場合があります。
- 期待どおりにブロックされない: 設定した正規表現がログ形式と一致しているか確認。さらにBrutelockのデバッグオプション(存在する場合)を有効にして検出フローを追跡します。
- 自分のIPがブロックされた: whitelistファイルに自身のIPを追加し、iptablesから該当DROPルールを手動で削除します。
運用チェックリスト
- brutelock.conf に正しいログパスと(必要なら)サブスクキーを設定した
- /usr/local/brutelock/conf/whitelist に管理IPを追加した
- iptablesにBrutelock用チェインを追加し恒久化した
- systemdで自動起動設定を行った(必要な場合)
- ログ監視を1週間程度行い、誤検出が無いか確認した
代替アプローチと比較
- fail2ban: ローカルでのログ監視とブロックルール追加が得意。多くのディストリでパッケージ管理されており導入が簡単。Brutelockと似た仕組みだが実装やルール管理方法が異なる。
- ファイアウォールのみ: ネットワークレベルでの制限は効果的だが、ログベースの異常検知が無いため細かい攻撃パターンへの対応は難しい。
- クラウドWAF/ホスティングプロバイダの保護: IPブロックやレート制限をネットワーク境界で実施できるが、コストや適用範囲を考慮する必要がある。
運用上のヒューリスティクス(判断基準)
- 初期は検出閾値を低めに設定して様子を見る。誤検出が多ければ閾値を緩める。
- 世界中からの短時間大量試行が見られるなら自動ブロックを優先。
- 管理IPや監視系のIPは必ずホワイトリストに登録する。
フローチャート(導入判断)
flowchart TD
A[ログイン試行の異常を検知] --> B{短時間で多数の失敗か}
B -- Yes --> C[自動ブロックを有効にする]
B -- No --> D[監視を継続、閾値を調整]
C --> E[ホワイトリストとログ保存を確認]
D --> E
よくある質問
サブスクリプションキーは必須ですか?
基本的なログ監視とブロック機能はサブスクリプション無しでも動作する場合があります。追加の自動更新やプロテクション機能を利用したい場合は公式サービスへのサインアップを検討してください。
whitelistにはどのIPを入れるべきですか?
localhost(127.0.0.1)に加え、サーバー自身のグローバルIP、管理者の固定IP、監視サービスのIPを最低限登録してください。
Brutelockが期待通りに動かない場合の最初の確認項目は?
設定ファイルのログパス、正規表現、デーモンの実行権限、そしてBrutelockのログファイルを確認してください。
まとめ
Brutelockはログ監視ベースの自動ブロックツールとして、sshなどをはじめとするよくある認証攻撃に対して有効です。導入はソースからのビルドを含め比較的シンプルで、iptablesやsystemdとの連携で運用できます。導入後はホワイトリスト整備とログ監視を継続し、閾値やルールを調整することが安定運用の鍵です。
重要: いかなる自動ブロック機能を導入する際も、まずはステージング環境でテストし、誤ブロックが業務に影響を与えないよう段階的に本番へ展開してください。