セキュリティ強化対策(Swatch編)


ログ情報のチェックは、セキュリティ管理の基本として重要ですが、膨大な情報の中から問題を検出するのはなかなか大変なことであり、実際のところ見つかれば儲けものというのが現実です。このようなケースに活躍するのが、ここで紹介する Swatch というツールです。
このツールは、Perlベースの不正アクセス監視ソフトです。Swatchでは指定されたsyslog等のログファイルをリアルタイムに監視し、予め設定しておいたルールに従い異常を検知するとbeep音やメールで管理者に通知したり、その情報を別の場所に書き出したり、はたまた、外部プログラムを起動するというようなことができます。特に最後の外部プログラムの起動は、使い方しだいではいろいろな応用ができ、今回はこの外部プログラム起動機能を使用してFTPサーバへの不正ログインの試みを検出して、当該アドレスからのFTPアクセスを遮断してみました。

■Swatch のインストール

Swatch は、Perlベースのスクリプトであり、それを動かすにはいくつかのPerlモジュールが必要です。但し、これらのモジュールはデストリには用意されていないものがあり、デストリによってインストール方法が異なるので以下を参考に実施してください。おやじが扱ったデストリに関しては、今回は全てRPMでインストールしました。なるべく、デストリに用意されているRPMを使用するほうが管理上よいと思いますが、RPMがない場合はソースから入れてください。ソースインストールについては、ググルってください。

なお、必要なモジュールは以下のとおりです。よく言われる4つのモジュール以外に芋ずるで必要になるモジュールがあり、下記が全てです。

No. モジュール名 備  考
1 swatch Swatch本体
2 perl-Date-Calc Swatchが直接リンクしているモジュール。
SuSEでは3項はperlのベースモジュールでインストールされてるので、別途インストールは不要。
3 perl-Time-HiRes
4 perl-TimeDate
5 perl-File-Tail
6 perl-Bit-Vector 2〜5項の関連モジュールである。7項は実際には使用されないが、RPMの関係でCentOSを含むRedHat系だけで要求されSuSEでは要求されない。8項は実行時に必要であり、RedHat系はデフォルトで入っているので問題ないが、CentOSやSuSEはインストールされておらずSwatchを動かした際にエラーが出るので要注意
7 perl-Mail-Sendmail
8 perl-DateManip

◆RedHat系(RedHat9/Fedore Core)

