iptablesファイアウォール(1)-4つのテーブル/ 5つのチェーン、パケットマッチングプロセス、iptablesルールの記述

iptablesファイアウォール(1)-4つのテーブル/ 5つのチェーン、パケットマッチングプロセス、iptablesルールの記述

1.
Linuxファイアウォールの基本Linuxファイアウォールは、主にネットワーク層で機能し、TCP / IPデータパケットをフィルタリングおよび制限します。一般的なパケットフィルタリングファイアウォールは、カーネルコーディングに基づいており、非常に安定したパフォーマンスと高効率を備えています。

iptables:/ sbin / iptablesディレクトリにあるLinuxファイアウォールの管理に使用されるコマンドプログラムで、ユーザースペースのファイアウォール管理システムに属しています。

netfilter:Linuxカーネルのパケットフィルタリングファイアウォールの内部構造。通常はプログラムやファイルの形式ではなく、カーネル空間のファイアウォール管理システムに属します。

iptablesの役割:さまざまなルールを介してパケットフィルタリングメカニズムを実装するためのルールを提供し、特定の送信元から特定の宛先へのデータパケット、または特定のプロトコル特性を処理する方法をnetfilterに指示します。

2. iptablesのテーブルとチェーンの構造。
各ルールテーブルは、実際にはカーネルスペースのコンテナと同等です。ルールセットのさまざまな用途に応じて、4つのデフォルトテーブルに分割されます。各ルールテーブルには、さまざまなルールチェーンが含まれます。データパケットを処理するタイミングは5つのチェーンに分けられ、データパケットをフィルタリングするか処理するかを決定するためのさまざまなルールが各ルールチェーンに順番に格納されます。

ルールの役割:データパケットのフィルタリングまたは処理。

チェーンの役割:複数のファイアウォールルールに対応するため。

iptablesファイアウォール(1)-4つのテーブル/ 5つのチェーン、パケットマッチングプロセス、iptablesルールの記述

ルールテーブル
iptablesは、独立したカーネルモジュールによって実装される4つの異なるルールテーブルを管理します。

フィルタテーブル:データパケットをフィルタリングするために使用されます。特定のルールでは、データパケットの処理方法を決定する必要があります。

対応するカーネルモジュールはiptable_filterであり、そのテーブルにはinput、forward、outputの3つのチェーンが含まれています。

natテーブル:natフルネーム:ネットワークアドレス変換ネットワークアドレス変換は、主にデータパケットのIPアドレスとポート番号情報を変更するために使用されます。

対応するカーネルモジュールはiptable_natであり、そのテーブルには、事前ルーティング、事後ルーティング、および出力の3つのチェーンが含まれています。

マングルテーブル:主に、データパケットのサービスタイプとライフサイクルの変更、データパケットのタグの設定、トラフィックシェーピングとポリシールーティングの実装に使用されます。

対応するカーネルモジュールはiptable_mangleであり、そのテーブルには、事前ルーティング、事後ルーティング、入力、出力、転送の5つのチェーンが含まれています。

生のテーブル:主にデータパケットのステータスを追跡するかどうかを決定するために使用されます。

対応するカーネルモジュールはiptable_rawであり、そのテーブルには2つのチェーンが含まれています。

ルールチェーン
入力チェーン:ファイアウォールのローカルアドレスにアクセスするデータパケットを受信すると、このチェーンのルールが適用されます。

出力チェーン:ファイアウォールがローカルマシンからデータパケットを送信する場合、このチェーンのルールが適用されます。

フォワードチェーン:防火を通じて他のアドレスに転送する必要があるデータパケットを受信すると、このチェーンのルールが適用されます。

事前ルーティングチェーン:データパケットをルーティングする前に、このチェーンのルールが適用されます。

ルーティング後のチェーン:データパケットをルーティングした後、このチェーンのルールが適用されます。

入力チェーンと出力チェーンは、主にサーバーを保護するためのファイアウォールであるホストタイプのファイアウォールで使用されます。
フォワードチェーン、プレルーティングチェーン、およびポストルーティングチェーンは、主にネットワークタイプのファイアウォールで使用されます。会社のイントラネットとインターネット。
3.パケットフィルタリングの一致するプロセス
iptablesファイアウォール(1)-4つのテーブル/ 5つのチェーン、パケットマッチングプロセス、iptablesルールの記述
ルールテーブル間の順序
パケットがファイアウォールに到着すると、対応するチェーンにルールがある場合、rawテーブル→マングルテーブル→natテーブル→フィルターテーブルの順序に従います。

