FlexResp とは、Snort のアクションの一つです。flexresp アクションを利用するには、コンパイル時に指定されている必要があります。
ここでは、FlexResp を有効にしてコンパイルしています。
FlexResp を使用すると、 セッションを確立する前にパケット終了コマンドを送りつけ、強制的に通信を終了させる事が出来ます。パケット内容を監視してアクションが起こせる Snort は、iptables (パケットフィルタリング型ファイアウォール)とは違うアプローチで通信を抑制する事が出来ます。
FlexResp アクションの利用においては細心の注意が必要です。特に、プロミスキャスモードで広範囲にパケット監視を行うケースでは、AさんのパソコンとBさんのパソコンだけをピンポイントで通信不能に陥れることも簡単に出来てしまいます。
つまり、第三者が通信に強制介入する事が出来てしまいます。
誤まって設定するとネットワークを簡単に麻痺させてしまう事になります。
ルールヘッダ、ルールオプションの詳細については、下記 Snort マニュアル日本語訳を参照して下さい。ここでは resp の利用方法についてのみ説明しています。 それぞれの関連は色で示した通りです。
参照 => Snortルールを書 正しいSnortルールの記述方法
大きくは ルールヘッダ部 と ルールオプションで構成されます。
[アクション] [プロトコル] [アドレス] [ポート] [方向] [アドレス] [ポート] [ルールオプション]
hack@hack.net からのメールはパケット終了コマンドを送りつけ、一方的に通信を終了させる場合は /etc/snort/rules/local.rules に 以下の様に一行で記述します。
alert tcp EXTERNAL_NET any -> HOME_NET 25 (content:"hack@hack.net";resp:rst_snd;msg:"Mail Rley Atack!";)
ルールヘッダ部 では、指定された外部ドメインの全てのポート から、ローカルエリアのport25 のTCPプロトコル のパケットに対し、ルールオプションで指定されたアクションを起こす事になります。
参照 => Snort ルールヘッダ (Snot マニュアル)
このルール定義では、hack@hack.net が含まれる場合、resp の rst_rst で処理し、msgでアラートに出力するメッセージ "Mail Rley Atack!"と表示します。 これは文字を含むパケットの抑制である事に注意して下さい。当然ですが、送信元メールアドレスを判定している訳ではありません。
resp には、以下の種類があります。
RST (リセット)パケット (プロトコルは指定可能なプロトコルです)
タイプ | プロトコル | 内容 |
---|---|---|
rst_all | TCP | 送信元、受信先両方にRSTパケットを送信 |
rst_snd | TCP | 送信元に RSTパケットを送信 |
rst_rcv | TCP | 受信先に RSTパケットを送信 |
ICMPパケットを送信する事で通信を終了させる事も出来ます。
icmp_net | UDP | 送信側にICMP_NET_UNREACHを送信 |
icmp_host | UDP | 送信側にICMP_HOST_UNREACHを送信 |
icmp_port | UDP | 送信側にICMP_PORT_UNREACH |
icmp_all | UDP | 上記3つの不到達 ICMP を全て送信 |
SMTP AUTH と SSL暗号化 を利用して外部からメール送信サーバーを利用出来るようにポートを開くと、毎日のように不正中継が試されます。その多くは 中国、韓国です。これらの地域からの利用は通常業務ではありえないので、これらの地域からのポート25へのアクセスは全て不正アクセスとみなし、 FlexResp で遮断する例です。
alert tcp 222.120.0.0/15 any -> HOME_NET 25 (msg:"Mail Refused !";resp:rst_all;)
アクセスを制限したい国・地域別のIPアドレスを調べます。アジア・太平洋地域であれば、APNICにより管理されており、最新のIPアドレス国別割当て状況は以下で公開されています。
http://ftp.apnic.net/stats/apnic/
最終の更新リストファイル
http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
"一網打尽" というツールをつかって CIDR(アドレス範囲)を抽出します。
http://www.vector.co.jp/soft/winnt/net/se316799.html
ダウンロードした delegated-apnic-latest を開き CIDR を書き出します。使い方は付属の説明書を見て下さい。後はテキストエディターをつかってSnortのルール書式にします。
これらのリストを、新たなルールセットとして /etc/snort/snort.conf に登録します。
注意
このリストは毎月更新されます。IPアドレスの返還、他の地域の割当ても行われるため、絶対ではありません。SMTPのような利用者が限定できる場合の サービスは特に影響はありませんが、広範囲に提供するサービス、例えば http などへの使用は、関係のない広範囲に及ぶ地域からのアクセスを制限してしまう可能性もあります。
しばらく、運用してみたのですが、不正中継行為が激減し効果はあがりました。しかし、負荷が高くその他のパケットの取りこぼしも発生しました。
Snort をネットワークに存在するホストのパケットを受け取れる場所に、センサーとして設置した場合、この FlexResp 機能の使い方によっては幸せになれます。
先に述べたように、AさんとBさんのコンピューターだけをピンポイントで通信不能に出来る事は容易である事は理解 出来たかと思います。
使い方次第で、ネットワークを麻痺させる事の出来る機能ですが、有用な通信妨害の手段として、マイホームパパであれば子供さんのパソコンに触れる事無く、 有害なWebサイトへのアクセスを抑制するといった使い方も考えられます。当然、自分は大人の特権として例外ですが。(笑
FlexResp ではありませんが、Snort にもポルノに関するルールが含まれています。
/etc/snort/rules/porn.rules
標準では、このルールセットは使用しないようになっています。ちょっと、ピーであれな、キーワードが含まれています。キーワードではなく、有害サイトの Webサイトアドレスを収集すると良いと思います。ホームページからリンクのみをテキストで抽出するツールもあります。何れにせよアドレス収集の方が大変な作業ですけど、、