RedHat系はDAGのリポリトジを使用すれば、一発でSwatch本体からSwatch関連のPerlモジュールまで全てインストールできます。以下を参考に実施してください。

  1. 事前準備

    RedHat系 (といってもおやじが確認したのはRedHat9/Fedora Core2)では、一部のモジュールが標準では用意されていないことやSwatchそのものをRPMから入れるためDAGのリポリトジを使用することにした。こちらを参考にyumまたはaptの設定をする。おやじはyumを使用しているので、その例を以下に示す。

    1. GPG key のインポート

      DAG のパッケージは GPG key でサインされているので、下記によりGPG key をインポートしておく。

      # rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

    2. Yum の設定

      RPM をインストールできるようにするため、/etc/yum.conf(または/etc/yum.repos.d/dag.repoのようなファイル) に下記のように追記しサイトを設定する。

      [RedHat9の場合]

      [dag]
      name=Dag RPM Repository for older Red Hat Linux
      baseurl=http://apt.sw.be/redhat/$releasever/en/$basearch/dag
      gpgcheck=1
      enabled=1


      [Fedora Coreの場合]

      [dag]
      name=Dag RPM Repository for Fedora Core
      baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag
      gpgcheck=1
      enabled=1


  2. Swatchのインストール

    yumでSwatchをインストールする。このとき、途中で一回確認のため"y [Enter]"と入力するだけで関連するperlモジュールも全てインストールされるので、いとも簡単である。

    # yum install swatch
    Gathering header information file(s) from server(s)
    Server: Fedora Core 2 - i386 - Base
    Server: Dag RPM Repository for Fedora Core
    Server: Fedora Core 2 - i386 - Released Updates
    Finding updated packages
    Downloading needed headers
    Resolving dependencies
    ..Dependencies resolved
    I will do the following:
    [install: swatch 3.1-1.1.fc2.dag.noarch]
    I will install/upgrade these to satisfy the dependencies:
    [deps: perl-Mail-Sendmail 0.79-1.1.fc2.dag.i386]
    [deps: perl-Bit-Vector 6.3-2.i386]
    [deps: perl-Time-HiRes 1.55-2.i386]
    [deps: perl-File-Tail 0.99.1-1.1.fc2.rf.noarch]
    [deps: perl-TimeDate 1:1.16-1.noarch]
    [deps: perl-Date-Calc 5.3-8.i386]
    Is this ok [y/N]:
    y[Enter]
    Downloading Packages
    Getting perl-Mail-Sendmail-0.79-1.1.fc2.dag.i386.rpm
    perl-Mail-Sendmail-0.79-1 100% |=========================| 24 kB 00:00
    Getting perl-Bit-Vector-6.3-2.i386.rpm
    perl-Bit-Vector-6.3-2.i38 100% |=========================| 130 kB 00:00
    Getting perl-Time-HiRes-1.55-2.i386.rpm
    perl-Time-HiRes-1.55-2.i3 100% |=========================| 22 kB 00:00
    Getting perl-File-Tail-0.99.1-1.1.fc2.rf.noarch.rpm
    perl-File-Tail-0.99.1-1.1 100% |=========================| 21 kB 00:00
    Getting swatch-3.1-1.1.fc2.dag.noarch.rpm
    swatch-3.1-1.1.fc2.dag.no 100% |=========================| 45 kB 00:00
    Getting perl-TimeDate-1.16-1.noarch.rpm
    perl-TimeDate-1.16-1.noar 100% |=========================| 32 kB 00:00
    Getting perl-Date-Calc-5.3-8.i386.rpm
    perl-Date-Calc-5.3-8.i386 100% |=========================| 210 kB 00:00
    Running test transaction:
    Test transaction complete, Success!
    perl-Time-HiRes 100 % done 1/7
    perl-File-Tail 100 % done 2/7
    perl-TimeDate 100 % done 3/7
    perl-Mail-Sendmail 100 % done 4/7
    perl-Date-Calc 100 % done 5/7
    perl-Bit-Vector 100 % done 6/7
    swatch 100 % done 7/7
    Installed: swatch 3.1-1.1.fc2.dag.noarch
    Dep Installed: perl-Mail-Sendmail 0.79-1.1.fc2.dag.i386 perl-Bit-Vector 6.3-2.i386 perl-Time-HiRes 1.55-2.i386 perl-File-Tail 0.99.1-1.1.fc2.rf.noarch perl-TimeDate 1:1.16-1.noarch perl-Date-Calc 5.3-8.i386
    Transaction(s) Complete

◆CentOS4.0

CentOS4.0は、Swatchを含め標準ではサポートされていないモジュールがかなりありますが、CentOS4.0はRHEL4.0のクローンなので、DAGにあるSRPMをコンパイルしなおせば使用できます。従って、CentOSでサポートされているもの(上表のNo.2/3/6/8の4モジュール)はyumなりでインストールし、不足しているものはDAGからSRPMを持ってきて、以下のように再コンパイルしてインストールすれば大丈夫です。
以下を参考に実施してください。なお、Swatchをリビルドする前に関連モジュールのインストールは済ませておいてください。

# cd /usr/src/redhat/SOURCES
# wget http://dag.wieers.com/packages/perl-File-Tail/perl-File-Tail-0.99.1-1.rf.src.rpm
# rpmbuild --rebuild perl-File-Tail-0.99.1-1.rf.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-File-Tail-0.99.1-1.rf.noarch.rpm
# wget http://dag.wieers.com/packages/perl-Mail-Sendmail/perl-Mail-Sendmail-0.79-1.dag.src.rpm
# rpmbuild --rebuild perl-Mail-Sendmail-0.79-1.dag.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-Mail-Sendmail-0.79-1.dag.noarch.rpm
# wget http://dag.wieers.com/packages/perl-TimeDate/perl-TimeDate-1.16-1.rf.src.rpm
# rpmbuild --rebuild perl-TimeDate-1.16-1.rf.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-TimeDate-1.16-1.rf.noarch.rpm
# wget http://dag.wieers.com/packages/swatch/swatch-3.1-1.dag.src.rpm
# rpmbuild --rebuild swatch-3.1-1.dag.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/swatch-3.1-1.dag.noarch.rpm

