Webサーバー構築の基礎 > iptablesとは?

Linuxには、「netfilter」「iptables」という[[ファイアウォール>ファイアウォールとは?]]の仕組みが備わっている。
Webサーバーの設定で、iptablesの使い方が、いまいちよく分からなかったので、調べて見た。

#contents

* iptablesとは? [#lec6124c]

[[iptables - Wikipedia>http://ja.wikipedia.org/wiki/Iptables]]
>iptables(アイピーテーブルズ)は、Linuxに実装されたIPv4用のパケットフィルタリングおよびネットワークアドレス変換(NAT)機能、またはその操作をするコマンドのこと。
ルーターの機能を果たす。
IPv6 用は ip6tables。

ISO参照モデルのレイヤー3(L3、IPパケット)を対象にして動作する。

* 参考書 [#db5708b0]

#html{{
<table border="0" cellpadding="5"><tr><td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/453403895X/gooddays1-22/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51DQZ4AHNWL._SL160_.jpg" border="0"></a>
</td>
<td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/453403895X/gooddays1-22/" target="_blank">図解でわかる Linuxサーバ構築・設定のすべて</a>
<br>
一戸 英男<br>
日本実業出版社<br>
2005-04-07<br>
2940円
</td></tr></table>
}}

* 参考リンク [#s07c6266]

- iptables - Google 検索
http://www.google.co.jp/search?q=iptables

- Man page of IPTABLES
http://linuxjm.sourceforge.jp/html/iptables/man8/iptables.8.html
- Iptablesチュートリアル 1.2.2
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/index.html
- 連載記事 「習うより慣れろ! iptablesテンプレート集」
http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html

- iptablesの設定
http://www.nina.jp/server/redhat/iptables/iptables.html
- 俺でも解るIPTABLES
http://saoshi.gooside.com/
- iptablesによるパケットフィルタリング
http://linux.kororo.jp/cont/security/iptables.php
- iptablesによるフィルタ設定 - とみぞーノート
http://wiki.bit-hive.com/tomizoo/pg/iptables%A4%CB%A4%E8%A4%EB%A5%D5%A5%A3%A5%EB%A5%BF%C0%DF%C4%EA
- iptables ファイヤウォール
http://complete.ddo.jp/cent5/iptables.html
- 管理者必見! ネットワーク・コマンド集 - iptablesコマンド:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070327/266505/
- iptables設定用スクリプト ありとあらゆるメモ
http://d.hatena.ne.jp/kurim0n/comment/20110905/1315215064
- iptablesメモ。firewallとして | ブーログ
http://ambiesoft.ddo.jp/blog/archives/157
-  iptablesによるアクセス制限 - マニュアル : マイティーサーバーの専用サーバー
http://www.mtsv.jp/support/manual/75/





* 用語 [#tfcfe020]
iptablesには、用語・概念がいろいろ出てくるが、意味を押さえておかないと、チンプンカンプンになる。><

** テーブル [#pfd4aa5e]
「テーブル」は、パケットフィルタリングなどの&color(red){ルールを保持する空間};です。
具体的には、チェイン(パケットを取り扱う方法を記述したルールのリスト)を保持します。
接続機能別に、「filter」「nat」「mangle」「raw」の4つのテーブルが用意されています。

| テーブル | 用途 |h
| filter | IPフィルタを設定 |
| nat | アドレス変換(IPマスカレード)を設定 |
| mangle | パケットの内容変更を設定(TOS、TTLなどを書き換え) |
| raw | パケットの追跡を無効にする設定 |

** チェイン [#h5999fa3]
「チェイン」は、&color(red){パケットを取り扱う方法を記述したルールのリスト};です。
パケットの方向や経路によって、「INPUT」「OUTPUT」「FORWARD」「PREROUTING」「POSTROUTING」の5つのチェインが用意されています。

| チェイン | 適用パケット |h
| INPUT | 自システム宛の受信パケット(中継パケットは含まない) |
| OUTPUT | 自システムからの送信パケット(中継パケットは含まない) |
| FORWARD | 中継パケット |
| PREROUTING | ルーティング前のパケット(受信直後のパケット) |
| POSTROUTING | ルーティング後のパケット(送信直前のパケット) |

各テーブルに用意されているチェインがあります。
(Linuxのkernelのバージョンによって、用意されているチェインの種類が異なります。)

| テーブル | チェイン |h
| filter | INPUT, OUTPUT, FORWARD |
| nat | PREROUTING, OUTPUT, POSTROUTING |
| mangle | PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING |
| raw | PREROUTING, OUTPUT |

~
CENTER:&ref(z01.gif);

~
CENTER:&ref(iptables-1.gif);

** ルール [#n8f243f6]
「ルール」は、&color(red){パケットを取り扱う方法の定義};です。
iptables記述の基本単位です。
ルールの内容は、「対象テーブルとチェイン」「パケットのマッチ条件」「条件にマッチしたときのターゲット(処理)」が基本です。

** ターゲット [#nf37b559]
「ターゲット」は、ルールの&color(red){条件にマッチしたパケットの処理方法};です。
例えば、filterテーブルには、あらかじめ、「ACCEPT」「DROP」「RETURN」「QUEUE」の4つのターゲットが用意されています。
ACCEPTは、パケットを通過させます。
DROPは、パケットを通過させずに破棄します。

| ターゲット | 動作 |h
| ACCEPT | パケットを通す |
| DROP | パケットを捨てる |
| QUEUE | パケットをカーネルからユーザ空間に渡す |
| RETURN | チェーンを辿るのをやめて、上位のチェーンに戻る。最上位であった場合は、チェーンポリシーで指定されているターゲットに従って動作する。 |
| REJECT | DROPと同じくパケットを捨てる。廃棄時にICMPエラーを返す点がDROPと異なる。返すエラー種別は--reject-withオプションで設定できる。 |

*** ユーザー定義チェイン [#z5c7d374]
デフォルトで用意されている5つのチェインの他に、新しいチェインをユーザーが定義することもできます。
例えば、pppのような特定インターフェース用のチェインを作り、そこにルールを記述します。

ユーザー定義チェインは、ターゲットとして指定できます。
例えば、pppインターフェースから入ってくるパケットを評価するためのppp-inというチェインを作り、INPUTチェインの中で、pppインターフェースから入ってくるパケットに関しては、ppp-inチェインをターゲットとして指定するという使い方ができます。

* パケットの評価 [#mc1d6563]
iptablesによるパケットフィルタリングが動作しているサーバーでは、NICを通過するパケットは、
-経路に従って
-順にチェインの中の
-ルールと比較されます。

そして、
-ルールに記述された条件とマッチしたとき、
-ルールに定義されたターゲットに渡されます。

チェインによっては、複数のテーブルで同じ名前のチェインが定義されている場合がありますが、そのすべてが順に評価されます。

* ルールの考え方 [#n3a5ef9d]
設定されたルールを評価する方式は、ファイアウォールソフトによって様々です。
iptablesの評価方式は、パケットフィルタリングに多い「ふるい落とし方式」ではなく、「選抜方式」(条件にマッチした時点で許可)が採用されています。

** ふるい落とし方式 [#bec20f9d]
いったんすべてのルールを評価する方式です。
この方式の場合、複数のルールの途中で間違った設定をしていると、思ったとおりに動作しません。
ふるい落とし方式の中にも、ルールを評価する順番を優先するタイプのものもあります。

** 選抜方式 [#b32b8595]
この方法は、最初にマッチしたルールに出会った時点でルールを評価します。
もし、その結果がACCEPTなら、その時点でパケットは通過し、ルールの評価はそこで終了します。
アプリケーションゲートウェイ(proxy)タイプは、この方法をとっているケースが多いようです。 


//-----------------------------------------------------------------------------


* iptablesの使い方 [#of017b7a]
iptablesコマンドのルール書式について、まとめ。
(参考)iptablesコマンドで使用するオプション http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-iptables-options.html

 iptables [-t <table-name>] <command> <chain-name> <parameter-1> <option-1> <parameter-n> <option-n>
 iptables [テーブル] コマンド [チェイン] [パラメーター(オプション)] [ターゲット]
という書式のルールを書き連ねていくことで、様々なパケットフィルタリングを設定できます。

** テーブルの指定 [#p2a1dc61]
テーブルは、「-t」オプションで指定します。
 -t テーブル名

- テーブル名は、「raw」「mangle」「nat」「filter」のいずれかを指定します。
- 省略した場合は、"-t filter" と同じ意味になり、テーブルとして「filter」が指定されます。

** コマンドの指定 [#af3ce8cf]
コマンドによって、チェインを指定して、チェインを操作します。

(参考)管理者必見! ネットワーク・コマンド集 - iptablesコマンド:ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20070327/266505/

| コマンドオプション | 動作 |h
| -A (または --append) | 指定したチェインに条件を追加する。 |
| -D (または --delete) | 指定したチェインの条件を削除する。 |
| -E (または --rename-chain) |  ユーザー定義チェーンの名前を変更する。 |
| -F (または --flush) | 指定したチェインの条件を全て消去する。チェインの指定を省略した際には全てのチェインの条件を消去する。(初期化) |
| -I (または --insert) | 指定したチェインの先頭に条件を挿入する。 |
| -L (または --list) | テーブルの条件を全て表示する。テーブルを指定しない場合は全てのテーブルを表示する。 |
| -N (または --new-chain) | 指定した名前でユーザ定義チェインを作成する。 |
| -P (または --policy) | テーブルの既定値となるターゲットを設定する。 |
| -R (または --replace) | 指定したチェインのルールを置換する。 |
| -X (または --delete-chain) | 指定したユーザ定義チェインを削除する。 |
| -Z (または --zero) | 全てのチェインのパケットカウンタとバイトカウンタをクリアする。 |

主に、
- -L はコマンドで設定を確認
- -P, -F, -X はスクリプトでの初期化
- -A はスクリプトで条件を設定
- -I, -D は動的に条件を追加、削除
する場合に使われます。

** パラメーター(条件)の指定 [#h94fa818]
パラメーターの指定によって、IPパケットにフィルタリング処理を適用する条件を指定できます。

*** プロトコルの指定 [#q9e92987]
条件として、プロトコルを指定する場合、「-p」(または「--protocol」)オプションを使います。
TCPとUDPの場合、ポート番号も指定できます。
「-sport」(または「--source-port」)で送信元ポート番号、「-dport」(または「--destination-port」)で宛先ポート番号を指定できます。
また、「-s」(または「--source」)で送信元IPアドレス、「-d」(または「--destination」)で送信先IPアドレスを指定できます。

| パラメーターオプション | 動作 |h
| -p [プロトコル名] | プロトコル名(tcp、udp、icmp、allなど)を指定する。省略した場合は全プロトコルが適用対象になる。よく使うのは「-p tcp」「-p udp」 |
| -sport ポート番号 | 送信元のポート番号の指定 |
| -dport ポート番号 | 宛先のポート番号の指定 |
| -s 送信元のIPアドレス[マスク] | 送信元(source)のIPアドレスを指定。複数のIPアドレスはサブネットマスク(CIDR表記)で指定。省略すると全ての送信元に適用 |
| -d 送信元のIPアドレス[マスク] | 宛先(distination)のIPアドレスを指定。複数のIPアドレスはサブネットマスク(CIDR表記)で指定する。省略すると全ての宛先に適用 |

*** インターフェースの指定 [#x7826a46]
条件として、インターフェース(LANカード、NIC)を指定する場合、
「-i」(または「--in-」「--in-interface」)
「-o」(または「--out-」「--out-interface」)オプションを使います。

| パラメーターオプション | 動作 |h
| -i インターフェース名 | 受信インターフェイスを指定する。複数のNICを「eth0」「eth1」等と指定して識別する。 |
| -o インターフェース名 | 送信インターフェイスを指定する。指定方法は「-i」と同じ。 |
※インターフェース名には、「eth*」の他に、「ppp*」「tap*」等があります。

*** マッチングモジュールの指定 [#b847e664]
条件として、マッチングモジュールを指定する場合、「-m」(または「--match」)オプションを使います。
+ iptablesでは、追加機能を提供するモジュールを作成できます。
+ デフォルトで、多くのモジュールが利用できるようになっています。

~
- limitモジュール
特定の規則を満たすパケットの数に「制限」を設けます。
SYNFLOOD攻撃など、大量のアクセスによるアタックを防止するときに便利です。

| モジュールオプション | 動作 |h
| --limit | 特定の時間帯に照合する回数を設定する。 <number>/<time>という形式で回数と時間単位を指定する。 |
| --limit-burst | 同時に照合できるパケットの最大数を指定する。このオプションは、--limitオプションとともに使用する。 値を指定しない場合、5つのパケットだけ照合。 |

(例) --limit 5/hour → 1時間に5回だけ照合。 回数と時間を指定しない場合は、デフォルト値の 3/hour が使用される。

~
- stateモジュール
パケットの接続(コネクション)の状態について照合を有効にします。

| モジュールオプション | 動作 |h
| --state | パケットの接続状態を指定。状態は「,」で区切り、複数を指定可能。|

指定できる状態は、
+「INVALID」=既存の接続と関係がないパケット、
+「ESTABLISHED」=確立された接続のパケット、
+「NEW」=新しい接続のパケット、
+「RELATED」=既存の接続と関係がある、新しい接続を開始するパケット(FTPなど)

これらの接続状態を複数組み合わせて使用するには、-m state --state INVALID,NEWのようにカンマで区切ります。

~
- macモジュール
ハードウェアMACアドレスの照合を有効にします。

| モジュールオプション | 動作 |h
| --mac-source | パケットの送信元であるネットワークインターフェースカードのMACアドレスを照合する。 |

** ターゲットの指定 [#rf2d3510]
ターゲットは、「-j」(または「--jump」)オプションで指定します。
 -j ターゲット名

| オプションの書式 | 適用 |h
| -j ACCEPT | パケットの通過を許可する |
| -j DROP | パケットを破棄する。エラーを返さない。 |
| -j REJECT | パケットの通過を拒否する。DROPと違い、エラーを返す。 |
| -j MASQUERADE | 「-t nat」と「-A POSTROUTING」を同時に用いて、送信元IPアドレスとポート番号の書き換えを行う。 |
| -j SNAT | 「-t nat」と「-A POSTROUTING」を同時に用いて、送信元IPアドレスの書き換えを行う。MASQUERADEと同様の機能だが、変換先IPアドレスが固定の場合はこちらを使う。 |
| -j DNAT | 「-t nat」と「-A POSTROUTING」を同時に用いて、宛先IPアドレスの書き換えを行う。 |
| -j ユーザ定義チェイン | パケットをユーザー定義チェインに引き渡し、処理させる。 |

*** 使用例 [#vc1be25a]
-使用例1:全ての接続先からのICMPパケットを拒否する
 iptables -t filter -A INPUT -p icmp -j DROP

-使用例2:外部からのFTPを拒否する
 iptables -t filter -A INPUT -p tcp --dport 20 -j DROP
 iptables -t filter -A INPUT -p tcp --dport 21 -j DROP

* フィルタリングルールの保存 [#a4961057]

** iptablesのルールセットファイル [#qa5d5ec2]
iptablesのルールセットは、
 /etc/sysconfig/iptables
というファイルに記述して、保存します。

起動スクリプト /etc/init.d/iptables を実行すると、
iptables-restoreユーティリティを使って、ルールセットファイルを読み込みます。

*** サービスの開始/停止/再起動 [#l2a22c7d]
- iptablesサービスの開始。
 # /etc/init.d/iptables start
- iptablesサービスの停止。
 # /etc/init.d/iptables stop
- iptablesサービスの再起動。ルールセットファイルを修正したとき、再起動が必要。
 # /etc/init.d/iptables restart

*** iptables設定の確認方法 [#hdf6b3ae]
- 設定の確認
 # iptables -L
- ルールセットファイルと同じ形式で設定を確認。
 # iptables-save

iptablesの文法に間違いがあれば、エラーメッセージが出ます。

* サンプル [#ib53a729]

** パケットフィルタリングの例1 [#kc81b7e2]
(参考)iptablesの設定 http://www.nina.jp/server/redhat/iptables/iptables.html

----
 # /etc/sysconfig/iptables
 
 ### テーブル
 ### *テーブル名
 # パケットフィルタリングでは、filterテーブルを使用
 *filter
     # filterテーブル、パケットのフィルタリングを実施
 
 ### チェーンの定義
 ### :チェーン名 デフォルトポリシー [パケットカウント:バイトカウント]
 # INPUT/FORWARD/OUTPUチェーンのいずれかひとつのみ使用する
 # デフォルトポリシーをACCEPTにすると明示されないパケットは通過され、DROPにすると明示されないパケットは破棄される
 :INPUT ACCEPT [0:0]
     # INPUTチェーン、送信先がローカルホストのパケットに適用される
 :FORWARD ACCEPT [0:0]
     # FORWARDチェーン、ローカルホストを経由するパケットに適用される
 :OUTPUT ACCEPT [0:0]
     # OUTPUTチェーン、送信元がローカルホストのパケットに適用
 :RH-Firewall-1-INPUT - [0:0]
     # ユーザ定義チェーン
 
 ### ルール
 # 基本は、-A チェーン名 マッチング条件 -j ターゲット
 #    -A チェーン名 : チェーンに新たなルールを追加
 #    -j(--jump) ターゲット : 条件したパケットをどうするか指定
 #                              ターゲットには、ACCEPT(許可)/DROP(破棄)/REJECT(拒否)ユーザ定義チェーンなどなどを指定
 #
 # マッチング条件の一部
 # 頭に"!"をつけると、notという意味
 #    -i(--in-interface) 受信インタフェース : filterテーブルでは、INPUT/FORWARDチェーンで使用可能
 #    -o(--out-interface) 送信インタフェース : filterテーブルでは、OUTPUT/FORWARDチェーンで使用可能
 #    -p(--protocol) プロトコルまたはプロトコル番号 : 指定できるプロトコルは、tcp/udp/icmp/all
 #    -s(--source、--src) 送信元アドレス : "192.168.0.1"、"192.168.0.0/24"、"192.168.0.0/255.255.255.0"のように指定
 #    -d(--destination、--dst) 送信先アドレス : "192.168.0.1"、"192.168.0.0/24"、"192.168.0.0/255.255.255.0"のように指定
 #
 # 以下は拡張されたマッチングの一部
 # 頭に"!"をつけると、notという意味
 #    -m tcp --sport(--source-port) TCP送信元ポート :  "-p tcp"のとき使用可能、ポート範囲は"0:1023"のように指定
 #    -m tcp --dport(--destination-port) TCP送信先ポート :  "-p tcp"のとき使用可能、ポート範囲は"0:1023"のように指定
 #    -m udp --sport(--source-port) UDP送信元ポート :  "-p udp"のとき使用可能、ポート範囲は"0:1023"のように指定
 #    -m udp --dport(--destination-port) UDP送信先ポート :  "-p udp"のとき使用可能、ポート範囲は"0:1023"のように指定
 #    -m state --state 接続状態 : 接続状態には、NEW(新規)/ESTABLISHED(接続中)/RELATED(既存の接続に関係?)/INVALID(その他)を指定
 #    --icmp-type ICMPタイプ : "-p icmp"のとき使用可能、指定できるICMPタイプは"iptables -p icmp -h"で確認
 -A INPUT -j RH-Firewall-1-INPUT
     # ローカルホスト宛のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック
 -A FORWARD -j RH-Firewall-1-INPUT
     # ローカルホスト経由のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック
 -A RH-Firewall-1-INPUT -i lo -j ACCEPT
     # 受信インタフェースが"lo"(ループバック)ならば、通信を許可
 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
     # プロトコルが"icmp"ならば、通信を許可
 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
     # プロトコル番号が"50"(ESP)ならば、通信を許可
 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
     # プロトコル番号が"51"(AH)ならば、通信を許可
 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
     # プロトコルが"udp"かつ送信先ポートが"5353"(Multicast DNS)かつ送信先アドレスが"224.0.0.251"ならば、通信を許可
 -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
     # プロトコルが"udp"かつ送信先ポートが"631"(Internet Printing Protocol)ならば、通信を許可
 -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
     # 接続状態が"ESTABLISHED"または"RELATED"ならば、通信を許可
     # これがないと通信ができない!
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
     # 接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"22"ならば、通信を許可
     # SSHサーバへの接続要求パケット
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
     # 接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"80"ならば、通信を許可
     # HTTPサーバへの接続要求パケット
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
     # 接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"21"ならば、通信を許可
     # FTPサーバへの接続要求パケット
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
     # 接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"25"ならば、通信を許可
     # SMTPサーバへの接続要求パケット
 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
     # ここまでのチェックでひっかからなかったパケットは、ICMPパケット"host-prohibited"を返して接続拒否
 
 ### COMMIT
 COMMIT
     # 以上を登録
----

** パケットフィルタリングの例2 [#i3547006]
(参考)僕が考えた最強のサーバ設定 - とあるプログラマの日記 @s025236 http://d.hatena.ne.jp/s025236/20120307/p1
>どうせ不要なサービスとか動かさないしぃとかいわないで一応default dropで設定します。
/etc/sysconfig/iptablesと/etc/sysconfig/ip6tablesを書き換えます。
IP指定がなければ同じ内容で良いみたい。

----

 ######################################################################
 # makoto@2ch.to
 *filter
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
 :OUTPUT DROP [0:0]
 ######################################################################
 # ループバック/ICMP/確立済みの接続
 -A INPUT   -i lo   -j ACCEPT
 -A OUTPUT  -o lo   -j ACCEPT
 -A INPUT   -p icmp -j ACCEPT
 -A OUTPUT  -p icmp -j ACCEPT
 -A INPUT   -p ipv6 -j ACCEPT
 -A OUTPUT  -p ipv6 -j ACCEPT
 -A INPUT   -p ipv6-icmp -j ACCEPT
 -A OUTPUT  -p ipv6-icmp -j ACCEPT
 -A INPUT   -m state --state RELATED,ESTABLISHED -j ACCEPT
 -A OUTPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT
 ######################################################################
 # OUTPUT
 -A OUTPUT -m state --state NEW -p tcp --dport ssh           -j ACCEPT
 -A OUTPUT -m state --state NEW -p tcp --dport smtp          -j ACCEPT
 -A OUTPUT -m state --state NEW -p tcp --dport domain        -j ACCEPT
 -A OUTPUT -m state --state NEW -p udp --dport domain        -j ACCEPT
 -A OUTPUT -m state --state NEW -p tcp --dport http          -j ACCEPT
 -A OUTPUT -m state --state NEW -p udp --dport ntp           -j ACCEPT
 -A OUTPUT -m state --state NEW -p tcp --dport https         -j ACCEPT
 -A OUTPUT -m state --state NEW -p tcp --dport mysql         -j ACCEPT
 #↓memcached
 #-A OUTPUT -m state --state NEW -p tcp --dport 11211         -j ACCEPT
 ######################################################################
 # 公開ポート 必要なこだけコメントを外すこと
 #-A INPUT -m state --state NEW -p tcp --dport smtp          -j ACCEPT
 #-A INPUT -m state --state NEW -p tcp --dport domain        -j ACCEPT
 #-A INPUT -m state --state NEW -p udp --dport domain        -j ACCEPT
  -A INPUT -m state --state NEW -p tcp --dport http          -j ACCEPT
 #-A INPUT -m state --state NEW -p tcp --dport https         -j ACCEPT
 #↓可能ならSAFTYを利用する
 #-A INPUT -m state --state NEW -p tcp --dport ssh    -j ACCEPT
 ######################################################################
 # 信頼できるIP
 -N SAFETY
 -A SAFETY -m state --state NEW -p tcp --dport ssh           -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport smtp          -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport http          -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport https         -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport mysql         -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport 11211         -j ACCEPT
 -A SAFETY -m state --state NEW -p tcp --dport postgres      -j ACCEPT
 -A INPUT -s 自分ちの固定IP -j SAFETY
 COMMIT

----

* ループバックインターフェース [#j8403035]
lo → loopback

- iptables設定用スクリプト ありとあらゆるメモ
http://d.hatena.ne.jp/kurim0n/comment/20110905/1315215064
># 自分自身に対するすべてのアクセスを許可(lo = ループバックインターフェース)
iptables --append INPUT  --in- lo --jump ACCEPT

- ループバックインターフェイス ‐ 通信用語の基礎知識
http://www.wdic.org/w/WDIC/%E3%83%AB%E3%83%BC%E3%83%97%E3%83%90%E3%83%83%E3%82%AF%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9
>自ホストとのみ接続したネットワークインターフェイスの一つ。
一般にIPアドレスとして127.0.0.1(IPv4)や::1(IPv6)が割り当てられる。
自ホストで動くプロセスとの通信やソフトウェアのテストのために使われる。

- ループバック ‐ 通信用語の基礎知識
http://www.wdic.org/w/WDIC/%E3%83%AB%E3%83%BC%E3%83%97%E3%83%90%E3%83%83%E3%82%AF
>内部送信/受信機能。
自ノード宛にテスト用パケットを送信することで、データが自分の受信側にループバックされ、これによりLANコントローラーが正常に機能しているかがテストできる。
''特徴''
実際にネットワークを通すかどうかで、次の二つに区別される。
- ローカルループバック(ネットワークを通さない)
- リモートループバック(ネットワークを経由する)
前者は自己診断機能として、後者は接続試験機能として用いられる。NICの動作チェックとして一般的な方法である。

- ループバックアドレスとは【loopback address】(127.0.0.1) - 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/E383ABE383BCE38397E38390E38383E382AFE382A2E38389E383ACE382B9.html
>ループバックアドレス【loopback address】(127.0.0.1)
ネットワークカードなどのループバックインターフェイスに割り当てられた自分自身を示すIPアドレスのこと。
ネットワーク上において自分自身を表す仮想的なアドレスであり、IPv4においては「127.0.0.1」、IPv6においては「::1」(0:0:0:0:0:0:0:1)が使われる。また、ホスト名としては慣用的に「localhost」が用いられる。
IPv6ではループバックアドレスは「::1」しか用いることができないと定義されているが、IPv4の「127.0.0.1」は慣習的に決められたもので、正式なものではない。このため、OSによってはこれ以外のIPアドレスをループバックアドレスとして使用できる場合もある(が、通常は別のアドレスは使わない)。

* パケットの種類 [#bbcca5ed]
パケットの遷移状態には、「NEW」「ESTABLISHED」「RELATED」「INVALID」の4種類があります。

- ステートフル・パケットインスペクション(1/3) - @IT
http://www.atmarkit.co.jp/flinux/rensai/iptables202/iptables202a.html
> 3ウェイハンドシェイクでTCPセッションを確立した後、そのクライアントから送られてくるパケットは、引き続き受信を許可する必要があります。受信したパケットが既存の接続に関連するパケットなのか、新しい接続の最初のパケットなのか、パケットの時間的な前後関係を追跡できるよう、iptablesにはコネクション追跡機能が備わっています。
> iptablesのコネクション追跡機能で見ることができるパケットの種類は次のとおりです。
- 新規(NEW)
- 接続済み(ESTABLISHED)
- 関連あり(RELATED)
- 無効(INVALID)

- iptablesメモ。firewallとして | ブーログ
http://ambiesoft.ddo.jp/blog/archives/157
>RELATEDは多分FTPのデータ経路などをACTIVEで開いたときに入ってきたパケットを許可するものだと思う。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS