0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CentOS8(Rocky8)でsnort

Last updated at Posted at 2022-12-13

0.0 環境

Vietual Box 6.1.24
Rocky 8.5
snort 2.9.20

1.0 インストール

snortインストール
# dnf install https://www.snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm

※最新のパッケージのリンクは以下から取得できます(Snort欄)
(https://www.snort.org/downloads#snort-downloads)

よくわからないけど必要な奴
# dnf -y install libdnet

# ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1
rulesファイル取得
# curl -OL https://www.snort.org/downloads/community/community-rules.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   467    0   467    0     0    871      0 --:--:-- --:--:-- --:--:--   871
100  334k  100  334k    0     0   164k      0  0:00:02  0:00:02 --:--:--  571k

# ll | grep rules
-rw-r--r--  1 root root    342342 12月 13 09:29 community-rules.tar.gz

# tar zxvf ./community-rules.tar.gz -C /etc/snort/rules
community-rules/
community-rules/community.rules
community-rules/VRT-License.txt
community-rules/LICENSE
community-rules/AUTHORS
community-rules/snort.conf
community-rules/sid-msg.map

# ll /etc/snort/rules/community-rules
合計 2348
-rw-r--r-- 1 1210 wheel    7834 11月  9  2018 AUTHORS
-rw-r--r-- 1 1210 wheel   15127  3月 20  2013 LICENSE
-rw-r--r-- 1 1210 wheel   21084  2月 25  2021 VRT-License.txt
-rw-r--r-- 1 1210 wheel 1819889 12月  9 04:11 community.rules
-rw-r--r-- 1 1210 wheel  496393 12月  9 04:11 sid-msg.map
-rw-r--r-- 1 1210 wheel   30249  4月 25  2022 snort.conf

※最新のrulesファイルのリンクは以下から取得できます(Rules欄)
(https://www.snort.org/downloads#snort-downloads)

設定ファイルとかっぽいやつ
# find / | egrep -v "mail|rc|run|selinux|usr" | grep -e "snort"
/var/log/snort
/etc/logrotate.d/snort
/etc/sysconfig/snort
/etc/snort
/etc/snort/classification.config
/etc/snort/gen-msg.map
/etc/snort/reference.config
/etc/snort/rules
/etc/snort/rules/community-rules
/etc/snort/rules/community-rules/community.rules
/etc/snort/rules/community-rules/VRT-License.txt
/etc/snort/rules/community-rules/LICENSE
/etc/snort/rules/community-rules/AUTHORS
/etc/snort/rules/community-rules/snort.conf
/etc/snort/rules/community-rules/sid-msg.map
/etc/snort/snort.conf
/etc/snort/threshold.conf
/etc/snort/unicode.map

基本的には「/etc/snort/snort.conf」、「/etc/sysconfig/snort」、「/etc/snort/rules/」だけ触っていれば良さそう。

1.1 snort全体設定

まずは監視対象インタフェース名を変数として設定します

変数設定
# vi /etc/sysconfig/snort

(略)
# What interface should snort listen on?  [Pick only 1 of the next 3!]
# This is -i {interface} on the command line
# This is the snort.conf config interface: {interface} directive
INTERFACE=eth0
(略)

↓ INTERFACEを監視対象のインタフェース名に変更

(略)
# What interface should snort listen on?  [Pick only 1 of the next 3!]
# This is -i {interface} on the command line
# This is the snort.conf config interface: {interface} directive
INTERFACE=enp0s3
(略)

監視対象インタフェースはコマンドライン上で「# snort -i <インタフェース名>」としても指定できます。

インタフェースを複数指定する場合はコマンドライン上では不可能なので、当該ファイルにて以下のように記述します。
1.すべてのインタフェースを監視対象にする場合
 INTERFACE=ALL
2.指定した複数のインタフェースを監視対象にする場合
 INTERFACE="eth1 eth2 eth3 eth4 eth5"

次にメイン設定ファイルである/etc/snort/snort.confを編集します
まずは/etc/snort/snort.conf内で記述されている不要なinclude文をコメントアウトします

include文のコメントアウト
# vi /etc/snort/snort.conf
「include $RULE_PATH」で始まる行を全てコメントアウト(viで置換すれば楽です)

あと、ファイル内のパスがおかしいみたいなので直しておきます

パス修正
# vi /etc/snort/snort.conf
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH ../so_rules
var PREPROC_RULE_PATH ../preproc_rules
var WHITE_LIST_PATH ../rules
var BLACK_LIST_PATH ../rules

↓

var RULE_PATH rules
var SO_RULE_PATH so_rules
var PREPROC_RULE_PATH preproc_rules
var WHITE_LIST_PATH rules
var BLACK_LIST_PATH rules

次に先ほど取得した最新のrulesファイルを読み込んでもらうために/etc/snort/snort.confにinclude設定を入れます

最新のrulesファイル用include設定
# echo "include \$RULE_PATH/community-rules/community.rules" >> /etc/snort/snort.conf

# grep community.rules /etc/snort/snort.conf
include $RULE_PATH/community-rules/community.rules

1.2 rulesファイル設定

次に独自のrulesファイルを作成してみます。今回はssh接続をされた場合にアラートを発生するシグネチャ(ルールのこと)を設定してみます。

独自rulesファイル作成
# echo "include \$RULE_PATH/ssh.rules" >> /etc/snort/snort.conf

# grep ssh.rules /etc/snort/snort.conf
include $RULE_PATH/ssh.rules

# vi /etc/snort/rules/ssh.rules
alert tcp <ssh接続元アドレス> any -> localhost 22 (msg:"ssh connection started"; SID:1;)

シグネチャは
「アクション プロトコル IPアドレス ポート番号 方向演算子 IPアドレス ポート番号 オプション」
の形で定義されます

snortはデーモン再起動時に設定ファイルを読み込みます

設定ファイル読み込み
# systemctl restart snortd

なんかエラーが出ていますね

なんかエラーが出ている
# systemctl status snortd --no-pager -l
(略)
12月 13 11:05:10 localhost.localdomain snort[11929]: FATAL ERROR: /etc/snort/snort.conf(253) Could not stat dynamic module path "/usr/local/lib/snort_dynamicrules": No such file or directory.
(略)

# nl -b a /etc/snort/snort.conf | grep 253
   253  dynamicdetection directory /usr/local/lib/snort_dynamicrules

とりあえず参考ページに従ってディレクトリを作成してみます(参考:https://www.unix-power.net/networking/post-758)

/usr/local/lib/snort_dynamicrules作成
# touch /etc/snort/rules/white_list.rules

# touch /etc/snort/rules/black_list.rules

# mkdir -p /usr/local/lib/snort_dynamicrules

# chown -R snort.snort /usr/local/lib/snort_dynamicrules

# chmod -R 700 /usr/local/lib/snort_dynamicrules

# ls -ld /usr/local/lib/snort_dynamicrules
drwx------ 2 snort snort 6 12月 13 11:17 /usr/local/lib/snort_dynamicrules

そしてsnortを再起動してみると、

無事に動いたっぽい
[root@localhost ~]# systemctl status snortd --no-pager -l
● snortd.service - SYSV: snort is a lightweight network intrusion detection tool that currently detects more than 1100 host and network vulnerabilities, portscans, backdoors, and more.
   Loaded: loaded (/etc/rc.d/init.d/snortd; generated)
   Active: active (running) since Tue 2022-12-13 11:35:43 JST; 1s ago
(略)

ここまでで独自のrulesファイルは作成できたので、実際にアラートが発生するか確認してみます。ssh接続時に/var/log/snort/alertとかにログが出るはず。

独自rulesファイル動作確認
※snortをインストールしたサーバに22/tcpでssh接続

# tail /var/log/snort/alert
12/13-11:40:04.962301  [**] [1:1:0] ssh connection started [**] [Priority: 0] {TCP} 172.19.67.55:49757 -> 172.19.67.193:22

※ログが出たのはいいですが同じログを無限に吐き出しつづけていますね・・・この辺は後で調べます・・・。
# ll /var/log/snort/alert
-rw-r--r-- 1 root root 7872 12月 13 11:39 /var/log/snort/alert
# ll /var/log/snort/alert
-rw-r--r-- 1 root root 32841 12月 13 11:39 /var/log/snort/alert
# ll /var/log/snort/alert
-rw-r--r-- 1 root root 33579 12月 13 11:39 /var/log/snort/alert

sshのパケット量見た感じこれで正常っぽいですね。

ちなみに、snortではバイナリ形式のログも作成されるのですがそちらは以下のようにして見ることが可能です。

バイナリ形式のログ確認
# ll /var/log/snort/
合計 316
-rw-r--r-- 1 root  root  113341 12月 13 13:31 alert
-rw------- 1 snort snort  23756 12月 13 11:39 snort.log.1670898943
-rw------- 1 snort snort  39472 12月 13 11:42 snort.log.1670899142
-rw------- 1 snort snort   4095 12月 13 13:07 snort.log.1670904383
-rw------- 1 snort snort  10670 12月 13 13:15 snort.log.1670904706
-rw------- 1 snort snort   1068 12月 13 13:23 snort.log.1670905353
-rw------- 1 snort snort  61920 12月 13 13:26 snort.log.1670905429
-rw------- 1 snort snort  24358 12月 13 13:30 snort.log.1670905618
-rw------- 1 snort snort  10862 12月 13 13:31 snort.log.1670905825
-rw------- 1 snort snort      6 12月 13 13:30 snort_enp0s3.pid
-rw------- 1 snort snort      0 12月 13 13:30 snort_enp0s3.pid.lck

# tcpdump -r /var/log/snort/snort.log.1670905825 | tail -n 3
reading from file /var/log/snort/snort.log.1670905825, link-type EN10MB (Ethernet)
dropped privs to tcpdump
13:34:07.541155 IP 172.19.67.55.51689 > localhost.localdomain.ssh: Flags [P.], seq 3492:3528, ack 10013, win 4101, length 36
13:34:07.583390 IP 172.19.67.55.51689 > localhost.localdomain.ssh: Flags [.], ack 10065, win 4101, length 0
13:34:07.913518 IP 172.19.67.55.51689 > localhost.localdomain.ssh: Flags [P.], seq 3528:3564, ack 10065, win 4101, length 36

再起動のたびにファイルが新規作成されるっぽい

2.1 snort自動起動設定

自動起動設定
# systemctl enable snortd
snortd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable snortd

# systemctl status snortd --no-pager -l
● snortd.service - SYSV: snort is a lightweight network intrusion detection tool that currently detects more than 1100 host and network vulnerabilities, portscans, backdoors, and more.
   Loaded: loaded (/etc/rc.d/init.d/snortd; generated)
   Active: active (exited) since Tue 2022-12-13 09:55:03 JST; 45s ago
   (略)

3.1 参考

【Linux】CentOS 8 Snort(不正侵入検知システム) インストールメモ(https://acind.hatenablog.jp/entry/2020/06/16/110106)

CentOS7 Snortのインストール
(https://www.unix-power.net/networking/post-758)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?