iptablesと一般的なファイアウォールの落とし穴をデバッグしますか?


18

これは、Linuxシステムでのソフトウェアファイアウォールの理解とデバッグについて提案された 正規の質問です。

EEAAの回答と@Shogのコメントに応えて 、iptablesに関する一般的な比較的単純な質問を閉じるために適切な正規のQ&Aが必要であると述べました。

Linuxソフトウェアファイアウォール、一般にユーザーランドインターフェイスiptablesで参照されるnetfilterパケットフィルタリングフレームワークの問題をデバッグするための構造化された方法は何ですか?

よくある落とし穴、繰り返し発生する質問、簡単な、またはやや不明瞭なものは何ですか?ファイアウォール管理者が時折見逃したり、知っていることで利益を得たりすることを確認しますか?

UFWFirewallD(別名firewall-cmd)、Shorewallなどのツールを使用する場合でも、これらのツールが提供する抽象化レイヤーなしで内部を見るとメリットがあります。

この質問は、ファイアウォールを構築する方法を目的とするものではありません。そのための製品ドキュメントを確認し、たとえば、iptables Trips&Tricksにレシピを投稿するか、タグ付けされた 質問を検索して、既存のよく知られている高得点を探しますQ&A。


1
パフォーマンスを向上させ、セキュリティを向上させるために、チェーンの初期に配置できるNATおよびステートフルルールについてはどうでしょうか。
マット

1
@Matt:ファイアウォールルールを最適化すること自体が完全なQ&Aであり、このQ&Aでは、ここで
-HBruijn

1
IPtablesで必要なルールに到達しない場合は、同様のLOGルールを追加し、LOGメッセージを受信するまでチェーンをさらに進んでください。次に、その下のルールの1つが、パケットで誤って一致するルールになります。
マシューイフェ

1
ああ、net.netfilter.nf_conntrack_log_invalid255に設定すると、無効なパケットがかなりうまくキャプチャされます。これは、netfilterのステートフルな部分が悪い動作を引き起こしている場合に役立ちます。
マシューイフェ

回答:


14

一般に:

ファイアウォール構成の表示と変更にはroot、制限されたポート番号範囲でサービスを開くのと同様に、管理者権限()が必要です。つまり、root としてログインするか、rootとしてコマンドを実行するrootために使用sudoする必要があります。そのようなコマンドをオプションのでマークしようとします[sudo]

内容:

  1. 順序が重要かの違い-I-A
  2. 現在のファイアウォール構成を表示する
  3. の出力の解釈 iptables -L -v -n
  4. 環境を知る
  5. INPUTおよびFORWARDチェーン
  6. カーネルモジュール

1.受注案件や間の差-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新しいルールに挿入すると、チェーンの最初のルールになり、機能します。

2.現在のファイアウォール構成を表示する

ファイアウォール管理者への私の推奨事項は、使いやすいツールからファイアウォールの問題を診断するのではなく、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

理解しやすいものは好みの問題です。

3.の出力の解釈 iptables -L -v -n

ポリシーは、デフォルトのアクションにチェーンが使用する明示的なルールの一致を設定します。INPUTすべてのトラフィックを受け入れるように設定されているチェーン内。

INPUTチェーンの最初のルールはすぐに興味深いルールであり、TCPポート22(tcp dpt:22)宛てのすべてのトラフィック(ソース0.0.0.0/0および宛先0.0.0.0/0)をカスタムターゲット(fail2ban-SSH)にSSHのデフォルトポートに送信します。名前が示すように、このルールはfail2ban(とりわけ、悪用の可能性についてシステムログファイルをスキャンし、悪用者のIPアドレスをブロックするセキュリティ製品)によって維持されます。

この規則はiptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH、iptables-save asの出力に類似した、またはiptables-save asの出力にあるiptablesコマンドラインによって作成されたもの-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSHです。多くの場合、これらの表記のいずれかがドキュメントにあります。

カウンターは、このルールが784'000パケットと65メガバイトのデータに一致したことを示しています。

この最初のルールに一致するトラフィックはfail2ban-SSH、非標準チェーンとしてOUTPUTチェーンの下にリストされるチェーンによって処理されます。

そのチェーンは2つのルールで構成され、1つは(でreject-with icm-port-unreachable)ブロックされている各悪用者(ソースIPアドレス117.253.221.166または58.218.211.166)に1つです。

 -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は、これを接続を追跡するステートフルファイアウォールにすることを目的としています。これにはいくつかの利点があります。新しい接続のパケットのみを完全なルールセットに対してチェックする必要がありますが、一度確立された接続または関連する接続に属する追加のパケットが許可されると、それ以上チェックされません。

