Installation#

last update 2025/06/29

summary#


environment#

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を追加する#

  1. ハンバーガーメニューから Management > Fleet をクリック

../../_images/setup011.png
  1. エージェントポリシー タブに遷移

../../_images/setup11.png
  1. Fleet Server Policy をクリック

../../_images/setup12.png
  1. 統合の追加 をクリック

../../_images/setup13.png
  1. Suricata をクリック

../../_images/setup021.png
  1. 設定 タブに遷移し Suricataアセットをインストール をクリック

../../_images/setup031.png
  1. Suricataをインストール をクリック

../../_images/setup041.png
  1. 構成 タブに遷移し、YAMLデータを監視先ホストのelastic-agent.ymlに追記する

../../_images/setup051.png
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
  1. Suricataの追加 をクリック

../../_images/setup061.png
  1. 下記入力の上 保存して続行 をクリック

項目

統合名

suricata

../../_images/setup071.png
  1. 変更を保存してデプロイ をクリック

../../_images/setup081.png
  1. エージェントポリシーに suricata が追加されていることを確認

../../_images/setup091.png

データが収集されていることを確認#

  1. ハンバーガーメニューから Analytics > Dashboard をクリック

../../_images/setup101.png
  1. suricata を検索し [Logs Suricata] Events Overview をクリック

../../_images/setup111.png
  1. データが表示されることを確認

../../_images/setup121.png