【Snort2.9.9.0】inlineモードで動作するSnortのインストール(4)

2017年3月30日CentOS, SnortCentOS7, inline-mode, ips, SnortCentOS, Snort, ips, Snort

今回はSnortの設定について説明します。少々長くなりますが、ご勘弁を。

*以下の環境を前提としています。

*Snortのディレクトリ構成
/var/home/ap/snort+
                  |
                  +--bin
                  |
                  +--etc
                  |
                  +--include
                  |
                  +--lib
                  |
                  +--share
                  |
                  +--src
*ネット環境
*内部Webサーバのデフォルトゲートウェイは「192.168.1.1」に設定されている物とします。
*内部WebサーバでApache、Nginx等を用いたWebサイトが既に稼働している物とします。
Internet---------------------Snortサーバ---------------------内部Webサーバ
                eth0:210.130.0.1     eth1:192.168.1.1        eth0:192.168.1.2
*Snortサーバにて、IP転送がONになっている物とします。
view /etc/sysctl.conf

net.ipv4.ip_forward = 1

まず、ルールファイルをダウンロードして、/var/home/ap/snort/etc配下に展開します。
*Snortサイトでユーザ登録済みで、oinkコードを取得済みであることを前提としてます。

cd /var/home/ap/snort/etc
wget  https://www.snort.org/rules/snortrules-snapshot-2990.tar.gz?oinkcode=(oinkコード) -O snortrules-snapshot-2990.tar.gz
tar xvfz snortrules-snapshot-2990.tar.gz

ルールを展開すると以下のようなディレクトリ構成になります。

/var/home/ap/snort+
                  |
                  +--bin
                  |
                  +--etc
                  |   +---preproc_rules ←
                  |   |         ←
                  |   +---rules         ←ルールファイルを
                  |   |                 ←展開すると作成さ
                  |   +---so_rules      ←れるディレクトリ
                  |   |                 ←です。
                  |   +---etc           ←
                  +--include
                  |
                  +--lib
                  |
                  +--share
                  |
                  +--src

ダウンロードした設定ファイルで既存のファイルを上書きします。