ルールチェーン間のシーケンス
はデータフローの方向に入ります。外部データパケットがファイアウォールに到着した場合、最初に事前ルーティングチェーンを通過する必要があります。データパケットをルーティングした後、このチェーンのルールが適用され、次にルートが適用されます。パケットの宛先アドレスがファイアウォールのローカルマシンであるかどうかを選択してデータを確認し、カーネルと組み合わせて入力チェーンに送信して処理します。確認後、サーバーに渡して応答します。

データフローの方向の転送:外部データパケットがファイアウォールに到着した場合、最初に事前ルーティングチェーンを介して処理されてからルーティングされる必要があります。データパケットの宛先アドレスが他のアドレスである場合は、転送に渡されます。処理用のカーネル。渡されるか直接破棄され、最後にポストルーティングチェーンに渡されて、処理のために変更する必要のあるパケット情報があるかどうかが確認されます。

送信データフローの方向:送信トラフィックは、実際にはファイアウォールのローカル外部アドレスからデータパケットを送信しています。最初に出力チェーンによって処理され、次にルートが選択され、次にルーティング後のチェーンを使用して、データパケット情報が変更されているかどうかが確認されます。処理用。


ルールチェーン内のファイアウォールルール間のシーケンスデータパケットが各ルールチェーンを通過すると、最初のルール、2番目のルールの順序で照合および処理されます。

チェーン内のフィルタリングの原則は
、一致から停止までの方法に従います。一致するルールが見つかった場合、チェーン内の他の後続のルールは実行されません。

チェーン全体を比較した後、データパケットに一致するルールが見つからない場合、ルールチェーンのデフォルトポリシーに従って処理されます。

4.ファイアウォールルール
iptablesの基本的な構文コマンド形式を記述します


iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

テーブル名、チェーン名:iptablesコマンドで操作するテーブルとチェーンを指定します。テーブル名を指定しない場合は、デフォルトでフィルターテーブルが使用されます。

管理オプション:挿入、追加、削除、表示など、iptablesルールの操作モードを示します。

一致条件:処理するデータパケットの特性を指定し、指定した条件を満たさないデータパケットは処理しません。

制御タイプ:許可、拒否、破棄などのデータパケットの処理方法を指します。

ファイアウォールが
受け入れる最も一般的に使用される制御タイプのiptables:データパケットを許可します。

drop:応答情報を提供せずにデータパケットをドロップします。

拒否:データパケットを拒否し、必要に応じてデータ送信者に応答メッセージを送信します。

log:ログ情報を/ var / log / messagesファイルに記録してから、データパケットを次のアドレスに渡します。

iptablesファイアウォールの最も一般的な基本操作
iptablesコマンドの一般的な管理オプション


-A:在指定链的末尾添加一条新的规则
-D:删除指定链中的某一条规则,可删除指定序号或具体内容
-I:在指定链中插入一条新规则,未指定序号时默认作为第一条规则
-R:修改、替换指定链中的某一条规则,可指定规则序号或具体内容
-L:列出指定链中所有的规则,未指定链名,则列出表中的所有链
-F:清空指定链中所有的规则,未指定链名,则清空表中的所有链
-P:设置指定链的默认策略
-n:使用数字形式显示输出结果
-v:查看规则列表时显示详细的信息
-h:查看命令帮助信息
--line-numbers:查看规则列表时,同时显示规则在链中的顺序好

新しいルールの
追加新しいファイアウォールルールを追加するときは、管理オプション-A:ルールの追加に使用-l:ルールの挿入に使用できます。

フィルタテーブルのINPUTチェーンの最後にルールを追加し、一致条件として-pプロトコル名を使用します。

# iptables -t filter -A INPUT -p tcp -j ACCEPT

管理オプション-Iを使用して、追加ルールのシーケンス番号を同時に作成できるようにします。シーケンス番号が指定されていない場合、デフォルトで最初のルールになります。

