Installation#
last update 2025/06/29
summary#
environment#
OS |
Suricata |
|---|---|
AlmaLinux 9 |
7.0.5 |
OS setting#
ちなみに
デフォルトではOSクライアント毎にジャーナルファイルが生成されるが、一つのジャーナルファイルに記録する設定に変更する
# ジャーナルの設定を変更
sed -i -e 's/#SplitMode=uid/SplitMode=none/' /etc/systemd/journald.conf
# 再起動
init 6
Install#
dnf -y install epel-release dnf-plugins-core
dnf -y copr enable @oisf/suricata-7.0
dnf -y install suricata
Starting Suricata#
Auto Boot#
systemctl enable suricata
Start#
systemctl start suricata
Stop#
systemctl stop suricata
Reload#
systemctl reload suricata
configuration#
パフォーマンス設定の詳細は 公式 を参照
# 実行モード
## 基本設定
## single
## workers
## autofp
## suricata --list-runmode で各モードの詳細が表示される
sed -i -e 's/#runmode: autofp/runmode: autofp/' /etc/suricata/suricata.yaml
# ユーザ・グループ
## 基本設定
sed -i -e 's/# user: suri/ user: suri/' /etc/suricata/suricata.yaml
sed -i -e 's/# group: suri/ group: suri/' /etc/suricata/suricata.yaml
# PIDファイル
## 基本設定
## プロセスIDの有効化
sed -i -e 's/#pid-file: \/var\/run\/suricata.pid/pid-file: \/var\/run\/suricata.pid/' /etc/suricata/suricata.yaml
# pf-ring
## 基本設定
### パケットキャプチャするインターフェースの設定
### pfring:
### - interface: eth0
### threads: auto = 受信スレッド数 auto の場合、CPU(コア)カウントを使用、またはRSSキューカウントを使用
### cluster-id: 99 = クラスタID ロードバランスする際、参加するすべてのスレッドに同じIDを設定
### cluster-type: cluster_flow = 下記の負荷分散を行う
#### cluster_flow : SRC IP、SRC_PORT、DST IP、DST ポート、PRAT、VLAN
#### cluster_inner_flow : SRC IP、SRC ポート、DST IP、DST ポート、プラット、VLAN
#### cluster_inner_flow_2_tuple : 送信元 IP、DST IP
#### cluster_inner_flow_4_tuple : SRC IP、SRC ポート、DST IP、DST ポート
#### cluster_inner_flow_5_tuple : SRC IP、SRC ポート、DST IP、DST ポート、Pret
#### cluster_round_robin : 非推奨
# HTTP解析設定
## 検知設定・パフォーマンス設定
## デフォルト設定
### default-config:
### personality: IDS
### request-body-limit: 100kb
### response-body-limit: 100kb
### request-body-minimal-inspect-size: 32kb
### request-body-inspect-window: 4kb
### response-body-minimal-inspect-size: 40kb
## リソースの枯渇によるDOS回避の設定 制限が低いほど、DOSに対する保護は優れるが、誤検知につながる可能性もある
sed -i -e 's/#decompression-time-limit: 100000/decompression-time-limit: 100000/' /etc/suricata/suricata.yaml
## フローあたりの最大ライブ・トランザクション数
sed -i -e 's/#max-tx: 512/max-tx: 512/' /etc/suricata/suricata.yaml
## HTTPサーバ設定
### 手動設定の例
server-config:
- apache:
address: [192.168.1.0/24, 127.0.0.0/8, "::1"]
personality: Apache_2
request-body-limit: 4096
response-body-limit: 4096
double-decode-path: no
double-decode-query: no
## HTTP2設定
### http2.max-table-size = RFC 7540 セクション 6.5.2 のSETTINGS_HEADER_TABLE_SIZEを参照 デフォルト値は4096bite
### http2.max-streams = RFC 7540 セクション 6.5.2 のSETTINGS_MAX_CONCURRENT_STREAMSを参照 デフォルト値は無制限
### max-reassembly-size = ヘッダ+継続フレームの最大再組み立てサイズ
# SSL/TLS
## 検知設定
### tls:
### enabled: yes
### detection-ports:
### dp: 443
### encryption-handling が bypass の場合、セッションの処理は停止され、それ以上の解析・検査は実施されない
### default、content の場合、SSL/TLSセッションを継続し、暗号化による制限内で検査を実施する
### full の場合、通常通り検査を実施する
sed -i -e 's/#encryption-handling: default/encryption-handling: full/' /etc/suricata/suricata.yaml
# アクションの順序
## 検知設定
## pass = シグネチャにpassが含まれる場合、すべてのルールの最後までスキップする
## drop = IPSインラインモードに関係 シグネチャにdropが含まれる場合、アラートを生成し通信を停止する
## reject = IPSインラインモードに関係 シグネチャにrejectが含まれる場合、アラートを生成し通信を停止する
## alert = シグネチャにalertが含まれる場合、アラートを生成する
sed -i -e 's/# action-order:/action-order:/' /etc/suricata/suricata.yaml
sed -i -e 's/# - pass/ - pass/' /etc/suricata/suricata.yaml
sed -i -e 's/# - drop/ - drop/' /etc/suricata/suricata.yaml
sed -i -e 's/# - reject/ - reject/' /etc/suricata/suricata.yaml
sed -i -e 's/# - alert/ - alert/' /etc/suricata/suricata.yaml
# プレフィルタエンジン
## 検知設定
## mpm (fast_pattern) = defalt ルールごとに一つのパターンが取得される
## auto = 下記でプレフィルタエンジンを確認できる
## 'suricata --list-keywords=all'で利用できる非MPMプレフィルタエンジンが確認できる
# 検知レベル
## 検知設定
sed -i -e 's/# default: \"medium\"/ default: \"low\"/' /etc/suricata/suricata.yaml
# IPSモード
## 検知設定
## IPSの設定を有効化
# interface: のインターフェースから copy-iface: のインターフェースにコピーされる
# copy-mode: ips = dropに該当するパケットをドロップする
# copy-mode: tap = ブリッジモードで機能し、すべてのパケットをコピーする
sed -i -e 's/#copy-mode: ips/copy-mode: ips/' /etc/suricata/suricata.yaml
sed -i -e 's/#copy-iface: eth1/copy-iface: eth1/' /etc/suricata/suricata.yaml
sed -i -e 's/copy-mode: none/copy-mode: ips/' /etc/suricata/suricata.yaml
sed -i -e 's/copy-iface: none/copy-iface: <PCIe address>/' /etc/suricata/suricata.yaml
# verdictスレッドの設定
sed -i -e 's/#- verdict-cpu-set:/- verdict-cpu-set:/' /etc/suricata/suricata.yaml
sed -i -e 's/# cpu: \[/ cpu: \[/' /etc/suricata/suricata.yaml
sed -i -e 's/# prio:/ prio:/' /etc/suricata/suricata.yaml
sed -i -e 's/# default:/ default:/' /etc/suricata/suricata.yaml
IPSモードの詳細は ドキュメント を参照
# コア数
## デフォルトはCPU/CPUコア数の1.5倍
sed -i -e 's/detect-thread-ratio: 1.0/detect-thread-ratio: 2.0/' /etc/suricata/suricata.yaml
# スタックサイズ
## パフォーマンス設定
## default 8MB だがそのままでは小さ過ぎるので必ず上げる
sed -i -e 's/#stack-size: 8mb/stack-size: 32mb/' /etc/suricata/suricata.yaml
# 最大保留パケット数
## パフォーマンス設定
## 設定数に合わせてメモリが確保される
sed -i -e 's/#max-pending-packets: 1024/max-pending-packets: 2024/' /etc/suricata/suricata.yaml
# デフォルトパケットサイズ
## パフォーマンス設定
## max-pending-packets を使用する際のパケットサイズ
## パケットサイズを増やし過ぎるとパフォーマンスが低下する
sed -i -e 's/#default-packet-size: 1514/default-packet-size: 1514/' /etc/suricata/suricata.yaml
# パケットアラートキュー
## パフォーマンス設定
## 破棄されたアラートの数が多い場合をのぞき、既定値が推奨
sed -i -e 's/#packet-alert-max: 15/packet-alert-max: 15/' /etc/suricata/suricata.yaml
# フロー(flow:)
## パフォーマンス設定
## memcap = 最大バイト数(default: 128mb)
## memcap-policy = IPSモードでの例外ポリシー drop-packet pass-packet reject ignore から選択(default: ignore)
## hash-size = flow-engineのハッシュテーブルサイズ(default: 65536)
## prealloc = SURICATAがメモリ上に準備しておかなければならないフローの量(default: 10000)
## emergency-recovery = memcapに到達した時点でflow-engineが緊急モードになり、通常時より短いタイムアウト値を使用(default: 30)
# フロータイムアウト(flow-timeouts:)
## パフォーマンス設定
## default、tcp、udp、icmp 毎に設定
## new = new 状態の最後のアクティビティからのタイムアウト値
## established = established状態で最後に動作してからのタイムアウト値
## closed = close 状態の最後のアクティビティからのタイムアウト値
## bypassed = bypassed 状態の最後のアクティビティからのタイムアウト値
## emergency-new = new 状態の最後のアクティビティからのタイムアウト値(緊急時)
## emergency-established = established状態で最後に動作してからのタイムアウト値(緊急時)
## emergency-closed = close 状態の最後のアクティビティからのタイムアウト値(緊急時)
## emergency-bypassed = bypassed 状態の最後のアクティビティからのタイムアウト値(緊急時)
# ストリームエンジン(stream:)
## パフォーマンス設定
## TCP接続を追跡する
## memcap = 最大バイト数(default: 64mb)
## memcap-policy = IPSモードでの例外ポリシー drop-flow drop-packet pass-flow pass-packet bypass reject ignore から選択(default: ignore)
## checksum-validation = パケットのチェックサムを検証し、無効なチェックサムを持つパケットを拒否する
rule set#
rules update#
suricata-update
ちなみに
/var/lib/suricata/rules/suricata.rules にルールが追加される
check error#
sudo suricata -T -c /etc/suricata/suricata.yaml -v
adding rules#
無料のルールを追加する
suricata-update update-sources
suricata-update enable-source tgreen/hunting
suricata-update enable-source oisf/trafficid
suricata-update enable-source abuse.ch/sslbl-blacklist
suricata-update enable-source abuse.ch/sslbl-ja3
suricata-update enable-source abuse.ch/sslbl-c2
suricata-update enable-source abuse.ch/feodotracker
suricata-update enable-source abuse.ch/urlhaus
suricata-update enable-source etnetera/aggressive
suricata-update enable-source tgreen/hunting
suricata-update enable-source malsilo/win-malware
suricata-update enable-source stamus/lateral
suricata-update enable-source pawpatrules
ちなみに
その他、有償を含むルールセットは 'suricata-update list-sources' でチェックすることができる
Reload rules#
systemctl reload suricata
検知の視覚化#
Elastic Stackを用いた視覚化#
Elastic Stackのインストールは Elastic Stack に記載
Suricata用のIntegrationを追加する#
ハンバーガーメニューから Management > Fleet をクリック
エージェントポリシー タブに遷移
Fleet Server Policy をクリック
統合の追加 をクリック
Suricata をクリック
設定 タブに遷移し Suricataアセットをインストール をクリック
Suricataをインストール をクリック
構成 タブに遷移し、YAMLデータを監視先ホストのelastic-agent.ymlに追記する
cat <<__EOT__>> /opt/Elastic/Agent/elastic-agent.yml
inputs:
- id: logfile-suricata
type: logfile
streams:
- id: logfile-suricata.eve
data_stream:
dataset: suricata.eve
type: logs
paths:
- /var/log/suricata/eve.json
exclude_files:
- \.gz$
tags:
- forwarded
- suricata-eve
publisher_pipeline.disable_host: true
processors:
- add_observer_metadata: null
__EOT__
systemctl restart elastic-agent
Suricataの追加 をクリック
下記入力の上 保存して続行 をクリック
項目 |
値 |
|---|---|
統合名 |
suricata |
変更を保存してデプロイ をクリック
エージェントポリシーに suricata が追加されていることを確認
データが収集されていることを確認#
ハンバーガーメニューから Analytics > Dashboard をクリック
suricata を検索し [Logs Suricata] Events Overview をクリック
データが表示されることを確認