cd /var/home/ap/snort/etc
cp ./etc/* ./

ブラックリストファイル・ホワイトリストファイルを作成します。

cd /var/home/ap/snort/etc/rules
touch white_list.rules
touch black_list.rules

各ディレクトリ、Snortユーザ・グループを作成します。

mkdir /var/log/snort
mkdir /var/home/ap/snort/lib/snort_dynamicrules
groupadd snort
useradd -g snort -d /var/log/snort -s /sbin/nologin snort

ダイナミックルールをコピーします。

cd /var/home/ap/snort/lib/snort_dynamicrules/
cp /var/home/ap/snort/so_rules/precompiled/Centos-5-4/x86-64/2.9.9.0/* .

各ファイルの権限を変更します。

cd /var/home/ap/snort/lib
chmod -R 700 snort* pkgconfig
cd /var/home/ap/snort/bin
chmod 700 u2boat u2spewfoo
cd /var/home/lib/daq/bin
chmod 700 daq-modules-config

ファイルオーナー、グループを変更します。

cd /
chown -R snort:snort /var/log/snort \
                     /var/home/ap/snort \
                     /var/home/lib/daq/bin/daq-modules-config

/var/home/ap/snort/etc配下のsnort.confの設定します。

(中略)
# Setup the network addresses you are protecting
Snortサーバの外側のIP、内部側のサブネットを定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ipvar HOME_NET [210.130.0.1/32,192.168.1.0/24] 
(中略)
# Set up the external network addresses. Leave as "any" in most situations
HOME_NET以外は信頼できない外部ネットワークである事を定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ipvar EXTERNAL_NET !$HOME_NET
(中略)
各種ルールファイルへのパスを定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var RULE_PATH /var/home/ap/snort/etc/rules
var SO_RULE_PATH /var/home/ap/snort/etc/so_rules
var PREPROC_RULE_PATH /var/home/ap/snort/etc/preproc_rules
(中略)
ブラックリストファイル・ホワイトリストファイルのパスを定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var WHITE_LIST_PATH /var/home/ap/snort/etc/rules
var BLACK_LIST_PATH /var/home/ap/snort/etc/rules
(中略)
DAQモジュールの設定を定義します。
#ここの定義がinlineモードで動作する設定となります。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
config daq: nfq
config daq_dir: /var/home/lib/daq/lib/daq/
config daq_mode: inline
config daq_var: queue=2
config policy_mode: inline
(中略)
ダイナミックプロセッサのパスを定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# path to dynamic preprocessor libraries
dynamicpreprocessor directory /var/home/ap/snort/lib/snort_dynamicpreprocessor/
# path to base preprocessor engine
dynamicengine /var/home/ap/snort/lib/snort_dynamicengine/libsf_engine.so
# path to dynamic rules libraries
dynamicdetection directory /var/home/ap/snort/lib/snort_dynamicrules
(中略)
プリプロセッサのパスを定義します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
include $PREPROC_RULE_PATH/preprocessor.rules
include $PREPROC_RULE_PATH/decoder.rules
include $PREPROC_RULE_PATH/sensitive-data.rules
(中略)
コメントアウトされている以下のルールを有効にします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# dynamic library rules
 include $SO_RULE_PATH/browser-ie.rules
 include $SO_RULE_PATH/browser-other.rules
 include $SO_RULE_PATH/exploit-kit.rules
 include $SO_RULE_PATH/file-flash.rules
 include $SO_RULE_PATH/file-image.rules
 include $SO_RULE_PATH/file-java.rules
 include $SO_RULE_PATH/file-multimedia.rules
 include $SO_RULE_PATH/file-office.rules
 include $SO_RULE_PATH/file-other.rules
 include $SO_RULE_PATH/file-pdf.rules
 include $SO_RULE_PATH/indicator-shellcode.rules
 include $SO_RULE_PATH/malware-cnc.rules
 include $SO_RULE_PATH/malware-other.rules
 include $SO_RULE_PATH/netbios.rules
 include $SO_RULE_PATH/os-linux.rules
 include $SO_RULE_PATH/os-other.rules
 include $SO_RULE_PATH/os-windows.rules
 include $SO_RULE_PATH/policy-social.rules
 include $SO_RULE_PATH/protocol-dns.rules
 include $SO_RULE_PATH/protocol-nntp.rules
 include $SO_RULE_PATH/protocol-other.rules
 include $SO_RULE_PATH/protocol-snmp.rules
 include $SO_RULE_PATH/protocol-voip.rules
 include $SO_RULE_PATH/pua-p2p.rules
 include $SO_RULE_PATH/server-apache.rules
 include $SO_RULE_PATH/server-iis.rules
 include $SO_RULE_PATH/server-mail.rules
 include $SO_RULE_PATH/server-mysql.rules
 include $SO_RULE_PATH/server-oracle.rules
 include $SO_RULE_PATH/server-other.rules
 include $SO_RULE_PATH/server-webapp.rules

起動設定ファイルを作成します。

view /usr/lib/systemd/system/snort.service

[Unit]
Description=Snort NIDS Daemon
After=syslog.target network.target

[Service]
Type=simple
Environment="LD_LIBRARY_PATH=/var/home/lib/openssl/lib:/var/home/lib/libdnet/lib:/var/home/lib/libnfnetlink/lib:/var/home/lib/libmnl/lib:/var/home/lib/libnetfilter_queue/lib:/var/home/lib/daqa/lib:/var/home/lib/daqa/lib/daq:/var/home/ap/snort/lib" 
ExecStart=/var/home/ap/snort/bin/snort --pid-path /var/log/snort -Q -A fast -D -c /var/home/ap/snort/etc/snort.conf -l /var/log/snort
[Install]
WantedBy=multi-user.target

*ファイル作成後に「systemctl daemon-reload」、「systemctl enable snort.service」を実行して下さい。

iptablesの設定をします。
*Snortサーバ(210.130.0.1)のポート80に来たパケットを内部Webサーバ(192.168.1.2)のポート80に転送しています。
*転送の際に、snortのチェックが入るよう「-j NFQUEUE –queue-num 2」を定義しています。
*下記、iptablesの設定を/etc/sysconfig/iptablesに定義したら「systemctl reload iptables.service」を実行して下さい。

view /etc/sysconfig/iptables

# Generated by iptables-save v1.4.21 on Fri Mar 17 14:09:11 2017
*nat
:PREROUTING ACCEPT [6:240]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
-A PREROUTING -d 210.130.0.1/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
COMMIT
# Completed on Fri Mar 17 14:09:11 2017
# Generated by iptables-save v1.4.21 on Fri Mar 17 14:09:11 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [509:116294]
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j NFQUEUE --queue-num 2
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth0 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 2
-A FORWARD -m state --state ESTABLISHED,RELATED -j NFQUEUE --queue-num 2
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

/var/home/ap/snort/etc/rules/local.rulesにテスト用のルールを定義します。

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"HTTP incoming"; flow:stateless; flags:S+; sid:100006926; rev:1;)

Snortを起動します。
*長いと一分弱かかります。

systemctl start snort.service

以下のログが/var/log/messagesに出力されていれば起動完了です。

Mar 30 21:23:24 ***** snort[17640]: Commencing packet processing (pid=17640)
Mar 30 21:23:24 ***** snort[17640]: Decoding Raw IP4

ブラウザでサイトにアクセスした時に、以下のログが/var/log/snort/alertに出力されていれば、Snortのチェックが稼働している事になります。

03/30-21:29:48.955158  [**] [1:100006926:1] HTTP incoming [**] [Priority: 0] {TCP} 10.21.218.3:63897 -> 192.168.1.2:80

以上で、Snortのインストールは完了です。
また、/var/home/ap/snort/etc/rules配下には様々なルールファイルがあります。そのルールファイルに定義されているほとんどのルールは、デフォルトでコメントアウトされており有効になっていません。それら全てを有効にした上で、様子を見つつ不要なルールをコメントアウトにするのが良いかと思います。

P.S 長くなりましたが、何かありましたら遠慮なくコメントをお寄せください。リクエストがあれば、当方の環境でテストさせていただきます。



ここまで読んで頂きありがとうございます。
現在、ランキング参加中です。良ければランキングボタンをクリック願います。
↓↓↓↓↓↓↓↓

オープンソースランキング

にほんブログ村 IT技術ブログへ
にほんブログ村

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

CentOS, SnortCentOS7, inline-mode, ips, Snort

Posted by tsuka