フィルタテーブルの1番目と2番目にある2つのルールを追加します。デフォルトのフィルタテーブルが使用されます。

# iptables -I INPUT -p udp -j ACCEPT
# iptables -I INPUT 2 -p icmp -j ACCEPT


ルールリストを

表示してファイアウォールルール表示する場合は、管理オプション-Lを--line-numbersオプションと組み合わせて使用​​して、チェーン内の各ルールのシーケンス番号を表示する必要があります。

フィルタテーブルのINPUTチェーン内のすべてのルールを表示し、ルール番号を表示します。

# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
4    ACCEPT     icmp --  anywhere             anywhere            
5    ACCEPT     all  --  anywhere             anywhere            
6    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
7    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
8    ACCEPT     tcp  --  anywhere             anywhere     

ファイアウォールルールが多い場合は、アドレスとポートの情報をデジタル形式で表示できるため、アドレス解決のプロセスが減り、コマンドの実行が高速化されます。

デフォルトテーブルのすべてのルールをデジタル形式で入力チェーンに表示します。これは、パラメーター-nLまたはsplit -n-Lと組み合わせて操作できます。


# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0   

ルールを削除してクリアします。
フィルターテーブルのINPUTチェーンの3番目のルールを削除します。管理オプション-Dを使用して、ファイアウォールルールを削除できます。

# iptables -D INPUT 3
# iptables -n -L INPUT

指定されたチェーンまたはテーブル内のすべてのファイアウォールルールをクリアするには、管理オプション-Fを使用できます。

# iptables -F INPUT
# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination  

チェーン名を省略し、指定されたテーブル内のすべてのチェーンのルールをクリアします。管理オプション-Fを使用できます。

# iptables -F
# iptables -t nat -F
# iptables -t mangle -F

デフォルトポリシー
設定デフォルトポリシーの制御タイプは、acceptとdropの2つのタイプに分けられます。

フィルタテーブルのFORWARDチェーンのデフォルトポリシーを次のように設定します。discard、およびOUTPUTチェーンのデフォルトポリシーを許可します。


# iptables -t filter -P FROWARD DROP
# iptables -P OUTPUT ACCEPT


5.ルールの一致条件

:一般一致:通常の一致と呼ばれ、独立して使用でき、他の条件や拡張モジュールに依存しません。

プロトコルの一致

ルールを作成するときに指定するには、-pプロトコル名形式を使用します。

データパケットで使用されるネットワークプロトコルを確認するために使用される、使用可能なプロトコルタイプファイルは、/ etc / procotolsにあります。


# iptables -I INPUT -p icmp -j DROP
# iptables -A FORWARD ! -p icmp -j ACCEPT


-s送信元アドレスまたは-d宛先アドレスを使用して、アドレスがiptablesルールと一致するタイミングを指定します。

データパケットの送信元アドレスまたは宛先アドレスを確認するために使用されます。(IPアドレス、ネットワークセグメントアドレス)

ホスト名とドメイン名アドレスを使用することはお勧めしません。
たとえば、送信元アドレスが192.168.123.123のデータの転送を拒否し、送信元アドレスが192.168.1.0/24ネットワークセグメントにあるデータの転送を許可する場合などです。

# iptables -A FORWARD -s 192.168.123.123 -j REJECT
# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

例:特定のWebサイトからの頻繁なスキャンとログインを検出する場合は、ファイアウォールルールを追加してブロックできます。

# iptables -I INPUT -s 192.168.123.0/24 -j DROP
# iptables -I FORWARD -s 192.168.123.0/24 -j DROP

ネットワークインターフェースのマッチング
は、iptablesルールを作成するときに-iインターフェース名と-oインターフェース名の形式で指定されます。

これは、データパケットが出入りするファイアウォールのインターフェイスを確認するために使用され、それぞれインバウンド/アウトバウンドネットワークカードに対応します。

例:外部ネットワークインターフェイスからファイアウォールのローカルマシンにアクセスするデータパケットを破棄する場合、送信元アドレスはプライベートアドレスです。

# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
# iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

暗黙的なマッチング:指定されたプロトコルマッチングが前提条件として使用され、対応する関数が必要に応じてiptablesによって自動的かつ暗黙的にカーネルにロードされます。

