これは、Linuxシステムでのソフトウェアファイアウォールの理解とデバッグについての提案標準的な質問 です。
EEAAの回答 と@Shogのコメントに対応して、iptablesに関する一般的な比較的単純な質問を閉じるには、適切な正規のQ&Aが必要です。
Linuxソフトウェアファイアウォール、 netfilter パケットフィルタリングフレームワークの問題をデバッグするための構造化された方法は何ですか?ユーザーランドインターフェイスiptables?
よくある落とし穴、繰り返し発生する質問、そして時折ファイアウォール管理者が見過ごすか、そうでなければ知ることから利益を得るかもしれないことを確認するための単純なまたは少しあいまいなものは何ですか?
[〜#〜] ufw [〜#〜] などのツールを使用する場合でも、 FirewallD (aka firewall-cmd
)、 Shorewall または同様のツールでは、これらのツールが提供する抽象化レイヤーを使用せずに、内部を調べることでメリットが得られる可能性があります。
この質問は、ファイアウォールを構築するためのハウツーを意図したものではありません。そのための 製品ドキュメント を確認し、たとえば、レシピを iptables Trips&Tricks に投稿するか、タグ付きの検索- iptablesfwfirewalldfirewall-cmd 既存の質問 頻繁に よく評価されている 高得点 Q&A。
ファイアウォール構成を表示および変更するには、制限されたポート番号範囲でサービスを開く場合と同様に、管理者特権(root
)が必要です。つまり、root
としてログインするか、Sudo
を使用してrootとしてコマンドを実行する必要があります。そのようなコマンドをオプションの[Sudo]
でマークしようとします。
目次:
-I
と-A
の違いiptables -L -v -n
の出力の解釈-I
と-A
の違い覚えておくべきことは、ファイアウォールルールはリストされている順序でチェックされるということです。パケットまたは接続を許可または拒否するルールがトリガーされると、カーネルはチェーンの処理を停止します。
最も一般的な間違いは、ファイアウォール管理の初心者にとって、次のような新しいポートを開くための正しい手順に従うことです。
[Sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
そして、それが有効にならないことを発見します。
その理由は、-A
オプションが新しいルール既存のすべてのルールの後にを追加するためです。既存のファイアウォールの最終ルールは、明示的に許可されていないすべてのトラフィックをブロックするルールであることが多く、に
...
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-Host-prohibited
8 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
またはiptables-saveの同等のもの:
...
iptables -A INPUT -j REJECT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
また、新しいルールの開始TCPポート8080に到達することはありません(カウンタが頑固に0パケットと0バイトに残っていることからも明らかです)。
-I
を使用してルールを挿入すると、新しいルールがチェーンの最初になり、機能します。
ファイアウォール管理者に対する私の推奨は、ユーザーフレンドリーなツールからファイアウォールの問題を診断しようとするのではなく、Linuxカーネルが実行している実際の構成を調べることです。多くの場合、根本的な問題を理解すると、それらのツールでサポートされている問題を簡単に解決できます。
コマンド[Sudo] iptables -L -v -n
はあなたの友達です(ただし、iptables-save
を好む人もいますが)。多くの場合、構成について説明するときに、--line-numbers
オプションを使用して行に番号を付けると便利です。ルール#Xを参照すると、それらの議論が多少容易になります。
注: NATルールはiptables-save
の出力に含まれますが、-t nat
オプション、つまり[Sudo] iptables -L -v -n -t nat --line-numbers
を追加して個別にリストする必要があります。
コマンドを複数回実行し、増加するカウンターをチェックすることは、新しいルールが実際にトリガーされるかどうかを確認するのに役立つツールです。
[root@Host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 784K 65M fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 2789K 866M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 15 1384 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-Host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-Host-prohibited
Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num pkts bytes target prot opt in out source destination
Chain fail2ban-SSH (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 117.239.37.150 0.0.0.0/0 reject-with icmp-port-unreachable
2 4 412 REJECT all -- * * 117.253.208.237 0.0.0.0/0 reject-with icmp-port-unreachable
または、iptables-save
の出力は、上記のファイアウォール構成を再生成できるスクリプトを提供します。
[root@Host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-Host-prohibited
-A FORWARD -j REJECT --reject-with icmp-Host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT
何を理解しやすいかは好みの問題です。
iptables -L -v -n
の出力を解釈するPolicyは、一致する明示的なルールがない場合にチェーンが使用するデフォルトのアクションを設定します。すべてのトラフィックを受け入れるように設定されているINPUT
チェーン内。
INPUTチェーンの最初のルールはすぐに興味深いもので、TCPポート22(tcp dpt:22
)宛てのすべてのトラフィック(送信元0.0.0.0/0および宛先0.0.0.0/0)を送信しますカスタムターゲットへのSSHのデフォルトポート(fail2ban-SSH
)。名前が示すように、このルールはfail2banによって維持されます(特に、悪用の可能性がないかシステムログファイルをスキャンし、不正ユーザーのIPアドレスをブロックするセキュリティ製品)。
そのルールは、iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
と同様のiptablesコマンドラインによって作成されたか、-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
としてiptables-saveの出力にあります。多くの場合、これらの表記のいずれかがドキュメントに記載されています。
カウンターは、このルールが784'000パケットと65メガバイトのデータに一致したことを示しています。
この最初のルールに一致するトラフィックは、非標準チェーンとしてOUTPUTチェーンの下にリストされているfail2ban-SSH
チェーンによって処理されます。
そのチェーンは、ブロックされている(reject-with icm-port-unreachable
で)不正ユーザーごとに1つ(ソースIPアドレス117.253.221.166または58.218.211.166)の2つのルールで構成されています。
-A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable
これらのブロックされたホストからのものではないSSHパケットはまだ許可も禁止もされておらず、カスタムチェーンが完了したため、INPUTチェーンの2番目のルールに対してチェックされます。
ポート22宛てではないすべてのパケットは、INPUTチェーンの最初のルールを通過し、INPUTルール#2でも評価されます。
INPUTルール番号2により、これは接続を追跡するstatefull firewallになることを意図しています。これにはいくつかの利点があります。新しい接続のパケットだけを完全なルールセットに対してチェックする必要がありますが、いったん許可されると、確立された接続または関連する接続に属する追加のパケットは、それ以上チェックされずに受け入れられます。
入力ルール#2はすべての開いている関連する接続に一致し、そのルールに一致するパケットはさらに評価する必要はありません。
注:ステートフルファイアウォールの構成におけるルールの変更は、確立された接続ではなく、新しい接続にのみ影響します。
対照的に、単純なパケットフィルターは、接続状態を追跡することなく、すべてのパケットを完全なルールセットに対してテストします。そのようなファイアウォールではstateキーワードは使用されません。
INPUTルール#3は非常に退屈で、ループバック(lo
または127.0.0.1)インターフェースに接続するすべてのトラフィックが許可されます。
INPUTルール4、5、6は、新しい接続へのアクセスを許可することにより、TCPポート22、80、および443(それぞれSSH、HTTP、HTTPSのデフォルトポート))を開くために使用されます(既存の接続はすでにINPUTルール2)で許可されています。
ステートレスファイアウォールでは、これらのルールは状態属性なしで表示されます。
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
または
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
最後のINPUTルール#7は、INPUTルール1〜7でアクセスを許可されなかったすべてのトラフィックをブロックするルールです。かなり一般的な慣例:許可されていないものはすべて拒否されます。理論的には、デフォルトのPOLICYをREJECTに設定することにより、このルールを省略することができたはずです。
常にチェーン全体を調査します。
4.1。ソフトウェアファイアウォールの設定は、ネットワークの他の場所で維持されているセキュリティ設定に影響しません。つまり、iptables
でネットワークサービスを開いても、ルーターやその他の未変更のアクセス制御リストネットワークのファイアウォールはまだトラフィックをブロックする可能性があります...
4.2。待機しているサービスがない場合、ファイアウォールの設定に関係なく、接続して 接続拒否エラー を取得することはできません。したがって:
[Sudo] netstat -plnut
で予期されるポート番号を使用していることを確認するか、ss -tnlp
を使用します。[Sudo] nc -l -p 123
またはopenssl s_server -accept 1234 [options]
(オプションについてはman s_server
を確認してください)。telnet <IP of Server> 123
またはecho "Hello" | nc <IP of Server> 123
、またはTLS/SSLで保護されたサービスopenssl s_client -connect <IP of Server>:1234
をテストするときに接続できることを確認してください。4.3。サービスで使用されるプロトコルを理解します。十分に理解していないサービスを適切に有効/無効にすることはできません。例えば:
/etc/services
のサービス、ポート、およびプロトコルの説明は、ポートを使用する実際のサービスと必ずしも一致しません。4.4。ネットワーク接続を制限する可能性があるのは、カーネルパケットフィルターだけではありません。
getenforce
は、SELinuxが実行されているかどうかを確認します。ldd /path/to/service |grep libwrap
および/hosts.[allow|deny]
制御ファイルを確認してください。INPUT
またはFORWARD
チェーンチェーンの概念はより完全に説明されています here しかし、それの短いものは:
INPUT
チェーンは、iptablesコマンドを発行するホスト上で、ローカルで実行されているサービスのネットワークポートを開いたり閉じたりする場所です。
FORWARD
チェーンは、カーネルによって他のシステム、実際のシステムだけでなく、Dockerコンテナーおよび仮想ゲストサーバーに転送されるトラフィックをフィルターするルールを適用する場所です。ブリッジ、ルーター、ハイパーバイザーとして、および/またはネットワークアドレス変換とポート転送を行います。
よくある誤解は、DockerコンテナーまたはKVMゲストがローカルで実行されるため、適用されるフィルター規則はINPUTチェーンにあるはずですが、通常はそうではありません。
パケットフィルターはLinuxカーネル内で実行されるため、動的モジュール、実際には複数のモジュールとしてコンパイルすることもできます。ほとんどのディストリビューションにはnetfilterがモジュールとして含まれており、必要なnetfilterモジュールは必要に応じてカーネルに読み込まれますが、一部のモジュールではファイアウォール管理者が手動で読み込まれるようにする必要があります。これは主に、insmod
でロードできるnf_conntrack_ftp
などの接続追跡モジュールに関係します。
実行中のカーネルに現在ロードされているモジュールは、lsmod
で表示できます。
リブート後もモジュールが永続的にロードされるようにする方法は、Linuxディストリビューションによって異なります。
DNS: DNSはデフォルトでポート53 UDPを使用しますが、単一のUDPデータグラムに収まらないメッセージは、代わりにTCPを使用して送信されます(通常はゾーン転送など)ポートが必要です53 TCPは、ネームサーバーの実行時にも開かれます。
Email:多くのコンシューマーISPはSMTPトラフィック(または少なくともデフォルトのポートTCP 25)をブロックするため、電子メールを直接送受信することができず、顧客はISPを使用する必要がありますすべての送信メールおよび場合によっては受信メールのSMTPリレー。 §1.1に関連します。
FTP: FTPはtwo接続が使用されるという点で奇妙なプロトコルです。 1つ目は制御接続です。デフォルトでは、FTPサーバーはTCPポート21でリッスンします。制御接続は、認証とコマンドの発行に使用されます。実際のファイル転送や、ディレクトリ一覧の出力などは2番目のTCP接続、DATA接続を経由します。アクティブなFTPでは、DATA接続はFTPサーバーからTCPポート20から開始され、FTPクライアントに接続します。アクティブFTPは、ファイアウォールやNATゲートウェイの背後にいるユーザーとうまく連携しないため、ほとんど使用されていません。ほとんどのFTPサーバーは、代わりにパッシブFTPをサポートしています。パッシブFTPを使用すると、FTPサーバーは2番目のポートでDATA接続のリスナーを開き、そこにFTPクライアントが接続できます。ファイアウォールの問題は、DATAポートが1024〜65536の任意の利用可能な非特権ポートである可能性があることです。
FTPサーバーが割り当てる可能性のあるパッシブポートの数を制限し、それらのポートを明示的に開くことによって通常解決されるステートレスファイアウォール。つまり.
iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT
ステートフルファイアウォールでは、DATAポートを明示的に開く必要はありません。netfilterヘルパーモジュールは、割り当てられた動的ポートを認識し、DATA接続をRELATED
としてマークすることにより、正しいクライアントに対してそのポートを動的に開きます。それは一般的なルールに一致します:
iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT
これには、適切なカーネルモジュールが読み込まれている必要があります。FTPの場合は、たとえばinsmod nf_conntrack_ftp
を実行して手動で再起動する必要があります。
注:制御接続が暗号化され、nf_conntrack_ftpがPASV応答を読み取ることができなくなるため、FTPがSSLで使用されている場合、FTP接続追跡モジュールは失敗します。
[〜#〜] nfs [〜#〜]および同様のRPCサービス: RPCサービスの問題は、設計上、特定の固定ポートを使用しないことです。利用可能な任意のポートをランダムに選択でき、RPC Portmapデーモンに登録されます。接続しようとするクライアントは、Portmapデーモンにクエリを送信し、正しいポートに直接接続します。これにより、予約済みポートが不足する問題が解決しました...
ファイアウォールの観点からは、TCP/UDPポート111と、RPCサービスが現在使用している実際のポートを開く必要があります。ファイアウォールでこのようなランダムなポートを開く問題は、通常、NFSサーバーなどのRPCサービスを制限済みの固定ポートを使用するように制限することで解決されます。
ファイアウォールは基本的にポリシーベースのネットワークフィルターです。 LinuxファイアウォールはNetfilterを中心に構築されています。カーネルのネットワークパケット処理フレームワークは、特定のタスクを実行するいくつかのカーネルモジュールで構成されています。
ユーザーは、コマンドラインからiptablesを使用して、ファイアウォールのニーズに合わせてNetfilterフレームワークを構成します。 iptablesを使用して、Linuxボックスに到着したとき、通過したとき、またはLinuxボックスから出たときにIPパケットをどうするかをカーネルに指示するルールを定義します。各Netfilterメインプロセスは、iptables lingoのTABLE(FILTER、NAT、MANGLE)で表されます。これらは、ネットワークパケットフローマップ上に特定のフックポイントがいくつかあり、カーネルによって呼び出されて、その役割を果たします。特定の位置にあるTABLE呼び出しの特定のシーケンスは、一般に組み込みチェーンと呼ばれ、PREROUTING、INPUT、FORWARD、OUTPUT、およびPOSTROUTINGの名前を受け取ります。 TABLEを「プロセスのタイプ」に関連付け、CHAINを、それらのプロセスのインスタンスが呼び出されるネットワークパケットフローマップ上の「場所」に関連付けると、簡単に覚えられます。
IPパケットはネットワークインターフェイスで受信されるか、ローカルプロセスによって作成されるため、最終的に配信または破棄されるまで、Netfilterエンジンはネットワークパケットフローマップに含まれるルールを順次テストして適用します。 TABLE @ CHAINペアで識別される各ブロックで、ユーザーは、IPパケットの一致基準と対応する一連のアクションを含むこれらの連続ルールの1つ以上を追加できます。複数のTABLEで実行できるアクション(ACCEPT、DROPなど)と、TABLE固有のその他のアクション(SNAT、DNATなど)があります。
つまり、IPパケットがネットワークインターフェイスから到着すると、最初にPREROUTINGチェーンによって処理され、MANGLEテーブルのユーザー定義ルールがあればそれを呼び出します。現在のパケットに一致するルールがない場合、対応するMANGLE @ PREROUTINGのデフォルトのアクションコースまたは「ポリシー」が適用されます。この時点で、パケットがドロップされなかった場合、プロセスは続行され、NATテーブルのPREROUTINGチェーン(マップを参照)など)のルールが呼び出されます。ルールのレイアウトを容易にするために、ユーザーは独自のカスタムチェーンを作成し、必要に応じてマップのさまざまなポイントからそれらに「ジャンプ」することもできます。
組み込みチェーンはACCEPTまたはDROPパケットのユーザー定義ポリシーを持つことができますが、ユーザー定義チェーンは常にプロセスを続行するために呼び出し側にRETURNの変更不可能なデフォルトポリシーを持っています。
Iptablesのメインコマンドは、ネットワークパケットフローマップに必要な処理ルールを入力します。
一般的なiptablesルールは次のように書くことができます:
_# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>
_
それは次のように読むことができます:
Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed
_<table>
-t filter (the filter table is assumed when omitted)
-t nat
-t mangle
<Add/Insert/Delete>
-A (append rule at the end of the chain list)
-I (insert rule at the begining of the chain list)
-D (Delete rule)
<CHAIN>
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
USER_DEFINED_CHAIN
<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
-i [!] <if_name> or --in-interface [!] <if_name>
(OUTPUT and POSTROUTING chains cannot match on input interfaces)
-o [!] <if_name> or --out-interface [!] <if_name>
(INPUT and PREROUTING chains cannot match on output interfaces)
-mac-source [!] <xx-xx-xx-xx-xx-xx>
(OUTPUT and POSTROUTING chains cannot match on input interfaces)
ISO Level-3 matching:
-s [!] <src_ip> or --src [!] <src_ip> or --source [!] <src_ip>
-d [!] <dst_ip> or --src [!] <dst_ip> or --destination [!] <dst_ip>
ISO Level-4 matching:
-p [!] <prot_name> or --protocol [!] <prot_name> (udp|tcp|icmp)
Also available when ICMP protocol is defined
--icmp-type [!] <icmp_type>
Also available when UDP protocol is defined
--source-port [!] <udp_src_port> or --sport [!] <udp_src_port>
--destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>
Also available when TCP protocol is defined
--source-port [!] <tcp_src_port> or --sport [!] <tcp_src_port>
--destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
--tcp-flags [!] <tcp_flags> (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
--syn
--tcp-option [!] <tcp_option#>
--state [!] <state>
-m <match> [options]
note: [!] = negation operator
<ACTION> (also called TARGET)
-j ACCEPT (process continues with rules of the next table in map)
-j DROP (discard current packet)
-j REJECT (discard current packet with ICMP notification)
option:
--reject-with <reject_type>
-j USER_DEFINED_CHAIN (start traversing USER_DEFINED_CHAIN rules)
-j RETURN (return from USER_DEFINED_CHAIN)
-j LOG (log to syslog, then process next rule in table)
options:
--log-level <level>
--log-prefix <prefix>
--log-tcp-sequence
--log-tcp-options
--log-ip-options
--log-uid
nat table specific
-j SNAT (rewrite the source IP address of the packet)
option:
--to <ip_address>
-j SAME (idem SNAT; used when more than one source address)
options:
--nodst
--to <a1-a2>
-j MASQUERADE (idem SNAT; used when the replace IP is dynamic)
-j DNAT (rewrite the destination IP address of the packet)
option:
--to <ip_address>
-j REDIRECT (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
option:
–-to-port <port#>
mangle table specific
-j ROUTE (explicitly route packets, valid at PREROUTING)
options:
--iface <iface_name>
--ifindex <iface_idx>
-j MARK (set Netfilter mark values)
options:
--set-mark <value>
--and-mark <value>
--or-mark <value>
-j TOS (set the IP header Type of Service field)
option:
--set-tos <value>
-j DSCP (set the IP header Differentiated Services Field)
options:
--set-dscp <value>
--set-dscp-class <class>
-j TTL (set the IP header Time To Live field)
options:
--ttl-set <value>
--ttl-dec <value>
--ttl-inc <value>
_
Iptables補助コマンドは、シナリオ設定のデフォルト条件、リストルール、フラッシュルールなどを完了します。
_#iptables -t <table> -L
(Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>
(Lists the <table> rules in <CHAIN>)
#iptables -t <table> -N <CHAIN>
(Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>
(Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)
#iptables -t <table> -X
(Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
(Deletes user-defined <CHAIN> created for holding <table> rules)
#iptables -t <table> -P <CHAIN> <ACTION> where <ACTION> = ACCEPT|DROP
(Sets the default policy of <table> rules at <CHAIN> to <ACTION>)
#iptables -t <table> -F
(Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
(Flushes (deletes) all <table> rules in <CHAIN>)
#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
(Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>
_
Iptablesは実行時にコマンドをNetfilterエンジンにロードし、Netfilterはロードされたルールと設定を中間的に強制しますが、永続的ではありません。以前にロードされたすべてのNetfilterルールと設定を再起動すると、失われます。このため、現在アクティブなルールセットをファイルに保存し、後で再ロードできるようにするiptablesユーティリティがあります。
_#iptables-save > fileName
(Save the currently active Netfilter ruleset to fileName)
#iptables-restore < fileName
(Restore Netfilter ruleset to the one saved in fileName)
_
Netfilterは非常に柔軟で強力なフレームワークですが、その代償があります。 Iptablesは複雑です。ユーザーの観点からすると、TABLE、CHAIN、TARGETなどの特定の用語は、それらが表す概念と実際にはあまり一致せず、最初はあまり意味がありません。トピックは長く、コマンドにはパラメータの無限のリストがあるようです。さらに悪いことに、実際にIptablesをマスターする1冊の本はありません。それらは主に「レシピブック」または「マンページブック」の2つのカテゴリに分類されます。この紹介では、Netfilter/Iptablesの概要と、事前に消化されたマンページに必要な量のスナップショットが得られると思います。 iptablesに慣れていない場合は、これらの段落を数回読んだ後、iptablesの例を読む準備が整います。少し練習すれば、すぐに自分のルールを書いていることに気付くでしょう。
ファイアウォールは主に、一連のルールに基づいてネットワークトラフィックを動的に許可または拒否するように設計されています。この時点で、Linux Netfilter/Iptablesフレームワークがファイアウォールの構築に最適である理由を理解するのは簡単です。ネットワークパケットフローマップを見ると、INPUTチェーンとFORWARDチェーンのFILTERテーブルの2つの特に興味深いスポットが見つかります。 IP送信元アドレス、IPプロトコル(UDP/TCP)、宛先ポート(80、21、443など)などに基づいて、特定のIPパケットを受け入れるか、拒否するか、または単にドロップするかを決定できます。これは、ファイアウォールが80%の時間に実行することです。つまり、許可されていないネットワーク要求からWebサーバーを保護します。残りの20%は(NAT、MANGLE)ネットワークパケットの操作です。
さまざまなニーズに対応する数百の異なるファイアウォールレイアウトがありますが、そのうちの3つは最も一般的なファイアウォールシナリオと見なすことができます。
私はこれを以下のために書きました: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html