検知ルール情報取得 / Suricata
NexusのBlack IPをSuricataへ取り込み、攻撃元との通信や危険なIPへの接続を検知できます。
利用プランと取得頻度
| プラン | リスト取得 |
|---|---|
| Standard | 取得成功から7日後に再取得可能 |
| Professional | 取得成功から24時間後に再取得可能 |
| Enterprise / Developer | 取得回数の制限なし |
回数は契約(組織・Nexus)単位で合算します。複数キーを作っても増えません。既存REST APIのEnterprise限定とは別の配信機能です。
Freeでもこの案内ページをご覧いただけます。配信の取得には有効なNexus有料契約とAPIキーが必要です。
1. APIキーを準備
契約管理モーダルの「Nexus APIキー」でキーを発行します。発行直後だけ表示されるため保存してください。同じキーをSuricata配信に使用できます。
curl --fail --show-error -H "Authorization: Bearer $SENDA_API_KEY" "http://nexus.senda-lab.jp/api/v1/feeds/suricata/senda.list" -o senda.list
正常時はIPv4・IPv6のIPアドレスを1行1件で返します。制限中は429とRetry-After(秒)を返します。認証失敗・データ生成失敗では回数を消費しません。200で空リストを返した場合も正常取得です。
2. Suricataを設定
以下は検知(alert)用です。既存のsuricata.yamlへ項目を統合してください。カテゴリ番号1が使用済みなら、空いている1〜60の番号を使い、更新設定のcategory_idも合わせます。
# /etc/suricata/iprep/categories.txt に追加 1,SENDA_BLACK,Senda Nexus Black IP # suricata.yaml reputation-categories-file: /etc/suricata/iprep/categories.txt default-reputation-path: /etc/suricata/iprep reputation-files: - senda.reputation # 既存のrule-filesに追加 rule-files: - senda.rules
# /etc/suricata/rules/senda.rules(SIDが既存ルールと重複しないこと) alert ip any any -> $HOME_NET any (msg:"SENDA Black IP source"; iprep:src,SENDA_BLACK,>,0; sid:9900001; rev:1;) alert ip $HOME_NET any -> any any (msg:"SENDA Black IP destination"; iprep:dst,SENDA_BLACK,>,0; sid:9900002; rev:1;)
HOME_NETを監視対象ネットワークに設定してください。最初は空のsenda.reputationを作成し、suricata -T -c /etc/suricata/suricata.yamlで設定を確認します。カテゴリや設定の初回変更時はSuricataを再起動します。
3. 自動取得・再読み込み
更新スクリプト(Python 3)をダウンロードし、/usr/local/sbin/update_senda_suricata.pyへ配置します。
# /etc/suricata/senda-feed.json
{
"url": "http://nexus.senda-lab.jp/api/v1/feeds/suricata/senda.list",
"api_key": "発行したAPIキー",
"directory": "/etc/suricata/iprep",
"category_id": 1,
"service": "suricata"
}
sudo chmod 600 /etc/suricata/senda-feed.json
sudo python3 /usr/local/sbin/update_senda_suricata.py
キーはコマンド引数に出しません。取得・形式検証が成功してからファイルを置換し、SuricataへUSR2を送信します。初回のカテゴリ登録は再起動が必要です。
# rootのcron。判定はNexus側で行うため、プラン変更後も同じ設定を使えます。 # Standard / Professionalは上限中429となり、既存ファイルを保持します。 0 * * * * /usr/bin/python3 /usr/local/sbin/update_senda_suricata.py >> /var/log/senda-suricata.log 2>&1 # 取得済みファイルを再適用する場合(API回数を消費しません) sudo python3 /usr/local/sbin/update_senda_suricata.py --apply-only
API取得に成功した後でローカルの適用に失敗した場合は、保存したsenda.download.txtを--apply-onlyで再適用できます。USR2送信成功後のエンジン側エラーはSuricataログでも確認してください。Docker等でSuricataを実行する場合は、サービス名や再読み込み方法を環境に合わせます。
配信データについて
既存Black IP APIと同じhony_intelを使用し、初期設定は直近7日の観測です。明示的に無効・期限切れのIP、非公開アドレス、重複は除外します。取得時点のスナップショットなので、Standardは次の取得まで更新情報を反映できません。
本番の配信URLはHTTPSを使用してください。APIキーはログや公開ファイルへ掲載しないでください。
Suricata公式:設定・再読み込み / 配信形式 / iprepルール