◆SuSE9.0/9.2

SuSEの場合、Swatchを除き全てのモジュールが標準でサポートされているので、YaSTでインストールしてください。但し、3項のTime-HiResは見つかりませんが、SuSEの場合、このモジュールはperlのベースモジュールでインストールされているので改めてのインストールは不要です。
問題なのが本命のSwatchです。例によってRPMが見つかりません。ソースから入れようかとも思ったのですが、奮起してRPMを自分で作成しました。ダウンロードに置いておきますので、適当なところにダウンロードしてインストールしてください。但し、SuSE9.0と9.2用のみです。SuSEは癖があり、少なくとも9.0と9.2ではソース互換はないので、SuSE9.1ではどちらのソースをリビルドしてもうまくいかない可能性が大です。

[SeSE9.0の場合] SuSE9.2の場合は下記の緑字のところを9.2とすること。
# wget http://www.aconus.com/~oyaji/ftp/download_f.cgi?name=suse9.0/swatch/swatch-3.1.1-1.i586.rpm
# rpm -Uvh swatch-3.1.1-1.i586.rpm


■設定ファイルの作成

続いて、Swatchを動作させるための設定ファイルを作成しますが、設定ファイルは監視対象とするログファイル毎に作成する必要があります。設定ファイルのデフォルトは、~/.swatchrc、即ち、Swatch起動ユーザのホームディレクトリ配下の「.swatchrc」という名前のファイルになっています。しかし、実際に監視するsyslog等のログファイルは通常rootしかアクセスできないので、/root/.swatchrcファイルを作成することになります。但し、Swatch起動時に設定ファイルのパスや名前は指定できるので実際は何でも良いし、複数のログファイルを監視するなら当然設定ファイルも複数になるので、自分の環境に合わせて作成すればよいということになります。おやじは、/etc/swatch/swatchrc_xxx として監視ファイル毎に作成しました。

設定ファイルの基本的な形式は以下のとおりで、パターンマッチさせる正規表現文字列は「/」で挟んでperlの正規表現で記述し、以下にマッチしたときのアクションを記述します。アクションは必要に応じて複数記述できます。この組み合わせを、パターン毎に列記していきます。

このとき注意が必要なのが、perlにおける特殊記号の扱いです。これらの特殊記号はperlの制御記号として扱われるため、特殊記号がパターン上に存在すると制御情報として扱われてしまい、期待する動作ができません。これらをパターンとして認識させるには、その記号の前に「\」(Linux上は逆スラッシュ)をつけることで制御情報と区別できるようになります。なお、これはパターンだけではなく、メールアドレスの「@」が配列を表す制御起動であるため、「\@」のようにする実用があります。
主な特殊記号は、「+ * ? . ( ) [ ] { } | \ @」などがあり、注意が必要です。

watchfor /(パターンマッチさせる正規表現文字列)/
   アクション1
   アクション2
     :
   アクションx

Swatchで使用できる主なアクションは以下のとおりです。その他はmanを参照してください。

