SafeLine は、Web アプリケーションとインターネットの間で HTTP トラフィックを監視・フィルタリングするセルフホスト型の WAF です。SQLインジェクション、XSS、コードインジェクション、OSコマンドインジェクション、CRLFインジェクション、LDAPインジェクション、XPathインジェクション、RCE、XXE、SSRF、パストラバーサル、バックドアなどの攻撃をブロックします。リバースプロキシとして動作し、クライアントの通信は本来のサーバーへ届く前に SafeLine を通過し、安全になったトラフィックだけが実際のアプリケーションへ転送されます。公式ドキュメント(https://docs.waf.chaitin.com/en/home)にはヘルスチェック間隔専用のフィールドが用意されていません。そのため本記事では、ドキュメントで確認できるセットアップ手順と、アップストリーム監視の設定に適用すべき判断チェックリストを分けて整理します。
セットアップ手順
- ホストの依存関係を確認します。SafeLine は Linux の x86_64 または arm64 アーキテクチャ、Docker 20.10.14 以上、Docker Compose 2.0.0 以上、1 コア以上の CPU、1 GB 以上のメモリ、5 GB 以上のディスク、ssse3 対応が必要です。uname -m、docker version、docker compose version、free -h、df -h を実行して環境を確かめます。
- root 権限で自動インストーラーを実行します。bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en を実行すると、SafeLine がインストールされ、Web コンソールが使える状態になります。
- 手動インストールの場合は、mkdir -p "/data/safeline" でデータディレクトリを作成し、wget "https://waf.chaitin.com/release/latest/compose.yaml" で compose ファイルを取得します。.env に SAFELINE_DIR、IMAGE_TAG、MGT_PORT、POSTGRES_PASSWORD、検出器管理トークンなどの必須値を書き込み、docker compose up -d で起動します。
- Web コンソールを https://:9443/ で開きます。docker exec safeline-mgt resetadmin を実行すると初期ユーザー admin と生成されたパスワードが返るので、これで管理者アカウントを作成します。
- アプリケーションを登録します。Applications ページで Add Application をクリックし、Domain、SafeLine が待ち受ける Port(80 や 443 など)、実際のアプリへ転送するための Upstream を入力します。HTTPS アプリケーションの場合は SSL オプションを有効にします。
- ドメイン名を SafeLine が動作するサーバーの IP アドレスに解決し、そのドメイン経由でアプリケーションへアクセスしてプロキシ経路が生きていることを確認します。
ヘルスチェックの判断チェックリスト
SafeLine は nginx を基盤としており、Add Application の流れでは Upstream の値を転送先として扱います。提供されているドキュメントにはヘルスチェック間隔を個別に制御する項目が定義されていないため、隠れた既定値を勝手に想定しないでください。監視動作を変更する前に、次の点を確認します。
- アップストリームが、SafeLine が使うプローブ方式(TCP 接続チェックか HTTP リクエストか)を実際に受け付けられるか。
- チェックのタイムアウトを間隔より短く設定し、応答の遅いアップストリームが次のプローブと重ならずに確実に失敗扱いになるようにする。
- 間隔は、本来のサーバーをどれだけ早くダウンと判定したいかに合わせて選ぶ。間隔を短くすると障害検知は早いが、プローブのトラフィックは増える。
- 何回連続で失敗したらアップストリームを異常と見なし、何回成功したら復帰と見なすかを決める。
- デプロイ後にアップストリームの状態を監視し、推測ではなく実際の障害挙動で設定した間隔を検証する。
よくある設定ミス
もっとも多いのは、チェックのタイムアウトを間隔より長く設定してしまうケースです。たとえば、間隔を 5 秒にしたのにタイムアウトを 10 秒にすると、前のプローブの応答を待っている間に次のプローブが始まってしまいます。応答が遅いアップストリームではプローブが次々と重なり、一時的な遅延を恒常的な障害と誤判定したり、プローブの負荷が本来のサーバーを圧迫したりします。この場合、タイムアウトを間隔より短い値(例として間隔 10 秒に対してタイムアウト 3 秒など)に戻すことが修正の基本です。
修正の確認方法
修正後は、ドメインを SafeLine のサーバー IP に解決したうえで、そのドメイン経由でアプリケーションへアクセスします。攻撃テストのリクエストがブロックページを返すこと、そして Web コンソール(https://:9443)にブロックされた試行が一覧表示されることを確認してください。SafeLine は nginx ベースなので、アップストリーム接続の失敗やタイムアウトは nginx のログに現れるのが一般的です。コンソール上の表示とログの両方で、プローブが正常に完了し、アップストリームが想定どおりの間隔で監視されていることを確認できれば、修正は完了です。
まとめ
公式ドキュメントにはヘルスチェック間隔の専用項目がないため、まずは正しいセットアップと正しい Upstream 登録を済ませたうえで、プローブ方式・タイムアウト・間隔・失敗閾値・復帰閾値を自分の環境に合わせて決めることが大切です。設定変更の前には必ずチェックリストで確認し、変更後は Web コンソールとログで実動作を検証しましょう。
- Demo: https://demo.waf.chaitin.com:9443/statistics
- Official docs: https://docs.waf.chaitin.com/en/home
- GitHub: https://github.com/chaitin/SafeLine