~ To be, or not to be, or to let it be. ~ null-i.net |
Linux/snortのインストール | |
snortの導入(2017-08-13、更新:2019-10-12) フリーのIDS(侵入検知システム)として名前が出てくるsnort*1ですが、
snort のインストール†snort.org の導入事例通りにやりました、という内容のメモです。 前提として、 では、インストールしていきます。 # md5sum snort-2.9.9.0.tar.gz # md5sum daq-2.0.6.tar.gz (MD5s にある値と同じ結果になる事) # tar zxvf snort-2.9.9.0.tar.gz セットアップ方法は、同じく snort.org で [Documents] - [Snort Setup Guides] に まず依存するパッケージを入れます。 (2019.10追記) それを踏まえて、セットアップ例のままにインストールしています。 # tar zxvf daq-2.0.6.tar.gz # ./configure # make # make install # cd ../snort-2.9.9.0/ # ./configure --enable-sourcefire # make # make install # snort -V ,,_ -*> Snort! <*- o" )~ Version 2.9.9.0 GRE (Build 56) '''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team かわいい豚?の そのあと、Documentどおりに設定を進めます。
あと、ほかには 設定例のPDFファイルを辿るだけですが、結構時間かかってしまいました。 動作&ログ確認は # vi rules/local.rules alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"HTTP/80 Test. Out-to-In."; sid:1000123; rev:1;) (snort を再起動。起動完了後にweb アクセスさせる) # tail /var/log/snort/alert alert にログが表示されるのを確認しましょう。 なお、ルールには優先順位が有ります。(ソースファイルの doc/README.alert_order を参照) 次は pulledpork を使って、最新のルールファイルを入手していきます。 pulledpork の導入†https://www.snort.org/oinkcodes に、 perl のツール、みたいですね。 上記 URL から github へのリンクがあるのでそこから入手して適当な場所に展開。 ※etc/pulledpork.conf を更新します rule_url= の部分に自分のoinkcode を入れる。< > で囲む必要はありません。 rule_path= ほか、/etc/snort/rules 関連のPATHを自環境にあわせる distro= の部分を自環境のOSディストリビューションにあわせる sid_changelog= の部分も必要に応じて変更する ・・・追加書き込みだから、ログローテーションは自分でやらないとダメなのかな? snort本体のログも。 conf を更新したら、試しに実行 ※実際は全部、フルPATHで書きます。 # pulledpork.pl -c pulledpork.conf -i disablesid.conf -T -H Can't locate Crypt/SSLeay.pm in @INC (@INC contains: エラーになりました。 # yum install perl-Crypt-SSLeay そして再実行で 501 エラー Checking latest MD5 for snortrules-snapshot-2990.tar.gz.... Error 501 when fetching https://www.snort.org/reg-rules/snortrules-snapshot-2990.tar.gz.md5 at /usr/local/pulledpork/pulledpork.pl line 534. pulledpork に -vv を付けて実行すると、内容の詳細が出ます。 ==> 501 Protocol scheme 'https' is not supported (LWP::Protocol::https not installed) ・・・はい、SSLeay と同様にこちらも確認、インストールします。 # yum install perl-LWP-Protocol-https すると今度は、ここで止まります ** GET https://www.snort.org/reg-rules/snortrules-snapshot-2990.tar.gz.md5/自分のoinkcode ==> これは gai.conf の更新 で解決しました・・・
が、後に gai.conf 無し接続できるようになったので
なお、一度認証に失敗すると15分間は接続を受け付けなくなったので注意しましょう。 紆余曲折の後ようやく、実行できました。 # pulledpork.pl -c pulledpork.conf -i disablesid.conf -T -H (中略。) Done Please review /var/log/snort/sid_changes.log for additional details Fly Piggy Fly! オプションの -H 指定によって、 オプション -l で syslog に終了メッセージも出せるみたいです。 あとは cron に仕込んで様子見です。 後日談、気になるアクセスを止める例†動作確認用に作った「他のサーバへのhttpアクセス検知」の設定 07/26-05:33:xx.xxxxxx [**] [1:1000111:1] HTTP/80 Test. In-to-Out. [**] [Priority: 0] {TCP} うちのアドレス:80 -> 海外のアドレス:80 そしてログのディレクトリには snort.log.1234567890 みたいなログが出力されて、 tcpdump -r とかで中身が見れます。 # tcpdump -r /var/log/snort/snort.log.1234567890 host xx.xx.xx.xx | head (ログ内容は一部変えてます) reading from file /var/log/snort/snort.log.1234567890, link-type EN10MB (Ethernet) 05:33:22.123456 IP null-i.net.http > xx.xx.xx.xx.http: Flags [.], ack 1234567890, win 29200, length 0 05:33:22.123456 IP null-i.net.http > xx.xx.xx.xx.http: Flags [.], ack 1234567890, win 29200, length 0 (以下、複数行にわたって同じ内容。) 内容について、ここからは推測ですが、 頻度は少ないですが、その後も発生しているので、止めることにしました。 # firewall-cmd --add-rich-rule 'rule family=ipv4 source-port port=80 protocol=tcp drop' --permanent # firewall-cmd --add-rich-rule 'rule family=ipv4 source-port port=443 protocol=tcp drop' --permanent (あるいは、 port=1-1023 のように範囲指定する) # firewall-cmd --reload (以下で確認。追加する前にも実行して差分を見ても良いかも) # firewall-cmd --list-all # iptables -nvL もっとシンプルに指定のポートを、zone=drop を使って追加できるのかもしれませんが、 これの動作確認は、少し手間かもしれません。 openssl s_client -connect サーバ側ホスト:443 -debug -bind クライアント側IP:ポート (接続後はHTTPリクエストを自力で入力するか、"Q"リターンで切断。接続可否だけ分かれば良いので。) 受け側のWebサーバは、アクセスログで確認するか、tcpdumpで待っても良いでしょう。 tcpdump port 443 (root権限が必要かも。必要に応じて -i でインタフェースも指定) これでクライアント側ポートを制限対象にした場合は接続できず、対象外は接続できることを確認しましょう。 それにしても、 さておき、snort などのネットワーク監視ツールを使えば |
|