アクション 概 要
echo [modes] メッセージを画面に表示する。modesでは、画面表示の色等が指定可。コンソール表示だけでなく、Swatch起動時に検出ログを吐き出すファイルを指定しておくと、echoが指定されているパターン検出時に検出したログを吐き出してくれるので、後でこれをみるだけでまとめてチェックができる。
[modes]
「表示系」
normal, bold, underscore, blink, inverse
「色指定」
black, red, green, yellow, blue, magenta, cyan, white, black_h, red_h, green_h, yellow_h, blue_h, magenta_h, cyan_h, white_h
bell [N] beep音をN回鳴らす。デフォルトは1回。自宅サーバでは突然鳴るのと、アタックを受けると鳴り通しになるので、家人がビックリするだけなのでやめたほうが無難。
exec command コマンドを実行。$Nでコマンドにパターンマッチで指定した文字列のN番目の要素を引数として渡すことができる。$0または$*の場合はパターンマッチで指定した文字列の全ての要素が渡される。(perlスクリプトしか確認していないが、何故か一時スクリプトのパスが飛んできて$0/$*は使えなかった。)
mail [addresses=address:address:...][,subject=your_text_here] アドレスで指定した宛先にメール通知する。「:」で区切れば複数宛先に通知可。デフォルトはSwatchが走行しているユーザ。subjectで件名を変更可。デフォルトは「Message from Swatch」。
continue Swatchはパターンマッチすると指定アクションをとって以降の検索を終了するが、continue指定されていると一致しても処理を継続する。

設定例としては、/usr/share/doc/swatch(-3.1)/examples/配下に「swatchrc.monitor」と「swatchrc.personal」という設定例があるほか、ググレばいくらでもあるのでそちらを参考にしてください。但し、ログパターンはデストリによっても異なるので、各自チューニングが必要と思います。
設定例として、一般的にはメールを投げる例が多くありますが、今回はコマンド実行機能(exec)を使用して、FTPで指定回数以上ログインに失敗したら当該アドレスからのFTPアクセスをiptablesを使用してロックするようにしてみましたので、後述します。ログフォーマットを適切に設定すれば、いろいろ応用ができると思います。

■Swatchの動作テスト

以上で設定ファイルが作成できたので、想定した動作をするかテストします。まず、「-c」オプションで設定ファイルのパス、「-t」オプションで監視対象のログファイルのパスを絶対パスで指定してSwatchを以下のように起動します。起動が成功すると2行目のようなメッセージが出力されますので、このままコンソールを閉じないでおきます。続けて、他のクラインアトやもう一つのコンソールから、設定ファイルに記述したルールにマッチするであろう操作を行い、元のコンソールに検出結果として対象のログが出力されること(echo設定要)を確認します。beep音やメール通知を設定しているなら、それもあわせて確認します。下記の3行目は、ProFTPDで認証を失敗した時の例です。デストリによってログフォーマットが異なりますので、各自で調整が必要です。全ての設定が確認できたら、Swatchを起動したコンソールで[Ctrl]+[c]を入力しSwatchを停止しておきます。

# /usr/bin/swatch -c /etc/swatch/swatchrc -t /var/log/messages

*** swatch version 3.1 (pid:4811) started at 2005年 5月 6日 金曜日 23:32:22 JST

May 6 23:32:37 server proftpd[4815]: server.aconus.com (192.168.1.xx[192.168.1.xx]) - PAM(oyaji): Authentication failure.
[Ctrl]+[c]
Caught a SIGINT -- sending a TERM signal to 4812


◆Swatchの自動起動

