PulledPork
・Perl モジュール
[root]# cpan LWP::UserAgent::Determined Net::SSLeay
LWP::Protocol::https Sys::Syslog Archive::Tar
・インストール
[root]# mkdir -p /usr/local/pulledpork/etc
[root]# git clone https://github.com/shirkdog/pulledpork.git
[root]# cp -v pulledpork/pulledpork.pl /usr/local/pulledpork/
[root]# cp -v pulledpork/etc/* /usr/local/pulledpork/etc/
[root]# chown -R snort:snort /usr/local/pulledpork/
[root]# chmod 755 /usr/local/pulledpork/pulledpork.pl
・設定
[root]# vim /usr/local/pulledpork/etc/pulledpork.conf
# 最新のルールセットより30日遅れのルールセット
rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|<OINKCODE>
# tarball から無視するルールカテゴリ
#ignore=deleted.rules,experimental.rules,local.rules
# 取得した全てのルールを含むファイルのパス
rule_path=/usr/local/snort/rules/snort.rules
# 自作の local.rules ファイルのパス
local_rules=/usr/local/snort/rules/local.rules
# sid-msg.map ファイルのパス
sid_msg=/usr/local/snort/etc/snort/sid-msg.map
# 変更ログファイル
sid_changelog=/var/log/sid_changes.log
# Snort のパス
snort_path=/usr/local/snort/bin/snort
# Snort の設定ファイル
config_path=/usr/local/snort/etc/snort/snort.lua
# ディストリビューション
distro=Centos-8
# IP レピュテーションで使用するブロックリストファイル
block_list=/usr/local/snort/intel/ip-blocklist
# IP リストのリロードで使用するバージョンファイルの設置場所
IPRVersion=/usr/local/snort/intel/
# snort_control ツールの場所
snort_control=/usr/local/bin/snort_control
# Snort の PID ファイル
pid_path=/var/log/snort/snort.pid
# ルールファイルのバージョン(省略時、インストールされた Snort と同じバージョン)
#snort_version=3.1.0.0
snort_version=3.2.0.0
# PulledPork がルールを処理する方法
# enablesid.conf(全てのルールを有効)disablesid.conf(特定のルールを無効)
enablesid=/usr/local/pulledpork/etc/enablesid.conf
dropsid=/usr/local/pulledpork/etc/dropsid.conf
disablesid=/usr/local/pulledpork/etc/disablesid.conf
modifysid=/usr/local/pulledpork/etc/modifysid.conf
# 基本ルールセット
#ips_policy=security <-- コメントアウト
version=0.8.0
・PulledPork を実行し、ルールファイルを更新
[root]# /usr/local/pulledpork/pulledpork.pl
-c /usr/local/pulledpork/etc/pulledpork.conf -PE -v -T -H SIGHUP
-c : 設定ファイル
-P : 新しいルールがダウンロードされていない場合でもルールを処理
-E : 有効なルールのみを出力ファイルに書き込み
-v : 詳細モード
-T : テキストベースのルールファイルのみ処理(so_rules は処理しない)
-H : 設定ファイルに記述 PID に再起動送信(SIGHUP または SIGUSR2)
※ ルールファイルの更新が出来ない場合
[root]# curl -Lo snortrules-snapshot-3200.tar.gz
https://www.snort.org/rules/snortrules-snapshot-3200.tar.gz?oinkcode=<OINKCODE>
[root]# tar xvfz snortrules-snapshot-3200.tar.gz
[root]# cat rules/*.rules > /usr/local/snort/rules/snort.rules
[root]# ls -lh /usr/local/snort/rules/snort.rules
-rw-r--r-- 1 root root 23M 2月 13 17:42 /usr/local/snort/rules/snort.rules
・cron でなく、systemd タイマーで PulledPork を定期実行
[root]# vim /etc/systemd/system/pulledpork.service
[Unit]
Description=PulledPork service for updating Snort 3 rules
Wants=pulledpork.timer
[Service]
Type=oneshot
RemainAfterExit = yes # Type=oneshot 終了後もサービスをアクティブとみなす
ProtectSystem = true # /usr, /boot 読み取りのみ
ProtectHome = true # /home, /root, /run/user アクセスできない
ReadWritePaths = /usr/local/snort /usr/local/pulledpork # 指定ディレクトリ読み書き許可
ExecStart=/usr/local/pulledpork/pulledpork.pl
-c /usr/local/pulledpork/etc/pulledpork.conf -PE -v -T -H SIGHUP
[Install]
WantedBy=multi-user.target
[root]# vim /etc/systemd/system/pulledpork.timer
[Unit]
Description=PulledPork service timer for updating Snort 3 rules
Requires=pulledpork.service
[Timer]
Unit=pulledpork.service
OnCalendar=*-*-* 00:15:00
AccuracySec=1us
[Install]
WantedBy=timers.target
[root]# systemctl daemon-reload
[root]# systemctl enable pulledpork.timer