入力ルール#2は、開いているすべての関連する接続に一致し、そのルールに一致するパケットをさらに評価する必要はありません。

注:ステートフルファイアウォールの構成におけるルールの変更は、新しい接続にのみ影響し、確立された接続には影響しません。

対照的に、単純なパケットフィルタは、接続状態を追跡することなく、すべてのパケットをルールセット全体に対してテストします。このようなファイアウォールでは、状態キーワードは使用されません。

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でアクセスを許可されなかったすべてのトラフィックをブロックするルールです。かなり一般的な規則:許可されていないものはすべて拒否されます。理論的には、デフォルトのポリシーを拒否に設定することにより、このルールを省略できます。

常にチェーン全体を調査してください。

4.環境を知る

4.1 ソフトウェアファイアウォールの設定は、ネットワークの他の場所で維持されているセキュリティ設定には影響しません。つまりiptables、ルーター上の変更されていないアクセス制御リストでネットワークサービスを開くか、ネットワーク内の他のファイアウォールがトラフィックをブロックする可能性があります...

4.2 リッスンしているサービスがない場合、ファイアウォールの設定に関係なく、接続し接続拒否エラーを取得することはできません。したがって:

  • サービスが(正しいネットワークインターフェイス/ IPアドレスで)リッスンしており、期待するポート番号を使用していること、[sudo] netstat -plnutまたはを使用していることを確認しますss -tnlp
  • サービスがまだ実行されていない場合、たとえばnetcat:を使用して単純なリスナーをエミュレートする[sudo] nc -l -p 123openssl s_server -accept 1234 [options] 、TLS / SSLリスナーが必要な場合(man s_serverオプションを確認してください)。
  • サーバー自体から接続できることを確認します。つまりtelnet <IP of Server> 123echo "Hello" | nc <IP of Server> 123またはTLS / SSLで保護されたサービスをテストするときにopenssl s_client -connect <IP of Server>:1234、リモートホストから同じことを試みる前に確認します。

4.3 サービスで使用されるプロトコルを理解します。十分に理解していないサービスを適切に有効/無効にすることはできません。例えば:

  • TCPまたはUDPまたはその両方が使用されていますか(DNSと同様)?
  • サービスは固定のデフォルトポートを使用していますか(たとえば、WebサーバーのTCPポート80など)?
  • または、変化する可能性のある動的ポート番号が選択されています(つまり、Portmapに登録する従来のNFSなどのRPCサービス)。
  • 悪名高いFTPは、パッシブモードを使用するように構成されている場合、固定ポート番号と動的ポート番号の2つのポートを使用します...
  • のサービス、ポート、およびプロトコルの説明は/etc/services、ポートを使用する実際のサービスと必ずしも一致しません。

4.4 ネットワーク接続を制限する可能性があるのは、カーネルパケットフィルターだけではありません。

  • SELinuxもネットワークサービスを制限している可能性があります。getenforceSELinuxが実行されているかどうかを確認します。
  • 少しあいまいになりつつありますが、TCPラッパーは依然としてネットワークセキュリティを強化する強力なツールです。ldd /path/to/service |grep libwrap/hosts.[allow|deny]制御ファイルを確認してください。

5. INPUTまたはFORWARDチェーン

ここではチェーンの概念をより詳細に説明しますが、短いのは次のとおりです。

INPUTあなたがサービスを使用すると、iptablesコマンドを発行するホスト上で、ローカルで実行するためのネットワークポートを開いて、および/または近いところ鎖です。

FORWARDチェーンは、あなたのLinuxマシンがブリッジとして動作しているときに、他のシステム、実際のシステムだけでなく、ドッカーコンテナおよび仮想ゲストサーバーサーバにカーネルによって転送されますフィルタトラフィック、ルーターにルールを適用する場所で、ハイパーバイザーおよび/またはネットワークアドレスを行います変換およびポート転送。

一般的な誤解は、DockerコンテナまたはKVMゲストがローカルで実行されるため、適用されるフィルタールールはINPUTチェーン内にある必要があるということですが、通常はそうではありません。

6.カーネルモジュール

パケットフィルターはLinuxカーネル内で実行されるため、動的モジュール、実際には複数のモジュールとしてコンパイルすることもできます。ほとんどのディストリビューションにはモジュールとしてnetfilterが含まれており、必要なnetfilterモジュールが必要に応じてカーネルにロードされますが、ファイアウォール管理者は手動でロードされることを確認する必要があります。これは主に、などnf_conntrack_ftpでロードできる接続追跡モジュールに関係しますinsmod