一般的な暗黙のマッチング:ポートマッチング、TCPマッチング、ICMPマッチング。

ポートマッチング
は、iptablesルールを作成するときに、-sport送信元ポートまたは--dport宛先ポートの形式で指定されます。

ターゲットプロトコルタイプは次のとおりです:TCP、UDP

パケットの送信元ポートまたは宛先ポートを確認するために使用されます。

単一のポート番号またはコロンで区切られたポート範囲:は許容されますが、不連続な複数のポートは許容されません。

次に例を示します。ネットワークセグメント192.168.123.0/24のhttpクエリパケットを転送できます。

# iptables -A FORWARD -s 192.168.123.0/24 -p udp --dport 80 -j ACCEPT
# iptables -A FORWARD -d 192.168.123.0/24 -p udp --dport 80 -j ACCEPT

例:ftpサービスを構築する場合、ポート20と21を開き、パッシブモードで使用されるポートの範囲は24 100〜25200です。


# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
# iptables -A INPUT -p tcp --dport 24100:25200 -j ACCEPT

ICMPマッチング
は、iptablesルールを作成するときに--icmp-typeICMPの形式で指定されます。

ターゲットプロトコル:ICMP、ICMPパケットのタイプをチェックするために使用されます。

ICMPタイプは文字列または数値の表示を使用します

エコー要求:8(ICMPプロトコル要求)

echo-r​​eply:0(ICMPプロトコルエコー)

destination-unreachable:3(ICMPプロトコルの宛先に到達できません)

例:他のホストからこのマシンへのpingを禁止し、このマシンが他のホストにpingできるようにします。

# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
# iptables -A INPUT -p icmp -j DROP

より多くの利用可能なICMPプロトコルタイプについては、iptables -p icmp-hを実行して表示します。

マッチングの表示
このマッチング方法では、サポートを提供し、対応するモジュールを-mモジュール名の形式で呼び出してから、マッチング条件を設定するために、追加のカーネルモジュールが必要です。

一般的なディスプレイマッチング:マルチポートマッチング、IP範囲マッチング、MACアドレスマッチング、ステータスマッチング。

マルチポートマッチング
用のiptablesルールを作成する場合は、-m multiport --dports portlistおよび-mmultiport --sports portlistの形式を使用します。

カンマで区切られたデータパケットの送信元ポート、宛先ポート、および複数のポートを確認するために使用されます。

例:マシンがポートを開くことを許可するには:80、443、110など、関連するサービスを提供します。

# iptables -A INPUT -p tcp -m multiport --dport 80,443,110 -j ACCEPT


iptablesルールを作成する場合IP範囲の一致は-m iprange --src-range IP range、-m iprange --dst-range IPrangeの形式で指定されます。

データパケットの送信元アドレスと宛先アドレスを確認するために使用されます。

IP範囲:開始アドレスと終了アドレスの形式。

例:送信元IPアドレスが192.168.8.100から192.168.8.123の間のTCPパケットを転送することは禁止されています。

# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.8.100-192.168.8.123 -j ACCEPT

MACアドレスが
iptablesルールと一致する場合は、-m mac --mac-sourceMACアドレスの形式を使用して指定します。

データパケットの送信元MACアドレスを確認するために使用されます。内部ネットワークにのみ適用されます。

例:MACアドレスに基づいてホストをブロックし、マシンのアプリケーションへのアクセスを禁止します。

# iptables -A INPUT -m mac --mac-source MAC 地址 xxx -j DROP

状態の一致
は、iptablesルールを作成するときに-m state --state connectionstateの形式で指定されます。

iptablesに基づくステータス追跡メカニズムは、データパケットの接続ステータスをチェックするために使用されます。

一般的な接続状態には、新規(接続に関連しない)、確立済み(要求への応答または確立された接続)、関連(接続に関連)が含まれます。

例:通常のTCP接続とは関係のないsyn以外の要求パケットを転送することは禁止されています。

# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

ローカルWEBサービスのみを開き、ローカルマシンに送信されたTCPデータパケットを通過させ、他の着信データパケットを破棄します。

# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
# iptables -P INPUT DROP

おすすめ

転載: blog.51cto.com/15067236/2606385