今回は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 長くなりましたが、何かありましたら遠慮なくコメントをお寄せください。リクエストがあれば、当方の環境でテストさせていただきます。
ここまで読んで頂きありがとうございます。
現在、ランキング参加中です。良ければランキングボタンをクリック願います。
↓↓↓↓↓↓↓↓
オープンソースランキング