実行中のカーネルに現在ロードされているモジュールは、で表示できますlsmod

再起動後もモジュールが永続的にロードされるようにする方法は、Linuxディストリビューションによって異なります。


1
インクリメントパケット/バイトカウンターを探しているとき。便利なツールは、異なるモードでウォッチを使用することです。したがって、次のようになりますwatch --difference -n 1 iptables -L FORWARD -v -n。ツールに定期的にコマンドを実行させ、変更を強調表示させると、非常に簡単になります。
ゾレダチェ

1
あなたのたるんだコメントを見ました。これは良い答えです。多くを追加できるかどうかはわかりません。TRACE機能の使用に関する言及を含めることができます。
ゾレダチェ

この恐ろしい(さまざまな引数を使用した)出力に対して、毎回iptables-save(できれば-c)出力を取得しiptables -Lます。
-0xC0000022L

7

異なるプロトコルの一般的な問題

DNS: DNSはデフォルトでポート53 UDPを使用しますが、単一のUDPデータグラムに収まらないメッセージは、代わりにTCPを使用して送信されます(通常はゾーン転送など)。ネームサーバーを実行するとポート53 TCPも開く必要があります。 。

電子メール:多くのコンシューマISPはSMTPトラフィック(または少なくともデフォルトのポートTCP 25)をブロックし、電子メールを直接送受信することを不可能にし、顧客はすべての送信電子メールと場合によっては受信電子メールにもISPのSMTPリレーを使用せざるを得ません。§1.1に関連します。

FTP: FTPは、2つの接続が使用されるという点で奇妙なプロトコルです。1つ目は制御接続です。デフォルトでは、FTPサーバーはTCPポート21でそれをリッスンします。制御接続は、認証とコマンドの発行に使用されます。実際のファイル転送およびディレクトリ一覧の出力などは、2番目のTCP接続、DATA接続を経由します。アクティブFTPでは、データ接続はTCPポート20からFTPサーバーから開始され、FTPクライアントに接続します。アクティブFTPは、ファイアウォールやNATゲートウェイの背後にいるユーザーとうまく機能しないため、ほとんど使用されなくなりました。ほとんどのFTPサーバーは、代わりにパッシブFTPをサポートしています。パッシブFTPを使用すると、FTPサーバーは、FTPクライアントが接続できる2番目のポートでDATA接続のリスナーを開きます。ファイアウォールの問題は、DATAポートが1024〜65536の任意の使用可能な非特権ポートになる可能性があることです。

通常、FTPサーバーが割り当てるパッシブポートの数を制限し、それらのポートを明示的に開くことで解決されるステートレスファイアウォール。すなわち

iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT

ステートフルファイアウォールでは、DATAポートを明示的に開く必要はありません。netfilterヘルパーモジュールは、割り当てられた動的ポートを認識し、RELATEDその後、一般的なルールに一致するようにDATA接続をマークすることにより、正しいクライアントに対してそのポートを動的に開きます:

  iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT

これには、たとえばを実行して手動でFTPの場合、正しいカーネルモジュールをロードする必要があります。これは、insmod nf_conntrack_ftp再起動後の永続的な依存関係をディストリビューションに依存させます。

注: FTPをSSLで使用すると、FTP接続追跡モジュールは失敗します。制御接続が暗号化され、nf_conntrack_ftpがPASV応答を読み取れなくなるためです。

NFSおよび同様のRPCサービス:RPCサービスの問題は、設計上、特定の固定ポートを使用しないことです。使用可能なポートをランダムに選択し、RPC Portmapデーモンに登録します。接続しようとするクライアントは、Portmapデーモンに照会してから、正しいポートに直接接続します。予約済みのポートが不足する問題を解決しました...

ファイアウォールの観点から、TCP / UDPポート111を開く必要があり、RPCサービスが現在使用している実際のポート。ファイアウォールでこのようなランダムなポートを開く問題は、通常、NFSサーバーなどのRPCサービスが事前定義された固定ポートを使用するように制限することで解決されます。


7

Iptables / Firewall「はじめに」

