久々の技術メモです。
サーバに不正なアクセスがあった際、自動で拒否してくれるとありがたいですよね(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 |
いろいろな制限が設定できるようなので、一度試してみてはいかがでしょうか?