■ FC6
サーバーへの不正アクセスを検知するシステム Snort を導入します。また、不正アクセスログをWebブラウザ上で確認できるように SnortSnarf も導入します。なお、Oinkmaster を導入して不正アクセスの判断をするために参照するルールファイルの最新化を自動化します。但しSnortは不正なパケットなどを検出するだけであり、ブロックはできません。 Snortを導入すれば安全という事ではありません。
※以前のバージョンで作成されたlogが残っていると起動に失敗することがあります。/var/log/snort ディレクトリを削除してからインストールして下さい。
■以前のログを削除
[root@linux ~]# rm -r /var/log/snort
以前のsnort用ログロテート設定ファイルを削除
[root@linux ~]# rm /etc/logrotate.d/snort
■snortインストールに必要な依存パッケージlibpcapのインストール
[root@linux ~]# yum install libpcap
Loading "installonlyn" plugin
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
livna 100% |=========================| 1.1 kB 00:00
core 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
primary.xml.gz 100% |=========================| 94 kB 00:01
################################################## 264/264
primary.xml.gz 100% |=========================| 250 kB 00:01
################################################## 846/846
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for libpcap to pack into transaction set.
libpcap-0.9.4-9.fc6.i386. 100% |=========================| 15 kB 00:00
---> Package libpcap.i386 14:0.9.4-9.fc6 set to be updated
--> Running transaction check
Dependencies Resolved
=========================================================
Package Arch Version Repository Size
=========================================================
Installing:
libpcap i386 14:0.9.4-9.fc6 updates 95 k
Transaction Summary
=========================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 95 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): libpcap-0.9.4-9.fc 100% |=========================| 95 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: libpcap ######################### [1/1]
Installed: libpcap.i386 14:0.9.4-9.fc6
Complete!
■snortのインストール
OSはFC6なのですが色々試した結果、現時点ではなぜかFC5用のsnort-2.6.1.1-1.FC5.i386.rpmしかインストール出来ませんでした。他は設定が悪いのかことごとく起動に失敗しました。
[root@linux ~]# rpm -ivh http://www.snort.org/dl/binaries/linux/snort-2.6.1.1-1.FC5.i386.rpm
http://www.snort.org/dl/binaries/linux/snort-2.6.1.1-1.FC5.i386.rpm を取得中
準備中... ########################################### [100%]
1:snort ########################################### [100%]
■Snort設定
[root@linux ~]# vi /etc/snort/snort.conf ← snort設定ファイル編集
var HOME_NET any
↓
var HOME_NET 192.168.1.0/24 ← 内部ネットワークアドレスを指定
var EXTERNAL_NET any
↓
var EXTERNAL_NET !$HOME_NET ← 内部からのアクセスを不正アクセスとして扱わない
■Snortルールファイル入手
[root@linux ~]# wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
--09:28:38-- http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
www.snort.org をDNSに問いあわせています... 199.107.65.177
www.snort.org|199.107.65.177|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 789097 (771K) [application/octet-stream]
Saving to: `snortrules-pr-2.4.tar.gz'
100%[=============================================>] 789,097 149K/s in 6.9s
09:28:46 (112 KB/s) - `snortrules-pr-2.4.tar.gz' を保存しました [789097/789097]
ファイルを展開
[root@linux ~]# tar zxvf snortrules-pr-2.4.tar.gz
ルールファイルを所定のディレクトリへコピー
[root@linux ~]# /bin/cp -r rules/* /etc/snort/rules/
展開してできたディレクトリを削除
[root@linux ~]# rm -rf rules/ doc/
ダウンロードしたファイルを削除
[root@linux ~]# rm -f snortrules-pr-2.4.tar.gz
snortルールファイルをダウンロードします
[root@linux ~]# wget http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz
--09:30:55-- http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz
www.snort.org をDNSに問いあわせています... 199.107.65.177
www.snort.org|199.107.65.177|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 109695 (107K) [application/octet-stream]
Saving to: `Community-Rules-2.4.tar.gz'
100%[=============================================>] 109,695 112K/s in 1.0s
09:30:57 (112 KB/s) - `Community-Rules-2.4.tar.gz' を保存しました [109695/109695]
ファイルを展開
[root@linux ~]# tar zxvf Community-Rules-2.4.tar.gz
ルールファイルを所定のディレクトリへコピー
[root@linux ~]# /bin/cp -r rules/* /etc/snort/rules/
展開してできたディレクトリを削除
[root@linux ~]# rm -rf rules/ doc/
ダウンロードしたファイルを削除
[root@linux ~]# rm -f Community-Rules-2.4.tar.gz
■Snortログロテートエラー対処
cronから以下のようなエラーメールがroot宛に送られてくることの対処
error: error accessing /var/log/snort/*: No such file or directory
error: snort:4 glob failed for /var/log/snort/*/*log
[root@linux ~]# vi /etc/logrotate.d/snort ← snort用ログロテート設定ファイル編集
/var/log/snort/alert /var/log/snort/*log /var/log/snort/*/alert /var/log/snort/*/*log { ← 不要な部分を削除
↓
/var/log/snort/alert /var/log/snort/*log {
■Snortの起動
[root@linux ~]# /etc/rc.d/init.d/snortd start ← snort起動
Starting snort: [ OK ]
[root@linux ~]# chkconfig snortd on ← snort自動起動設定
[root@linux ~]# chkconfig --list snortd ← snort自動起動設定確認
snortd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← ランレベル2~5のonを確認
■SnortSnarfに必要なPerlのTime-modulesをインストール
[root@linux ~]# yum -y install perl-Time-modules
Loading "fastestmirror" plugin
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
livna 100% |=========================| 1.1 kB 00:00
core 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 1.2 kB 00:00
extras 100% |=========================| 1.1 kB 00:00
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for perl-Time-modules to pack into transaction set.
perl-Time-modules-2003.11 100% |=========================| 4.5 kB 00:00
---> Package perl-Time-modules.noarch 0:2003.1126-4.fc6 set to be updated
--> Running transaction check
Dependencies Resolved
============================================================
Package Arch Version Repository Size
============================================================
Installing:
perl-Time-modules noarch 2003.1126-4.fc6 extras 36 k
Transaction Summary
============================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 36 k
Downloading Packages:
(1/1): perl-Time-modules- 100% |=========================| 36 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: perl-Time-modules ######################### [1/1]
Installed: perl-Time-modules.noarch 0:2003.1126-4.fc6
Complete!
■SnortSnarfインストール
Snortのバージョンによって、必要なSnortSnarfのバージョンが異なりますって、何かで読んだことがあるんですが、とりあえず最新版をインストールします。
[root@linux ~]# wget http://www.snort.org/dl/contrib/data_analysis/snortsnarf/SnortSnarf-050314.1.tar.gz
--09:36:06-- http://www.snort.org/dl/contrib/data_analysis/snortsnarf/SnortSnarf-050314.1.tar.gz
www.snort.org をDNSに問いあわせています... 199.107.65.177
www.snort.org|199.107.65.177|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 144103 (141K) [application/x-gzip]
Saving to: `SnortSnarf-050314.1.tar.gz'
100%[=============================================>] 144,103 90.3K/s in 1.6s
09:36:08 (90.3 KB/s) - `SnortSnarf-050314.1.tar.gz' を保存しました [144103/144103]
[root@linux ~]# tar zxvf SnortSnarf-050314.1.tar.gz ← 展開
[root@linux ~]# mkdir /usr/local/snortsnarf ← SnortSnarfインストール先ディレクトリ作成
[root@linux ~]# cp SnortSnarf-050314.1/snortsnarf.pl /usr/local/snortsnarf/
← snortsnarf.plをSnortSnarfインストール先へコピー
[root@linux ~]# cp -r SnortSnarf-050314.1/include/ /usr/local/snortsnarf/
← includeディレクトリをSnortSnarfインストール先へコピー
[root@linux ~]# rm -rf SnortSnarf-050314.1 ← 展開してできたディレクトリを削除
[root@linux ~]# rm -f SnortSnarf-050314.1.tar.gz ← ダウンロードしたファイルを削除
■SnortSnarf設定
SnortSnarf実行時にエラーメッセージが出力されることの対処
SnortSnarfのpmファイル編集
[root@linux ~]# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLMemStorage.pm
return @arr->[($first-1)..$end];
↓
return @arr[($first-1)..$end]; ← ->を削除
SnortSnarfのpmファイル編集
[root@linux ~]# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLAnomMemStorage.pm
return @arr->[($first-1)..$end];
↓
return @arr[($first-1)..$end]; ← ->を削除
■Webサーバー設定
SnortSnarfによるHTML出力先ディレクトリ作成
[root@linux ~]# mkdir /var/www/snort
SnortSnarf用Webサーバー設定ファイル新規作成
[root@linux ~]# vi /etc/httpd/conf.d/snort.conf
Alias /snort /var/www/snort
以下は内部からのみアクセスできるようにする場合のみ
<Location /snort>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1 ← 内部ネットワークアドレスを指定
</Location>
[root@linux ~]# /etc/rc.d/init.d/httpd reload ← Webサーバー設定反映
httpd を再読み込み中: [ OK ]
■SnortSnarf実行スクリプト作成
[root@linux ~]# vi snortsnarf.sh ← SnortSnarf実行スクリプト作成
#!/bin/bash
cd /usr/local/snortsnarf
if [ -s /var/log/snort/alert ]; then
if [ -s /var/log/snort/portscan.log ]; then
./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert /var/log/snort/portscan.log
else
./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert
fi
fi
SnortSnarf実行スクリプトへ実行権限付加
[root@linux ~]# chmod 700 snortsnarf.sh
■SnortSnarf確認
[root@linux ~]# ./snortsnarf.sh ← SnortSnarf実行
http://サーバーアドレス/snort/にアクセスし、「SnortSnarf start page」が表示されることを確認。
SnortSnarf-050314.1をインストールしたはずなのになぜだかバージョン表記はSnortSnarf v021111.1になってます。
■SnortSnarf日本語化ファイル取得
ダウンロードするファイルはSnortSnarf v021111.1用のものなので、ダウンロードしたSnortSnarf-050314.1ではうまく行かないのではと思ったのですが、バージョン表記がSnortSnarf v021111.1になってましたので試しにダウンロードしてみます。
[root@linux ~]# cd /usr/local/snortsnarf/include/SnortSnarf/
[root@linux SnortSnarf]# mv HTMLOutput.pm HTMLOutput.pm.org
[root@linux SnortSnarf]# wget http://mt-fuji.ddo.jp/~fujito/Linux/secu_soft/s2/HTMLOutput.pm
--09:42:32-- http://mt-fuji.ddo.jp/~fujito/Linux/secu_soft/s2/HTMLOutput.pm
mt-fuji.ddo.jp をDNSに問いあわせています... 121.82.128.37
mt-fuji.ddo.jp|121.82.128.37|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 86832 (85K) [text/plain]
Saving to: `HTMLOutput.pm'
100%[=============================================>] 86,832 --.-K/s in 0.1s
09:42:32 (648 KB/s) - `HTMLOutput.pm' を保存しました [86832/86832]
■SnortSnarf日本語化確認
[root@linux SnortSnarf]# cd
[root@linux ~]# ./snortsnarf.sh ← SnortSnarf実行
http://サーバーアドレス/snort/にアクセスし、「SnortSnarf ページの開始」が表示されることを確認。
ちゃんと日本語化されてますので大丈夫そうですね。
■SnortSnarf定期自動実行設定
[root@linux ~]# crontab -e ← cron編集
00 * * * * /root/snortsnarf.sh ← SnortSnarfを1時間ごとに実行する
■ルールファイルの自動更新
Oinkmasterインストール
[root@linux ~]# wget http://www.ip-solutions.net/~hhoffman/oinkmaster/oinkmaster-2.0-0.noarch.rpm
--09:43:50-- http://www.ip-solutions.net/~hhoffman/oinkmaster/oinkmaster-2.0-0.noarch.rpm
www.ip-solutions.net をDNSに問いあわせています... 66.92.234.67
www.ip-solutions.net|66.92.234.67|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 65411 (64K) [application/x-rpm]
Saving to: `oinkmaster-2.0-0.noarch.rpm'
100%[=============================================>] 65,411 51.5K/s in 1.2s
09:43:52 (51.5 KB/s) - `oinkmaster-2.0-0.noarch.rpm' を保存しました [65411/65411]
[root@linux ~]# rpm -Uvh oinkmaster-2.0-0.noarch.rpm
準備中... ########################################### [100%]
1:oinkmaster ########################################### [100%]
ダウンロードしたファイルを削除
[root@linux ~]# rm -f oinkmaster-2.0-0.noarch.rpm
■Oinkmaster設定
Oinkmaster設定ファイル編集
[root@linux ~]# vi /etc/oinkmaster.conf
# Example for Snort 2.4
# url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-2.4.tar.gz
url = http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz ← 追加
# Example for Community rules
# url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz
url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz ← 追加
■Oinkmaster確認
[root@linux ~]# oinkmaster.pl -o /etc/snort/rules/
Loading /etc/oinkmaster.conf
Downloading file from http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Downloading file from http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures... done.
Processing downloaded rules... disabled 0, enabled 0, modified 0, total=4122
Setting up rules structures... done.
Comparing new files to the old ones... done.
[***] Results from Oinkmaster started 20061028 09:46:23 [***]
[*] Rules modifications: [*]
None.
[*] Non-rule line modifications: [*]
None.
[+] Added files (consider updating your snort.conf to include them if needed): [+]
-> community-bot.rules
-> community-deleted.rules
-> community-dos.rules
-> community-exploit.rules
-> community-ftp.rules
-> community-game.rules
-> community-icmp.rules
-> community-imap.rules
-> community-inappropriate.rules
-> community-mail-client.rules
-> community-misc.rules
-> community-nntp.rules
-> community-oracle.rules
-> community-policy.rules
-> community-sid-msg.map
-> community-sip.rules
-> community-smtp.rules
-> community-sql-injection.rules
-> community-virus.rules
-> community-web-attacks.rules
-> community-web-cgi.rules
-> community-web-client.rules
-> community-web-dos.rules
-> community-web-iis.rules
-> community-web-misc.rules
-> community-web-php.rules
[root@linux ~]# ll /etc/snort/rules/ ← ルールファイルがダウンロードされていることを確認
合計 2352
-rw-r--r-- 1 root root 17989 10月 28 09:33 LICENSE
-rw-r--r-- 1 root root 17334 10月 28 09:30 VRT-License.txt
-rw-r--r-- 1 root root 5520 10月 28 09:30 attack-responses.rules
・
・
・
■Oinkmaster定期自動実行設定
[root@linux ~]# crontab -e ← cron編集
00 00 * * * /usr/bin/oinkmaster.pl -o /etc/snort/rules/ 2>&1|logger -t oinkmaster
毎日00:00にOinkmasterを実行する