ファイアウォールは、基本的にポリシーベースのネットワークフィルターです。Linuxファイアウォールは、Netfilterを中心に構築されています。特定のタスクを実行するいくつかのカーネルモジュールで構成されるカーネルのネットワークパケット処理フレームワーク:

  1. FILTERモジュール(デフォルトで常にロードされる)を使用すると、主に特定の一致基準に基づいてIPパケットを受け入れたりドロップしたりできます。
  2. NATモジュールセットにより、ネットワークアドレス変換(SNAT、DNAT、MASQUERADE)を実行できます。
  3. MANGLEモジュールを使用すると、特定のIPパケットフィールド(TOS、TTL)を変更できます。

ユーザーは、コマンドラインからiptablesを使用して、ファイアウォールのニーズに合わせてNetfilterフレームワークを構成します。iptablesを使用して、Linuxボックスに到着、通過、または離れたときにIPパケットをどうするかをカーネルに指示するルールを定義します。各Netfilterのメインプロセスは、iptablesの用語で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のデフォルトのアクションコースまたは「ポリシー」が適用されます。この時点で、パケットがドロップされなかった場合、プロセスはPREROUTINGチェーンでNATテーブルのルールを呼び出し続けます(マップを参照)。ルールのレイアウトを容易にするために、ユーザーは独自のカスタムチェーンを作成し、マップのさまざまなポイントから希望するようにそれらに「ジャンプ」することもできます。

ここに画像の説明を入力してください

ビルトインチェーンにはACCEPTまたはDROPパケットのユーザー定義ポリシーを設定できますが、ユーザー定義チェーンには、プロセスを続行するために呼び出し側へのRETURNの変更不可能なデフォルトポリシーが常にあります。

iptablesコマンド

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はロードされたルールと設定を即座に適用しますが、永続的ではありません。Afeterは、以前にロードされたすべての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)

iptablesの概要

Netfilterは非常に柔軟で強力なフレームワークですが、それに代価を払う必要があります。Iptablesは複雑です。ユーザーの観点からは、TABLE、CHAIN、TARGETなどの特定の用語は、それらが表す概念と実際にはあまり一致せず、最初はあまり意味がありません。トピックは長く、コマンドにはパラメーターの無限のリストがあるようです。さらに悪いことに、Iptablesを本当にマスターした本は1つもありません。それらは主に「レシピブック」または「マンページブック」の2つのカテゴリに分類されます。この紹介では、Netfilter / Iptablesの展望のスナップショットに加えて、事前に消化されたマンページの必要量を提供すると思います。iptablesを初めて使用する場合は、これらの段落を数回読んだ後、iptablesの例を読む準備が整います。練習すれば、すぐに自分のルールを書くことができます。

ファイアウォール

ファイアウォールは、主に、一連のルールに基づいてネットワークトラフィックを動的に許可または拒否するように設計されています。この時点で、Linux Netfilter / Iptablesフレームワークがファイアウォールの構築に最適な理由を簡単に理解できます。ネットワークパケットフローマップを見ると、INPUTチェーンとFORWARDチェーンのFILTERテーブルに特に興味深いスポットが2つあります。特定のIPパケットを受け入れる、拒否する、または単にドロップする場合、IP送信元アドレス、IPプロトコル(UDP / TCP)、宛先ポート(80、21、443など)などで決定できます。これは、ファイアウォールがWebサーバーを無許可のネットワーク要求から保護するときに80%の時間を実行することです。他の20%の時間は(NAT、MANGLE)ネットワークパケットを操作しています。

ファイアウォールのシナリオ

さまざまなニーズに対応する数百の異なるファイアウォールレイアウトがありますが、そのうち3つは最も一般的なファイアウォールシナリオと見なすことができます。

  1. インターネットに接続された1つ以上のインターフェイスを備えたシンプルなWebサーバー。ポリシーには、制限されたインバウンドアクセス、無制限のアウトバウンドアクセス、およびスプーフィング防止ルールを許可する基本的なルールが含まれています。IP転送はオフです。
  2. このファイアウォールは、インターネットと保護された内部エリアに接続します。ポリシーには、制限されたインバウンドアクセス、無制限のアウトバウンドアクセス、およびスプーフィング防止ルールを許可する基本的なルールが含まれています。保護された領域はプライベートIPアドレスを使用するため、ソースNATが必要です。IP転送はオンです。
  3. このファイアウォールは、インターネット、内部保護および非武装地帯に接続します。ポリシーには、制限されたインバウンドアクセス、無制限のアウトバウンドアクセス、およびスプーフィング防止ルールを許可する基本的なルールが含まれています。保護エリアとDMZエリアはプライベートIPアドレスを使用するため、送信元と宛先のNATが必要です。IP転送はオンです。 ここに画像の説明を入力してください

これを書いたのは:http : //www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.