Swatchの動作テストが終了したら、システム起動時にコマンドを叩くわけにはいきませんから、自動起動できるようにしなければなりません。一般的には、rc.localなりにコマンドイメージを書いておく例が多いのですが、今回は起動/停止/再起動できる起動スクリプトを作ってみました。CentOSを含むRedHat系用SuSE用を作ってみましたので、使ってみてください。一応、二重起動防止等の対策をしてあります。なお、Swatchは子プロセスが複数起動しており、特に複数ファイル監視時にきれいにゴミを残さずに停止するのが難しいつくりになっています。また、デストリによって用意されているコマンドが異なるのと、同一コマンドでも細かいところで挙動が異なるため、最終的には、tailコマンドは他で使用していないことを前提にした作りになっており、やや怪しいつくりですが、特に問題はないはずです。これにより、どちらのデストリでも問題が出ずに起動・停止・再起動ができます。

  1. 上記の起動スクリプトを /etc/init.d/swatch として保存。

  2. /etc/init.d/swatch 内の監視するログと設定ファイルのパスを、自分の環境に合わせてフルパスで設定する。

    CHECK_LOG="/var/log/messages"
    SWATCH_CONF="/etc/swatch/swatchrc"

  3. 起動スクリプトを自動実行できるようにする。ランレベル2/3/4/5で起動できるようになる。

    # chmod 755 /etc/init.d/swatch
    # chkconfig swatch on
    # chkconfig --list swatch
    swatch      0:off  1:off  2:on   3:on   4:on   5:on   6:off

  4. Swatchが動作するための環境を整備する。
    1,2行目は、Swatchが起動時に一時的に作成するスクリプトの格納場所に関する作業。起動スクリプト中の「SWATCH_SCRIPT="/var/run/swatch"」で指定されるパス。
    3,4行目は、Swatchが「echo」で出力した内容を記録するファイルに関する作業。起動スクリプト中の「SWATCH_LOG="/var/log/swatch"」で指定されるファイル。

    # mkdir /var/run/swatch
    # chmod 700 /var/run/swatch
    # touch /var/log/swatch
    # chmod 640 /var/log/swatch

  5. 設定が完了したら、Swatchを起動・停止して問題ないかチェックする。

    # /etc/init.d/swatch start
    # /etc/init.d/swatch stop

◆複数ファイル監視時の自動起動

Swatchで複数のログファイルを監視する場合は、それぞれのログファイルに対してSwatchを起動しなければなりません。ProFTPDのログを別途監視するという前提で修正したCentOSを含むRedHat系用SuSE用の起動スクリプトです。見てもらえばすぐに分かる思いますが、赤字が追加したところで、追加監視するログファイルとルールファイルのパスを追加し、それらを監視する部分を追記しただけです。監視対象ログ毎に同じように追記していけば対応できます。

■FTPサーバへの不正アクセス防止

