このステップでは、ネットワークトラフィックの特定のパターンを検出するために、独自の Suricata ルールを作成してテストする方法を学びます。実践的な例として、テストドメイン(example.com)への HTTP リクエストを検出することに焦点を当てます。カスタムルールを使用すると、Suricata の検出機能をデフォルトのルールセットを超えて拡張することができます。
-
まず、Suricata が検出ルールを保存しているルールディレクトリに移動します。
cd /var/lib/suricata/rules
ここには通常、すべての Suricata ルールファイルが保存されています。既存のルールと整理して管理するために、ここにカスタムルールを追加します。
-
カスタムルール専用の新しいルールファイルを作成します。
sudo nano custom.rules
ルールディレクトリを変更するには管理者権限が必要なので、sudo
を使用する必要があります。ファイル名を custom.rules
とすることで、Suricata のデフォルトのルールファイルと明確に区別します。
-
以下のルールを追加して、example.com への HTTP リクエストを検出します。
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
このルールが何をするかを分解して説明します。
alert http
:HTTP トラフィックに対してアラートをトリガーします。
any any -> any any
:任意のソースポートから任意の宛先ポートへのトラフィックに適用されます。
msg
:人間が読めるアラートメッセージを提供します。
flow:to_server
:サーバーに向かうトラフィックのみに一致します。
http.host
:HTTP ホストヘッダーを調べます。
content:"example.com"
:この特定のドメインを探します。
nocase
:大文字小文字を区別せずに一致させます。
sid:1000002
:ルールに一意の ID を付けます(カスタムルールは 1,000,000 以上)。
rev:1
:これがルールの最初のバージョンであることを示します。
-
nano エディタで、Ctrl+O(書き出し)を押してから Enter で確認し、Ctrl+X で終了してファイルを保存します。
-
次に、Suricata に新しいルールファイルを読み込むように指示する必要があります。メインの設定を編集します。
sudo nano /etc/suricata/suricata.yaml
rule-files:
セクション(通常は 50 - 60 行目付近)を見つけて、以下を追加します。
- custom.rules
この追加により、Suricata が起動するときにカスタムルールを読み込むようになります。
-
変更を適用する前に、ルールの構文が正しいことを確認します。
sudo suricata -T -c /etc/suricata/suricata.yaml -v
-T
フラグは、Suricata に実際に実行せずに設定をテストするように指示します。これにより、ルールを使用する前に構文エラーを見つけることができます。
-
新しいルールを読み込むために Suricata を再起動します。
sudo pkill suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
最初のコマンドは実行中の Suricata インスタンスを停止し、2 番目のコマンドは更新された設定で新たに起動します。
-
ルールが機能するかテストするために、example.com への HTTP トラフィックを生成します。
curl http://example.com
このコマンドは、新しいルールをトリガーするはずの単純な HTTP リクエストを行います。
-
最後に、最新のアラートを表示して、Suricata がトラフィックを検出したかどうかを確認します。
sudo tail -n 5 /var/log/suricata/fast.log
example.com への HTTP リクエストに関するカスタムルールのメッセージに一致するアラートが表示されるはずです。表示されない場合は、各ステップを再確認し、ルールの構文を検証してください。