snortsam -不正侵入対応-

久々の技術メモです。

サーバに不正なアクセスがあった際、自動で拒否してくれるとありがたいですよね(o^∇^o)ノ
snortとsnortsamを使い、自動にiptablesに拒否の設定を投入することでできちゃいます(*゚▽゚)ノ

以下にインストール手順を紹介したいと思います。

まず、必要なパッケージのインストールをします

# yum install epel-release libtool automake flex flex-devel bison libpcap-devel pcre-devel libdnet-devel zlib-devel

snortのインストールに必要なdaqのインストールをします。

# cd /tmp
# tar zxf daq-2.0.6.tar.gz
# cd daq-2.0.6
# ./configure
# make
# make install

snortsamをインストールします。

# cd /tmp
# tar zxf snortsam-src-2.70.tar.gz
# cd snortsam
# chmod +x makesnortsam.sh
# ./makesnortsam.sh
# cp -p snortsam /usr/local/bin/

snortsamの設定ファイルを配置します。

# cp -p conf/snortsam.conf.sample /etc/snortsam.conf

snortをインストールします。

# cd /tmp
# gunzip snortsam-2.9.5.3-2.diff.gz
# tar zxf snort-2.9.5.3.tar.gz
# cd snort-2.9.5.3
# patch -p1 < ../snortsam-2.9.5.3-2.diff
# chmod +x autojunk.sh
# ./autojunk.sh
# ./configure
# make
# make install

snortの設定ファイルを配置します。

# mkdir /etc/snort
# chmod 700 /etc/snort
# cd etc
# cp classification.config snort.conf reference.config threshold.conf *.map /etc/snort
# touch /etc/snort/rules/white_list.rules
# touch /etc/snort/rules/black_list.rules
# mkdir -p /usr/local/lib/snort_dynamicrules

snortのルールファイルを配置します。

# cd /tmp
# tar zxf snortrules-snapshot-2953.tar.gz
# cp -rp so_rules/ /etc/snort/
# cp -rp rules/ /etc/snort/
# cp -rp preproc_rules /etc/snort/

# tar zxf community-rules.tar.gz
# cd community-rules
# cp -p community.rules /etc/snort/rules/

snortのログディレクトリを作成します。

# mkdir /var/log/snort

snortの設定を変更します。今回は、https://サーバIP/DETECTION-TESTというURLにアクセスした場合に、1分間接続を拒否する設定をしました。

# cp -p /etc/snort/snort.conf /etc/snort/snort.conf.org
# vi /etc/snort/snort.conf
~内容を変更
# diff /etc/snort/snort.conf.org /etc/snort/snort.conf
104,106c105,107
< var RULE_PATH ../rules
< var SO_RULE_PATH ../so_rules
< var PREPROC_RULE_PATH ../preproc_rules
---
> var RULE_PATH rules
> var SO_RULE_PATH so_rules
> var PREPROC_RULE_PATH preproc_rules
113,114c114,115
< var WHITE_LIST_PATH ../rules
< var BLACK_LIST_PATH ../rules
---
> var WHITE_LIST_PATH rules
> var BLACK_LIST_PATH rules
726a728,732
> output alert_fwsam: localhost:898/password
> alert tcp any any -> any 80 (msg:"web detection test"; content:"DETECTION-TEST";nocase; sid:1000000; fwsam: src, 1 minutes;)

snortsamの設定変更します。

# vi /etc/snortsam.conf
~内容を変更
# diff /tmp/snortsam/conf/snortsam.conf.sample /etc/snortsam.conf
41a42
> defaultkey password
67a69
> accept localhost, password
248a251,252
> logfile /var/log/snortsam.log
>
263a268,269
> loglevel 2
>
659a666,667
> iptables eth0 log

手順通りにやればインストールはさほど難しくないかと思います!!
では、実際の動作を見てみましょう(*´∇`*)

以下のように手動でsnortを起動します。

# snort -c /etc/snort/snort.conf -l /var/log/snort -k none -A fast

snortsamは以下のように起動します。

# snortsam /etc/snortsam.conf

iptablesの設定は以下のようになっているとします。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

該当のURLにアクセスをした場合、iptablesのルールは以下のようになります。
192.168.8.10のアクセスをDROPするルールが書かれていることが分かると思います。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            192.168.8.10
DROP       all  --  192.168.8.10         0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            192.168.8.10
DROP       all  --  192.168.8.10         0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ログも以下のように出力されます。

Blocking host 10.1.1.114 completely for 60 seconds (Sig_ID: 1000000).

ちなみに、今回の設定は、1分間の制限をつけたため、1分経ったら以下のようなログを出力して、DROPの制限を解除します。

Removing 60 sec complete block for host 10.1.1.114.
Info: UnBlocking ip 10.1.1.114

いろいろな制限が設定できるようなので、一度試してみてはいかがでしょうか?


コメントを残す

メールアドレスが公開されることはありません。