Swatchの使い方として、パターン検出時に一般的にメールを投げる例が多くありますが、今回はコマンド実行機能(exec)を使用して、もっと積極的な対応をしてみました。実際に導入したのは、FTPで指定回数以上ログインに失敗したら当該アドレスからのFTPアクセスをiptablesを使用してロックするようにしてみました。このような方法はいろいろな応用ができ、例えばシステムがパニックしたらシャットダウンしてしまうとか、ネットワークを停止する等のアクションも可能です。(このような設定を動かすには勇気がいりますが・・・。)

  1. 設定ファイルに追加パターンの作成

    まずは、実際にFTPでログインして認証に失敗し、/var/log/messagesに出力されたエラーメッセージを調査する。そこからそのメッセージ固有のパターンと宛先アドレスを抽出できるよう、正規表現を考える。

    今回のパターンは以下のとおりで、ログイン失敗は後半の「Authentication failure」だけでがよいが、別途作成する管理スクリプトでアクセス元をベースにiptablesで遮断したいので、全般でアクセス元のIPアドレスを抽出している。(本来は、検出メッセージを引数としてコマンドに渡せるはずなので、後半の文字列だけでよいはずであるが、どうしてもうまく渡せないので予めSwatch側で検出してパラメータ指定で渡すことにした。)。元のメッセージは上記の「Swatchの動作テスト」のところにある3行目のメッセージで、[192.168.1.xx]のところでアドレス検出をする例である。「[ ] . 」は「\」で特殊記号処理し、(\d+\.\d+\.\d+\.\d+)の部分で、4個の複数桁「\d+」の「.」で区切られた数字を検出し、「.*」は改行を除く任意の連続した文字列を表し、「Authentication failure」はログイン失敗を識別する文字列そのままである。

    /\[(\d+\.\d+\.\d+\.\d+)\].*Authentication failure/

  2. 実際の設定内容

    今回のアクションは、上記パターンを検出したらおやじ宛てにメールを送信し同時に(\d+.\d+.\d+.\d+)にマッチしたアクセス元アドレスを引数として、/usr/local/bin/hack/hacker.cgiが起動する。hacker.cgiでは、ip毎の起動カウンタを持ち一定回数以上エラーしたらiptablesでロックするようにした。

    watchfor /\{(\d+\.\d+\.\d+\.\d+)\].*Authentication failure/
       echo
       mail=oyaji\@mail.aconus.com,subject="FTP Login failure"
       exec "/usr/local/bin/hack/hacker.cgi $1"

    ・echo: Swatchのログファイルに書き出すための設定。
    ・mail=oyaji\@mail.aconus.com,subject="FTP Login failure":
       おやじ宛に、FTP Login failure というタイトルでメール送信。
    ・exec "/usr/local/bin/hack/hacker.cgi $1":
       $1はパターンマッチでマッチした最初の変数(\d+\.\d+\.\d+\.\d+)で、これを引数として/usr/local/bin/hack/hacker.cgiを起動。

  3. 管理スクリプト(hacker.cgi)

    今回作成したものはかなり手抜きで、こちらのような簡単なもの。上記で指定したパスにhacker.cgiという名前(/usr/local/bin/hack/hacker.cgi)で設置する。

    パラメータ 概 要
    $dir = '/usr/local/bin/hack/' スクリプトを置いたディレクトリ。この配下に不正アクセスIPアドレスのログ(IPアドレス.cnt)が置かれる。
    $limit = 2; 同一アドレスからのエラー許容回数。
    $iptables="/usr/sbin/iptables" iptablesのパス。デストリで異なる。
    $chain="HACKER" iptablesでダイナミックに制御するチェーンの名称。

    ・一旦ロックすると、ログを捨ててiptablesを初期化するか個別解除するまでアクセスできないので動的IPで被害者が出るかもしれない。
      解除は、設定と全く同じでパラメータが「-A」から「-D」になるだけ。
        /usr/sbin/iptables -D HACKER -p tcp --dport 21 -s (IPアドレス) -j DROP
    ・システムを再起動するとiptablesの設定は消えてしまうが、ログカウンタがあるため次回アクセスで失敗すれば再度ロックされる。

  4. iptables用スクリプトの修正

    おやじは、こちらにあるようなスクリプトでiptablesを動かしているので、これに上記のhacker.cgiで制御するダイナミックなHACKERとういチェーンを追加し、管理を容易にした。追加したのは下記の2行だけで、HACKERというチェーンを新規に定義し、入力されるTCPパケットに関して、まずはこのチェーンで評価するようにしただけです。従って、このチェーンに特定のソースアドレスからのFTPポート(21番)へのアクセスを遮断するようにhacker.cgiで書いてあげれば、二度とFTPサーバにはアクセスできなくなる。もっと強行にするなら、プロトコルやポート指定なしでソースアドレスだけで遮断するようにすれば、全くアクセスできなくすることもできる。

    #!/bin/sh

    ### IPアドレス、ネットワークアドレスの定義 ###
    # サーバ機のアドレス #
    MYHOST='192.168.1.100'
    # 家庭内のアドレス(192.168.0.0/24と1.0/24を合わせて指定)#
    HOME='192.168.0.0/23'
    # NTPサーバのアドレス #
    # NTP1: xxx.xxx.xxx.xxx -- プロバイダ
    # NTP2: 210.173.160.57  -- MFEED(ntp2.jst.mfeed.ad.jp)
    NTP1='xxx.xxx.xxx.xxx'
    NTP2='210.173.160.57'

    # ip_conntrack_ftpのロード #
    modprobe ip_conntrack_ftp

    ### iptablesのコマンドパスの定義 ###
    IPTABLES='/sbin/iptables'

    ### IPフォワードの停止 ###
    echo 0 > /proc/sys/net/ipv4/ip_forward

    ### iptablesのチェーンの初期化 ###
    $IPTABLES -F

    ### 暗黙のdeny(デフォルトで拒否)とするルールの設定 ###
    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
    $IPTABLES -P OUTPUT DROP

    ### 新規にHACKERというチェーンを追加
    $IPTABLES -N HACKER


    ### ループバックアドレスに関するアクセスを全て許可 ###
    $IPTABLES -A INPUT  -i lo -j ACCEPT
    $IPTABLES -A OUTPUT -o lo -j ACCEPT

    ### 入ってくるTCPパケットは全てに先立ちHACKERチェーンで評価
    $IPTABLES -A INPUT -p tcp -j HACKER


    ### 家庭内からのDNS問い合わせを許可 ###
    $IPTABLES -A INPUT  -p udp -s $HOME --dport 53 -j ACCEPT
    $IPTABLES -A OUTPUT -p udp -d $HOME --sport 53 -j ACCEPT
    $IPTABLES -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 53 -j ACCEPT
    ### DNSサーバからの外部DNS問い合わせを許可 ###
    $IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT
    $IPTABLES -A INPUT  -p udp --sport 53 -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT

    ### 家庭内からのNTP問い合わせを許可 ###
    $IPTABLES -A INPUT  -p udp -s $HOME --dport 123 -j ACCEPT
    $IPTABLES -A OUTPUT -p udp -o $HOME --sport 123 -j ACCEPT
    ### NTPサーバからの外部NTP問い合わせを許可 ###
    $IPTABLES -A OUTPUT -d $NTP1 -p udp --dport 123 -j ACCEPT
    $IPTABLES -A INPUT  -s $NTP1 -p udp --sport 123 -j ACCEPT
    $IPTABLES -A OUTPUT -d $NTP2 -p udp --dport 123 --sport 123 -j ACCEPT
    $IPTABLES -A INPUT  -s $NTP2 -p udp --dport 123 --sport 123 -j ACCEPT

    ### 家庭内でのファイル共有(NetBIOS)を許可 ###
    $IPTABLES -A INPUT  -p udp -s $HOME --dport 137:138 -j ACCEPT
    $IPTABLES -A OUTPUT -p udp -d $HOME --sport 137:138 -j ACCEPT
    $IPTABLES -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 139 -j ACCEPT

    ### 家庭内からのSWAT(SWAT:901)アクセスを許可 ###
    $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 901 -j ACCEPT

    ### 家庭内からのProxyアクセス(PROXY:8080)を許可 ###
    $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 8080 -j ACCEPT

    ### 家庭内でのSSH(22)の使用を許可 ###
    $IPTABLES -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 22 -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW -d $HOME --dport 22 -j ACCEPT

    ### WWWサーバへのアクセス(HTTP:80,HTTPS:443)を許可 ###
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

    ### 外部WWWサーバへのアクセス(HTTP:80,HTTPS:443)を許可 ###
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

    ### FTPサーバへのアクセス(Active/Passive)を許可 ###
    $IPTABLES -A INPUT  -p tcp -m state --state NEW --dport 21 -j ACCEPT
    $IPTABLES -A INPUT  -p tcp -m state --state NEW --dport 4000:4029 -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT

    ### 外部FTPサーバへのアクセス(Active/Passive)を許可 ###
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
    $IPTABLES -A INPUT  -p tcp -m state --state NEW --sport 20 -j ACCEPT

    ### メールサーバへのアクセス(SMTP:25/465)を許可 ###
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT

    ### 外部メールサーバへのアクセス(SMTP:25,POP3:110)を許可 ###
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 110 -j ACCEPT

    ### メールサーバへのアクセス(POP3:110/995,IMAP:143/993)を許可 ###
    ### 非SSL系は家庭内のみ許可 ###
    $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 110 -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 143 -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 993 -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 995 -j ACCEPT


    ### Ident(113)を拒否(DROPするとレスポンスが遅くなるのでReject) ###
    $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

    ### PINGに対する処理 ###
    $IPTABLES -A INPUT  -p icmp --icmp-type 8 -j ACCEPT
    $IPTABLES -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
    $IPTABLES -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
    $IPTABLES -A INPUT  -p icmp --icmp-type 0 -j ACCEPT

    ### セッション確立後のパケット疎通は許可 ###
    $IPTABLES -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    ### 設定内容の保存 ###
    /etc/rc.d/init.d/iptables save

    ### IPフォワードの開始 ###
    echo 1 > /proc/sys/net/ipv4/ip_forward



Top Pageへ