2012年9月4日火曜日

OpenBlocks AX3 で PacketFence を動かしてみる

はじめに


PacketFence は、ネットワークアクセスコントロール(Network Access Control, NAC)システムのオープンソース実装です。2004年頃から開発が行われ、現在に至るまでアクティブに開発が行われています。2012年8月現在の最新バージョンは 3.5.0 です。

大変多機能な PacketFence の主な特徴は以下の通りです。

  • in-band, out-of-band (VLAN) に対応
  • FreeRadius を使った 802.1X 認証、VoIPに対応
  • ワイヤレス接続も透過的に対応(有線でも無線でも共通のユーザDB、Web認証を使用可能)
  • snort/suricata を使った不正なネットワークアクティビティの検知が可能
  • Nessus / OpenVAS と連携させて脆弱製検出機能追加も可能
  • 問題のある端末をネットワークアクセスから隔離し、対象端末のステータスに応じて指定した URL へと誘導させる機能
  • コマンドラインからでも web ペースでも可能なシステム管理
  • ゲストアクセス機能

なお、オフィシャルの推奨環境としては以下のように挙げられています。

  • Intel / AMD CPU 3GHz (もしくはそれ以上)
  • 2GB (もしくはそれ以上) の RAM
  • 20GB (もしくはそれ以上) のディスクスペース (RAID 1 を推奨)
  • 1 ネットワークカード (高可用性向け設定には +1, 侵入検知向け設定には +1)

ドキュメント・マニュアル類は公式 web サイトにてPDFが公開されており、大変充実した内容となっています。

今回は、この PacketFence を OpenBlocks AX3 にインストール、使用を試みてみました。


PacketFence の AX3 へのパッケージインストール


PacketFence 自体はアーキテクチャ非依存の(主に)perl スクリプトで構成されていますが、PacketFence が使用する各種 perl モジュールの中には一部、アーキテクチャ依存のものがあったり、Debian 公式のリポジトリには存在しないパッケージも多数必要となります。

PacketFence 自体は6月リリースのバージョン 3.4.0 から deb パッケージが公開されていますが、i386 と amd64 のみのリポジトリのみとなっており、armel 用のパッケージ群はオフィシャルには用意されていません。

そこで今回、アーキテクチャ依存の perl モジュールを含め、PacketFence 3.5.0 をインストールするのに必要なパッケージ群をリポジトリとして用意しました。

/etc/apt/sources.list.d/pf.list などのファイルを作成し、そこに
deb     http://ftp.plathome.co.jp/pub/OBSAX3/obdnmag/packetfence35 squeeze main
deb-src http://ftp.plathome.co.jp/pub/OBSAX3/obdnmag/packetfence35 squeeze main
と書いてやり、
# apt-get update
# apt-get install packetfence
とすれば、AX3 用に PacketFence を導入できるようにしました(パッケージには署名を施していませんので、"WARNING: The following packages cannot be authenticated!" と表示されますが、Y を押下して進めてください)。

VLAN 設定可能な L2 スイッチを併用するのであれば、ネットワークアダプタが1つあればよく、メインのネットワーク(eth0)の他に登録用ネットワーク(eth0:2)と隔離用ネットワーク(eth0:3)といった風に /etc/network/interfaces に登録しておきます。Snort などを使った不正検出を行う場合は、パケット監視用に別途他のアダプタ(例えば eth3)を用意しておきます。
そうでないのであれば、複数のアダプタに対して、メイン(eth0)、登録用(eth1, eth2, ...)といった風に登録しておきます。


installer.pl によるインストール作業


ここまで済んだら、以下のコマンドを実行して、PacketFence のインストールを完了させます。
# /usr/local/pf/installer.pl

(1) 最初に DISCLAIMER が表示され、許諾するかどうか聞かれます

(2) 続いて PacketFence の使用する MySQL データベースの情報を聞かれます
MySQL Host [localhost]:
MySQL Port [3306]:
Database Name [pf]:
Current Admin User [root]:
Current Admin Password:

(3) 更に PacketFence 用にデータベース pf を作成する旨確認を促されます

(4) PacketFence が DB アクセス時に使うアカウント作成を促されます
Username [pf]:
Password:
Confirm:

(5) PacketFence の管理者ユーザアカウント作成を促されます
Username [admin]:
New password:
Re-type new password:

(6) Snort 用のルールファイルを emergingthreats.net からダウンロードするか尋ねられます
Do you want me to download the latest Emergingthreats rule files?
This is only necessary if you intent to use Snort. [y|n]
「y」を選ぶと、以下のファイル群がダウンロードされます
/usr/local/pf/conf/snort/emerging-botcc.rules
/usr/local/pf/conf/snort/emerging-attack_response.rules
/usr/local/pf/conf/snort/emerging-exploit.rules
/usr/local/pf/conf/snort/emerging-malware.rules
/usr/local/pf/conf/snort/emerging-p2p.rules
/usr/local/pf/conf/snort/emerging-scan.rules
/usr/local/pf/conf/snort/emerging-shellcode.rules
/usr/local/pf/conf/snort/emerging-trojan.rules
/usr/local/pf/conf/snort/emerging-virus.rules
/usr/local/pf/conf/snort/emerging-worm.rules

(7) DHCP フィンガープリントファイルのダウンロード・更新を行うか尋ねられます
Do you want me to update the DHCP fingerprints to the latest available version? [y|n]
「y」を選ぶと、以下のファイルがダウンロードされます
/usr/local/pf/conf/dhcp_fingerprints.conf

(8) OUI (Organization Unit Identifier) ファイルのダウンロード・更新を行うか訪ねられます
Do you want me to update the OUI prefixes to the latest available version? [y|n]
「y」を選ぶと、以下のファイルがダウンロードされます
/usr/local/pf/conf/oui.txt

(9) その他、後処理(必要なディレクトリの生成、一部ファイル・ディレクトリのオーナーシップ変更など)が行われて終了です
Installation is complete
** Please run /usr/local/pf/configurator.pl before starting PacketFence **



configurator.pl による PacketFence の初期設定



PacketFence の設定は主に以下の2ファイルで行われます。
/usr/local/pf/conf/pf.conf
/usr/local/pf/conf/networks.conf

前者(pf.conf)に書かれていないパラメータ(デフォルト値)は、
/usr/local/pf/conf/pf.conf.defaults
から補完されますので参照して下さい。

これらの設定を(テンプレートを元に)インタラクティブに行うコマンドラインツールが、 上述の installer.pl 終了直後に実行を促される configurator.pl となります。
# /usr/local/pf/configurator.pl

ここでは、以下の様な使用形態を前提として設定を行うこととします。
  • インラインネットワーク(PacketFence ホストをルータとして使用)
  • eth0 が外部と繋がっているネットワーク(マネージメントネットワーク)
    192.168.0.0/24
    
web 管理画面へのアクセスもこちらから行う
  • eth1eth2 が登録用ネットワーク
    192.168.1.0/24, 192.168.2.0/24

eth1eth2 の登録ネットワークセグメントに接続された端末は、PacketFence が dhcp によって供与する IP アドレスを与えられ、web アクセスを行うと、そのアクセスはリダイレクトされ Captive Portal へと導かれます。

(1) Snort を使った不正検出の有効・無効を選ぶ
[trapping]detection={disabled,enabled} に対応
有効にする場合は、VLANで使わないインタフェースを別途指定します(eth3など)
What kind of configuration would you like to put in place?
    1) PacketFence standalone (Basic configuration)
    2) PacketFence with detection (SNORT)
Configuration choice:
 [1|2]

(2) VLAN 使用の有無を選ぶ。VLAN のみ、インラインのみ、VLAN インライン混在から選びます。
What kind of enforcement would you like to use for isolation?
    1) VLANs
    2) Inline
    3) VLANs and Inline
