■ 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を実行する