Enforcement choice:
 [1|2|3]

(3) PacketFence 全般の設定

(3.1) ホストネームの設定
[general]hostname= に対応
What's my host name (without the domain name)?
    (default: packetfence | current: platax3 | ?)

(3.2) ドメイン名の設定
[general]domain= に対応
What's my domain name?  (default: packetfence.org | current: localdomain | ?)

(3.3) DHCP サーバの設定
[general]dhcpservers= に対応
DHCP servers, including me (comma delimited):
    (default: 127.0.0.1 | current: 127.0.0.1 | ?)

(3.4) 管理用 Web UI のポート番号の設定
[ports]admin= に対応
What will be my webGUI admin port? (default: 1443 | current: 1443 | ?)

(3.5) 通知用メールアドレスの設定
[alerting]emailaddr= に対応
Which email address should receive my notifications and other sundry goods sent?
    (default: pf@localhost | current: pf@localhost | ?)

(3.6) PacketFence 管轄下のサービスが停止していた場合、メールを送るかどうかの設定
[servicewatch]email={enabled,disabled} に対応
Should I send notification emails when services managed by PacketFence
    are not running? (default: enabled | current: enabled | [ enabled|disabled ] | ?)

(3.7) そのサービスが停止していた際に PacketFence がそれらを再起動するかどうかの設定
[servicewatch]restart={enabled,disabled} に対応
Should I restart services I manage and that seems halted?
    (Remember that you'll need to install a cron entry. See conf/pf.conf.defaults)
    (default: disabled | current: disabled | [ enabled|disabled ] | ?)

(3.8) 強制的デバイス登録を有効にするかの設定
[trapping]registration={enabled,disabled} に対応
Do you want to force registration of devices?
    (default: disabled | current: disabled | [ enabled|disabled ] | ?)

(3.9) 高可用性 (HA) セッティングにするかどうかの設定
Do you want to use a high-availability setup? (default:  | [ enabled|disabled ] | ?)

(4) Snort で監視するポートを選ぶ
What is my monitor interface?
    (default:  | [ eth0|eth1|eth2|eth3|sit0 ] | ?)

(5) データベース設定

(5.1) データベースサーバのホスト名
[database]host= に対応
Where is my database server? (default: localhost | current: localhost | ?)

(5.2) データベースサーバのポート
[database]port= に対応
Which port is it listening on? (default: 3306 | current: 3306 | ?)

(5.3) 使用するデータベース名
[database]db= に対応
Which database should I use? (default: pf | current: pf | ?)

(5.4) データベースアクセス時に使用するアカウント
[database]user=pass= に対応
Which account should I use? (default: pf | current: pf | ?)
What is the password associated with this account?:
Confirm:

(6) ネットワークインタフェースの設定
pf.conf[network eth0] などの設定と、networks.conf 内の設定に対応
*** PacketFence configuration rely on your network interfaces attributes. Prior to
continue, make sure that those are correctly configured using ifconfig (You should
open a new term window to avoid closing this configuration process) ***

Is eth0 ( 192.168.0.196 ) to be used by PacketFence? [y|n]
What kind of interface is it? (default:  | [ internal|management ] | ?)

Is eth1 ( 192.168.1.254 ) to be used by PacketFence? [y|n]
Is eth2 ( 192.168.2.254 ) to be used by PacketFence? [y|n]

(7) PacketFence ネットワークの設定
networks.conf 内の設定に対応
*** PacketFence will now be configured to act as a DHCP / DNS server on the
enforcement enabled interfaces ***

Interface eth1 (192.168.1.254 mask 255.255.255.0)
What's the network prefix? (ex: 192.168.1.0) (default:  | ?)
What is the DHCP scope first address? (default:  | ?)
What is the DHCP scope last address? (default:  | ?)

Interface eth2 (192.168.2.254 mask 255.255.255.0)
What's the network prefix? (ex: 192.168.1.0) (default:  | ?)
What is the DHCP scope first address? (default:  | ?)
What is the DHCP scope last address? (default:  | ?)

(8) 終了
Writing PacketFence and networks configurations

ここまでで、/usr/local/pf/conf/{pf,networks}.conf が設定され、出力されます。

実際の動作時(/etc/init.d/packetfence start など)には、/usr/local/pf/conf/ 以下の各種設定ファイルをもとに、/usr/local/pf/var/conf/ 以下に設定ファイルが生成され、それらが各サービス・デーモンの設定ファイルとして使用されます。


その他、必要に応じて行う設定



(9.1) web admin 用アカウントのパスワードを設定
# htpasswd -d /usr/local/pf/conf/admin.conf admin
# htpasswd -d /usr/local/pf/conf/admin.conf webservice
これらは installer.pl 実行時に聞かれて設定する場合もあります。

(9.2) ip_forward を有効にする
インライン利用の場合、この設定が必要となる場合があります。
# vi /etc/sysctl.conf
net.ipv4.ip_forward=1

(9.3) webservice パスワードの設定
FreeRadius を認証に使用する場合に必要となります。
/etc/freeradius/packetfence.pm
FreeRadius 側から PacketFence にアクセスする為のアカウント設定
WS_PASS を (9.1) で設定した webservice アカウントのパスワードに設定します
/etc/freeradius/sql.conf
FreeRadius 側から SQL データベースにアクセスする為のアカウント設定
password を installer.pl 実行時に設定した pf アカウントのパスワードに設定します

(9.4) networks.conf の編集
インライン使用の場合、/usr/local/pf/conf/networks.conf 内の各インタフェース用設定パラメータにおいて、以下を確認し、必要であれば編集します。
  • named=enabled に修正(デフォルトでは disabled になっている)
  • dns= の値を、PacketFence 内部 DNS ではなくグローバルに引ける DNS に設定
後者は、例えばインラインネットワーク 192.168.1.0/24eth1 (192.168.1.254) では、dns=192.168.1.254 にするのではなく、外部ネットワークのグローバル DNS (例えば 8.8.8.8 など) にしておくことが、正しく動作するために必要です。

(9.4) Oinkmaster のインストールと設定
Snort を使う場合、不正検出ルールファイルの定期的な更新が必要になるので、この定義ファイルの自動更新の設定を行うツールを入れ、設定しておくとよいでしょう。

Oinkmaster は、Debian squeeze にパッケージが存在しているので、それをインストールして PacketFence 用に設定してもよいですが、PacketFence は全体的に /usr/local/pf/ 内で全完結することをよしとするようですので、その際は
  • oinkmaster 一式を /usr/local/pf/oinkmaster にコピーする
  • PacketFence が提供するサンプルの oinkmaster 設定ファイル 
/usr/local/pf/addons/snort/oinkmaster.conf
 で、oinkmaster 付属のデフォルト設定ファイルを置き換える
  • oinkmaster.conf 内の
 url = http://rules.emergingthreats.net/open/snort-2.9.0/emerging.rules.tar.gz
 を、インストールされている snort のバージョンに近いもの
 url = http://rules.emergingthreats.net/open/snort-2.8.4/emerging.rules.tar.gz
 に書き換える
などといった手順を踏むことになります。

その後、oinkmaster が定期的に実行されるように
0 23 * * * (cd /usr/local/pf; perl oinkmaster/oinkmaster.pl \
            -C conf/oinkmaster.conf -o conf/snort/)
などと cron に登録しておきます。


管理 web UI へのアクセス


マネージメントネットワーク (ここでは eth0) 側のセグメントから、以下の URL にアクセスすることで可能です。
https://(packetfence eth0 側のホスト名またはIPアドレス):1443/

この画面からユーザ名 admin、パスワードは (9.1) で設定したものを使ってログインすると、管理画面のダッシュボードが表示されます。

この画面で閲覧・設定可能な内容は全て、管理コマンド /usr/local/pf/bin/pfcmd を使って閲覧・設定が可能です。



利用パターンの概要


PacketFence では、主に以下の VLAN に分割してネットワークセグメントを管理します。
  • 通常のネットワーク (Regular VLAN)
  • 登録用ネットワーク (Registration VLAN)
  • 隔離用ネットワーク (Isolation VLAN)
登録されていないホストやユーザは、登録用ネットワークへと導かれます。登録が済んだホスト・ユーザは通常のネットワークへと導かれます。Snort 使用時は、ネットワークアクティビティの不正を検出した際、隔離用ネットワークへと導かれます。

VLAN を使わず PacketFence をルーター的に使う場合(今回はこちらで動作検証を行いました)は、以下のように管理されます。
  • 通常のネットワーク
  • インラインネットワーク
登録されていないホストやユーザは、インラインネットワークからアクセスし、登録を促されます。登録が済んだホスト・ユーザは、外部ネットワークへのアクセスが許可され、PacketFence マシンがルータとして機能します。

PacketFence 上に登録されていないホストは登録用ネットワークへと導き、登録が済んだホストは通常のネットワークへと導かれます。この際、ユーザが自らゲスト登録を行うようにする設定も可能です。
/usr/local/pf/conf/pf.conf:
guests_self_registration={enabled|disabled}
ユーザ自身によるゲスト登録は、SMS を使ったアクティベーション、電子メールでのアクティベーションなどがありますが、日本の SMS 環境は今のところ考慮されていないコーディングになっているようですので、修正を行うか、電子メールでのアクティベーションを使うことになるでしょう。

Snort を使った検出の結果違反があった場合(例えば Limewire を使っているホストを検出した場合、など)、隔離用ネットワークへと移されたり(VLAN)、アクセスがブロックされたり(インライン)します。以下は、デフォルトで設定ファイルに書かれている、Limewire を使ったパケット検出を有効にする設定です。
/usr/local/pf/conf/violations.conf:
[2001808]
desc=P2P (Limewire)
priority=8
url=/remediation.php?template=p2p
enabled=Y
max_enable=1
trigger=Detect::2001808
VLAN 設定可能な L2 スイッチを PacketFence と連携して使う場合、1ホストアダプタ (eth0) 上で複数 VLAN を動かせばよいので、必ずしも 2ホストアダプタ以上は必要としません(Snort を使う場合は、パケット監視用に1アダプタを使用します)。

VLAN ではない通常のインラインネットワークを使う場合は、PacketFence 稼働ホスト(ここでは AX3 マシン)がルータとして働き、iptables NAT が使われることになるので、登録済みホストのネットワークアクセスパケットは全て PacketFence ルータを通過することになり、それだけ負荷もあがることになります。また、ネットワーク的にも SPOF (Single Point of Failure) になりやすいので注意が必要でしょう。


インライン運用による使用例


以下、PacketFence が稼働する AX3 マシンをルータ・ファイヤーウォール的に使用し、このマシンのインラインネットワークに接続するホストを制御する際のおおまかな流れを、スクリーンショットを交えて概説します。

ここで AX3 は、eth0 を介して外部ネットワークに接続されており、eth1eth2 をインラインネットワークとして使用します。全ての端末はこのインラインネットワーク下に接続されるものとします。
/usr/local/pf/conf/pf.conf{,.defaults}:

[trapping]
registration=enabled

[registration]
guests_self_registration=enabled
のように設定しており、未認証端末はユーザ自身によるゲスト登録画面へと誘導されます。

また、ここでは AX3 マシン上でのローカルの認証を行い、LDAP や FreeRADIUS などは使用していません。
/usr/local/pf/conf/pf.conf{,.defaults}:

[registration]
# Method by which registering nodes will be authenticated.
# Templates for LDAP, RADIUS, Kerberos, local and guests are
# available at /authentication.  If you wish to use
# a different authentication mechanism, simply create a file
# called /authentication/.pm,
# fill it with the necessary data, and set auth=.
# The default value, local, relies on a local access file in
# /user.conf.
auth=local

インラインネットワーク下の未認証端末が web アクセスをしようとすると、ブラウザには以下のような画面(Captive Portal)が表示されます。


ここで「Sign up」をクリックすると、ユーザ自身によるゲスト登録を行う画面へと遷移します。

ここでは
/usr/local/pf/conf/pf.conf{,.defaults}:

[guests_self_registration]
modes=sms,email,sponsor
という設定になっており、SMS による認証、電子メールによる認証、スポンサー経由の認証が有効になっています。通常の使用では modes=email だけで充分と思われます。


必須入力フィールドも設定ファイルで指定可能です。デフォルトは以下の通りです。
/usr/local/pf/conf/pf.conf{,.defaults}:

[guests_self_registration]
mandatory_fields=firstname,lastname,phone,email

デフォルトでは無意味な文字列である「Acceptable Use Policy」内の文面は、以下で定義されています。
/usr/local/pf/html/captive-portal/templates/aup_text.html

その他、認証時に表示される各遷移ページは、以下に HTML 形式で置かれているので、必要に応じてカスタマイズ可能です。
/usr/local/pf/html/captive-portal/templates/

この段階で、Web 管理画面の「NODE」⇒「view」を覗くと、以下の様に表示され、インラインネットワークへのアクセスがあった全ホストの状態が閲覧できます。最も上に表示されたホストが現在ゲスト登録をしようとしているホストであり、「Status」が「unreg」つまり未登録であることが分かります。

同一の内容は、以下のコマンドでも閲覧可能です。
# /usr/local/pf/bin/pfcmd node view all


認証用のメールを受け取りたいメールアドレスを入力し「I accept the terms」にチェックを入れ、「Register by Email」をクリックすると、次のスクリーンショットの様な画面が表示されたのち、ネットワークアクセスが一時的に有効になります。


メールによる認証を行うまでの間、一時的に外部ネットワークへのアクセスが有効になりますが、この時間は設定により変更可能です。デフォルト設定では10分となっています。
/usr/local/pf/conf/pf.conf{,.defaults}:

[guests_self_registration]
email_activation_timeout=10m

PacketFence は、ゲスト登録画面で入力された電子メールアドレス宛に、認証用のメールを送ります。メール用に接続する SMTP サーバは設定ファイル内で変更可能です([alerting]smtpserver)。

インラインネットワーク上のゲスト端末自体から認証を行うためには、gmail などの web メールを使うことになると思われます。

送られたメールのサンプルは以下の通りです。


このリンクをクリックすると、正式にゲスト登録され、認証済の端末としてネットワークアクセスが可能になります。


デフォルトでは、認証完了後7日間のアクセスが可能となります。この日数は設定により変更可能です。
/usr/local/pf/conf/pf.conf{,.defaults}:

[guests_self_registration]
# The length of network access a confirmed guest will have. On successful
# confirmation a guest node's unregdate is set to now + access_duration.
access_duration=7D


その他


上のケースでは、ユーザ自身によるゲスト登録という流れでしたが、
  • ユーザ自身によるゲスト登録申請、それを受けて管理者が許可・拒否を行う
  • ユーザ自身の登録は行えず、管理者があらかじめ許可登録したホストのみ使用可能
といった運用も可能です。


現時点での問題点


全体的にパフォーマンスが遅い
インラインでの運用(AX3 をルータ・ファイヤーウォール的に使用)では、iptables NAT によるオーバーヘッドもあり、スループット的にはあまり期待できないようです。

実際、サーバ機(Core2Duo E8400)とクライアント機(Atom 330)を用意し、ab (Apache Bench) で静的コンテンツに対する簡単なベンチマーク(ab -c 100 -n 100000 http://test.localdomain/sample.html など)をとってみたところ、AX3 を経由しない場合に平均 55,000Kbytes/sec のパフォーマンスがでたところ、AX3 を経由した場合 (PacketFence をルータ的に使用) には、平均 35,000Kbytes/sec にまで低下してしまいました。この時 PacketFence によって自動設定された iptables の内容を巻末に引用しておきます。

また、Perl モジュールを組み合わせて作られている PacketFence そのものや web 管理インタフェース表示のレスポンス、サービス再起動時などに要する時間なども比較的長めで、これは公式サイトで推奨ハードウェアとして挙げられているスペックより低いため、致し方ないと思われます。

snort が動作しないことがある
snort を使った不正パケット監視を packetfence 側から管理する際、pfdetectsnort が特に異常なエラーログを出力することなく落ちることがありました。これは現在、パッケージング(PacketFence が必要とする各種 perl モジュールなども含めて)の為なのか、Debian wheezy からより新しい snort をバックポートする必要があるのか、それとも設定内容の不備の為なのか、を含め調査中です。なにか気付かれた方がいらっしゃいましたら、ご一報頂ければ幸いです。


付録


eth0 (192.168.0.0/24) が外部ネットワーク、eth1 (192.168.1.0/24), eth2 (192.168.2.0/24) がインラインネットワーク、という、インライン設定で PacketFence を運用する際に、自動設定される iptables 内容(例):
# Generated by iptables-save v1.4.8 on Mon Jul  2 22:11:15 2012
*filter
:INPUT DROP [83450:12805732]
:FORWARD DROP [5:380]
:OUTPUT ACCEPT [899415:51053741]
:forward-internal-inline-if - [0:0]
:input-highavailability-if - [0:0]
:input-internal-inline-if - [0:0]
:input-internal-vlan-if - [0:0]
:input-management-if - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -d 192.168.1.254/32 -i eth1 -j input-internal-inline-if
-A INPUT -d 255.255.255.255/32 -i eth1 -j input-internal-inline-if
-A INPUT -d 192.168.0.196/32 -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -d 192.168.2.254/32 -i eth2 -j input-internal-inline-if
-A INPUT -d 255.255.255.255/32 -i eth2 -j input-internal-inline-if
-A INPUT -d 192.168.0.196/32 -i eth2 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -j input-management-if
-A FORWARD -i eth1 -j forward-internal-inline-if
-A FORWARD -i eth2 -j forward-internal-inline-if
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A forward-internal-inline-if -m mark --mark 0x1 -j ACCEPT
-A input-highavailability-if -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A input-highavailability-if -p udp -m udp --dport 5405 -j ACCEPT
-A input-highavailability-if -p udp -m udp --dport 5407 -j ACCEPT
-A input-highavailability-if -p tcp -m tcp --dport 7788 -j ACCEPT
-A input-internal-inline-if -p udp -m udp --dport 67 -j ACCEPT
-A input-internal-inline-if -p tcp -m tcp --dport 67 -j ACCEPT
-A input-internal-inline-if -p tcp -m tcp --dport 53 -m mark --mark 0x3 -j ACCEPT
-A input-internal-inline-if -p udp -m udp --dport 53 -m mark --mark 0x3 -j ACCEPT
-A input-internal-inline-if -p tcp -m tcp --dport 53 -m mark --mark 0x2 -j ACCEPT
-A input-internal-inline-if -p udp -m udp --dport 53 -m mark --mark 0x2 -j ACCEPT
-A input-internal-inline-if -p tcp -m tcp --dport 53 -m mark --mark 0x1 -j DROP
-A input-internal-inline-if -p udp -m udp --dport 53 -m mark --mark 0x1 -j DROP
-A input-internal-inline-if -p tcp -m tcp --dport 80 -m mark --mark 0x1 -j DROP
-A input-internal-inline-if -p tcp -m tcp --dport 443 -m mark --mark 0x1 -j DROP
-A input-internal-inline-if -p tcp -m tcp --dport 80 -j ACCEPT
-A input-internal-inline-if -p tcp -m tcp --dport 443 -j ACCEPT
-A input-internal-vlan-if -p udp -m udp --dport 53 -j ACCEPT
-A input-internal-vlan-if -p udp -m udp --dport 67 -j ACCEPT
-A input-internal-vlan-if -p tcp -m tcp --dport 67 -j ACCEPT
-A input-internal-vlan-if -p tcp -m tcp --dport 80 -j ACCEPT
-A input-internal-vlan-if -p tcp -m tcp --dport 443 -j ACCEPT
-A input-management-if -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 1443 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 1812 -j ACCEPT
-A input-management-if -p udp -m udp --dport 1812 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 1813 -j ACCEPT
-A input-management-if -p udp -m udp --dport 1813 -j ACCEPT
-A input-management-if -p udp -m udp --dport 162 -j ACCEPT
-A input-management-if -p udp -m udp --dport 67 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 67 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 9392 -j ACCEPT
-A input-management-if -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Mon Jul  2 22:11:15 2012
# Generated by iptables-save v1.4.8 on Mon Jul  2 22:11:15 2012
*mangle
:PREROUTING ACCEPT [1656139:1620626399]
:INPUT ACCEPT [280:41132]
:FORWARD ACCEPT [1655790:1620570673]
:OUTPUT ACCEPT [90:8961]
:POSTROUTING ACCEPT [1655880:1620579634]
:prerouting-int-inline-if - [0:0]
-A PREROUTING -i eth1 -j prerouting-int-inline-if
-A PREROUTING -i eth2 -j prerouting-int-inline-if
-A prerouting-int-inline-if -j MARK --set-xmark 0x3/0xffffffff
-A prerouting-int-inline-if -m mac --mac-source 00:1B:FC:XX:XX:XX -j MARK \
        --set-xmark 0x1/0xffffffff
-A prerouting-int-inline-if -m mac --mac-source 00:1C:C0:YY:YY:YY -j MARK \
        --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Mon Jul  2 22:11:15 2012
# Generated by iptables-save v1.4.8 on Mon Jul  2 22:11:15 2012
*nat
:PREROUTING ACCEPT [136694:21222584]
:INPUT ACCEPT [170:44855]
:OUTPUT ACCEPT [42437:2575166]
:POSTROUTING ACCEPT [42437:2575166]
:postrouting-int-inline-if - [0:0]
:prerouting-int-inline-if - [0:0]
-A PREROUTING -i eth1 -j prerouting-int-inline-if
-A PREROUTING -i eth2 -j prerouting-int-inline-if
-A POSTROUTING -o eth0 -m mark --mark 0x3 -j postrouting-int-inline-if
-A POSTROUTING -o eth0 -m mark --mark 0x1 -j postrouting-int-inline-if
-A POSTROUTING -o eth0 -m mark --mark 0x2 -j postrouting-int-inline-if
-A postrouting-int-inline-if -j MASQUERADE
-A prerouting-int-inline-if -p udp -m udp --dport 53 -m mark --mark 0x3 -j REDIRECT
-A prerouting-int-inline-if -p udp -m udp --dport 53 -m mark --mark 0x2 -j REDIRECT
-A prerouting-int-inline-if -p udp -m udp --dport 53 -m mark --mark 0x3 -j REDIRECT
-A prerouting-int-inline-if -p udp -m udp --dport 53 -m mark --mark 0x2 -j REDIRECT
-A prerouting-int-inline-if -p tcp -m tcp --dport 80 -m mark --mark 0x3 -j REDIRECT
-A prerouting-int-inline-if -p tcp -m tcp --dport 80 -m mark --mark 0x2 -j REDIRECT
-A prerouting-int-inline-if -p tcp -m tcp --dport 443 -m mark --mark 0x3 -j REDIRECT
-A prerouting-int-inline-if -p tcp -m tcp --dport 443 -m mark --mark 0x2 -j REDIRECT
COMMIT
# Completed on Mon Jul  2 22:11:15 2012

0 件のコメント:

コメントを投稿