記事ディレクトリ
序文
- インターネットでは、企業はWebサイト、電子メールシステム、FTPサーバー、データベースシステムなど、さまざまなアプリケーションシステムを通じてさまざまなサービスをユーザーに提供します。
- では、これらのサーバーを保護し、企業による不要なアクセスや悪意のある侵入をフィルタリングするにはどうすればよいでしょうか。
- 次に、CentOS 6システムのファイアウォール(netfilterとiptables)、およびCentOS7システムのファイアウォールについて学習します。
1.Linuxファイアウォールの基本
1。概要
- Linuxのファイアウォールシステムは主にネットワーク層で機能し、TCP / IPパケットをフィルタリングおよび制限します。これは、一般的なパケットフィルタリングファイアウォール(またはネットワーク層ファイアウォールと呼ばれます)です。
- パケット内のIPアドレス、ポート、その他の情報の処理に反映されます
- Linuxシステムのファイアウォールは、カーネルコーディングに基づいて実装されており、非常に安定したパフォーマンスと非常に高い効率を備えているため、広く使用されています。
2.netfilter与iptables
- 多くのセキュリティ資料では、netfilterとiptablesの両方がLinuxファイアウォールを参照するために使用されており、読者を混乱させることがよくあります。
- 2つの主な違いは次のとおりです。
2.1 netfilter
- これはカーネルの一部であり、いくつかのデータパケットフィルタリングテーブルで構成されており、プログラムファイルまたはファイルの形式では存在しません。
- これらのテーブルには、パケットフィルタリング処理を制御するためにカーネルが使用する一連のルールが含まれています
- 「カーネルスペース」(カーネルスペース、カーネルスペースとも呼ばれる)に属するファイアウォール機能システム
2.2 iptables
- これは、Linuxファイアウォールを管理するために使用されるコマンドプログラムであり、通常は/ sbin / iptablesディレクトリにあるパケットフィルターテーブルのルールを簡単に挿入、変更、および削除できます。
- 「ユーザースペース」(ユーザースペース、ユーザースペースとも呼ばれます)に属するファイアウォール管理システム
2.3まとめ
- 2つの関係を正しく理解すると、Linuxファイアウォールがどのように機能するかを理解するのに役立ちます
- どちらもLinuxファイアウォールを表すことができます
3.iptablesのテーブルとチェーンの構造
3.1はじめに
- iptablesの役割は、パケットフィルタリングメカニズムを実現するためのルール(またはポリシー)を提供することです。さまざまなルールを通じて、特定のソースからのデータパケット、特定の目的、または特定のプロトコル特性を処理する方法をnetfilterに指示します。
- Netfilter / iptablesは、後でiptablesと呼ばれます。
- ファイアウォールルールをより便利に整理および管理するために、iptablesは「テーブル」と「チェーン」の階層構造を採用し、テーブル内のすべてのルールが構成された後、サービスを再起動せずにすぐに有効になります。
3.2ルールテーブル(4つのテーブル)
- ルールセットの機能を区別するために、iptablesは4つの異なるルールテーブルを管理し、その機能は独立したカーネルモジュールによって実装されます。
- これらの4つのテーブルの名前とそれらに含まれるチェーンを次の図に示します。
- 生表
- パケットのステータスを追跡するかどうかを決定します
- OUTPUTとPREROUTINGの2つのルールチェーンが含まれています
- マングルテーブル
- データパケットの内容を変更するか、トラフィックシェーピングやポリシールーティングなどの高度なアプリケーション用にデータパケットにマークを設定します
- INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTINGの5つのルールチェーンが含まれています
- natテーブル
- ネットワークアドレスの変換を担当し、データパケットの送信元、宛先IPアドレス、またはポートを変更するために使用されます
- 3つのルールチェーンが含まれています:OUTPUT、PREROUTING、POSTROUTING
- フィルターテーブル
- データパケットのフィルタリングと、特定のルール要件に従ってデータパケットの処理方法を決定する責任があります(フィルタリング)
- INPUT、FORWARD、OUTPUTの3つのルールチェーンが含まれています
- iptablesの4つのルールテーブルの中で、mangleテーブルとrawテーブルは比較的使用されていません
3.3ルールチェーン(5つのチェーン)
- さまざまなデータパケットを処理する場合、iptablesは、ファイアウォールルールのさまざまな介入タイミングに従って、デフォルトで5つの異なるルールチェーンに分割されます。
- INPUTチェーン:インバウンドデータパケットを処理し、毎月のIPアドレスをこのマシンのデータパケットと照合します
- OUTPUTチェーン:アウトバウンドデータパケットを処理します。通常、このチェーンでは構成しません
- フォワードチェーン:データパケットの処理と転送、マシンを流れるデータパケットの照合
- PREROUTINGチェーン:ルーティングの前にデータパケットを処理し、宛先アドレスの変更に使用し、DNATに使用します。内部ネットワークサーバーのIPとポートをルーターの外部IPとポートにマッピングするのと同じです。
- POSTROUTINGチェーン:ルーティング選択後にデータパケットを処理し、送信元アドレスの変更に使用し、SNATに使用します。ルーターNAT変換機能を介した内部ネットワークに相当し、パブリックネットワークIPアドレスを介して内部ネットワークホストを実現します。
4.パケットフィルタリングのマッチングプロセス
- iptablesは4つのデフォルトテーブルと5つのチェーンを管理し、さまざまなファイアウォールルールがチェーンに順番に格納されます
4.1ルールテーブル間の一致順序
- パケットがファイアウォールに到着したときの優先順位は(もしあれば):
raw >> mangle >> nat >> filter
4.2ルールチェーン間のシーケンス
- ルールチェーンの分割原理によれば、異なるチェーンの処理タイミングは比較的固定されているため、ルールチェーン間の適用順序はデータパケットの流れ方向に依存します。
- インバウンドデータフローの方向:
外部からのデータパケットがファイアウォールに到達した後、最初にPEROUTINGチェーンによって処理され(データパケットアドレスが変更されているかどうかなど)、次にルーティングが選択されます(データパケットの送信先を決定するため)。データパケットの宛先アドレスの場合これはファイアウォールネイティブであり、カーネルはそれを処理のためにINPUTチェーンに渡し(通過を許可するかどうかを決定し)、対応するためにシステムの上位層アプリケーションに渡します。 - データフローの方向の転送:
外部からのデータパケットがファイアウォールに到達した後、最初にPREOUTINGチェーンによって処理され、次にルートが選択されます。データパケットの宛先アドレスが他の外部アドレスである場合、カーネルはそれをFORWARDチェーンに渡して処理します(転送を許可します。傍受または破棄)、最後に処理のためにPOTROUTINGチェーンに渡します(データパケットのアドレスを変更するかどうかなど)。 - アウトバウンドデータフロー:
ファイアウォールはデータパケットを外部アドレスに送信します。外部アドレスは最初にOUTPUTチェーンによって処理され、次にルート選択され、次に処理のためにPOTROUTINGチェーンに渡されます(データパケットのアドレスを変更するかどうかなど)。
4.3ルールチェーン内のファイアウォールルールのシーケンス
- データパケットが各ルールチェーンを通過するときに、上から下に順番にチェックし、一致するルールが見つかったら停止します(関連するログを記録することを意味するLOGポリシーを除く)
- チェーン内に一致するルールが見つからない場合、チェーンのデフォルトポリシーに従って処理されます(変更なし、デフォルトポリシーが許可されます)
2つ目は、ファイアウォールルールを作成する
1.iptablesをインストールします
- Centos 7はデフォルトでfirewalldファイアウォールを使用します。iptablesファイアウォールを使用する場合、iptablesはインストールされません。iptablesをインストールする前に、firewalldをオフにする必要があります
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# yum -y install iptables iptables-services.x86_64
...略
[root@localhost ~]# systemctl start iptables.service
2.基本的な文法
iptablesコマンドを使用してファイアウォールルールを管理および作成する場合、基本的なコマンド形式は次のとおりです。
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
予防:
- テーブル名が指定されていない場合、デフォルトでフィルターテーブルを参照します
- チェーン名が指定されていない場合、デフォルトでテーブル内のすべてのチェーンを参照します
- チェーンのデフォルトポリシーが設定されていない限り、一致条件を指定する必要があります
- オプション、チェーン名、およびコントロールタイプには大文字を使用し、残りは小文字にします
3.一般的に使用される制御タイプ
- ACCEPT:データパケットの通過を許可します
- ドロップ:応答情報を提供せずにデータパケットを直接ドロップします
- 拒否:通過するデータパケットを拒否します。必要に応じて、応答メッセージがデータ送信者に送信されます。
- SNAT:パケットの送信元アドレスを変更します
- DNAT:データパケットの宛先アドレスを変更します
- MASQUERADE:固定されていないパブリックIPアドレスを装った
- LOG:ログ情報を/ var / log / messagesファイルに記録してから、データパケットを次のルールに渡します。LOGは単なる補助アクションであり、実際にはデータパケットを処理しません。
4.一般的な管理オプション
- さまざまなファイアウォールルールを上手に作成する前に、まず、ルールの表示、ルールの追加、ルールの削除、チェーン内のルールのクリアなどの基本的な操作を習得する必要があります。
- 以下では、iptablesコマンドで一般的に使用されるいくつかの管理オプションを紹介します。
オプション名 | 機能と特徴 |
---|---|
-A | 指定されたチェーンの最後に新しいルールを追加(--append)します |
-私 | 指定したチェーンの先頭に新しいルールを挿入(--insert)します。シーケンス番号が指定されていない場合、デフォルトで最初のルールになります。 |
-R | 指定されたチェーン内のルールを変更、置換(--replace)し、ルール番号または特定のコンテンツを指定できます |
-P | 指定されたチェーンのデフォルトポリシーを設定します(--policy) |
-D | 指定したチェーン内のルールを削除(--delete)します。ルール番号または特定のコンテンツを指定できます |
-F | 指定されたチェーン内のすべてのルールをフラッシュ(--flush)します。チェーン名が指定されていない場合、テーブル内のすべてのチェーンがクリアされます。 |
-L | 指定されたチェーン内のすべてのルールを一覧表示(--list)します。チェーン名が指定されていない場合は、テーブル内のすべてのチェーンが一覧表示されます。 |
-n | ホスト名の代わりにIPアドレスを表示するなど、出力結果を表示するには、数値形式(--numeric)を使用します |
-v | 各ルールの一致するパケット数や一致するバイト数などの詳細情報を表示します |
-行番号 | ルールを表示するときは、ルールのシリアル番号を表示してください |
4.1新しいルールを追加する
- 新しいファイアウォールルールを追加するときは、管理オプション「-A」と「-I」を使用します。前者はルールの追加に使用され、後者はルールの挿入に使用されます。
- たとえば、フィルタテーブルのINPUTチェーンの最後にファイアウォールルールを追加するには、次の操作を実行できます(一致条件として「-pプロトコル名」)
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
- 管理オプション「I」を使用すると、新しく追加したルールのシーケンス番号を同時に指定できます。シーケンス番号を指定しない場合は、デフォルトで最初のルールになります。
- たとえば、次の操作で追加された2つのルールは、それぞれフィルターテーブルの1番目と2番目のエントリに配置され、「-t filter」オプションは省略され、フィルターテーブルがデフォルトで使用されます。
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
4.2ルールテーブルを表示する
- 既存のファイアウォールルールを表示する場合は、管理オプション「-L」を「-line-numbers」オプションと組み合わせて使用し、チェーン内の各ルールのシーケンス番号を表示することもできます。
#基本格式:
iptables [-t 表名] -n -L [链名] [--line-numbers]
- たとえば、フィルタテーブルのINPUTチェーンのすべてのルールを表示してシリアル番号を表示する場合は、次の操作を実行できます。
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
6 ACCEPT tcp -- anywhere anywhere
7 REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
- ファイアウォールルールの数が多い場合、アドレスとポートの情報をデジタル形式で表示できれば、アドレス解決のリンクを減らし、コマンドの実行をある程度高速化することができます。
- たとえば、フィルタテーブルのINPUTチェーン内のすべてのルールを数値アドレスの形式で表示する場合は、次の操作を実行できます。
[root@localhost ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
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
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
4.3デフォルトポリシーを設定する
- iptablesの各チェーンでは、デフォルトの戦略はルールマッチングの最後のリンクです-一致するパケットルールが見つからない場合、デフォルトの戦略が実行されます
- デフォルトポリシーの制御タイプは、ACCEPT(許可)およびDROP(ドロップ)です。
#基本格式
iptables [-t 表名] -p <链名> <控制类型>
- たとえば、次の操作を実行して、フィルタテーブルのFORWARDチェーンのデフォルトポリシーを破棄するように設定し、OUTPUTチェーンのデフォルトポリシーを許可するように設定します。
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
- 一般に、実稼働環境でネットワークファイアウォールとホストベースのファイアウォールを設定する場合、デフォルトのルールはDROPであり、セキュリティを強化するためにホワイトリストが設定されます。
4.4ルールの削除とクリア
- ファイアウォールルールを削除するときは、管理オプション「-D」を使用してください
- たとえば、フィルタテーブルのINPUTチェーンの3番目のルールを削除するには、次の操作を実行できます。
- 指定されたチェーンまたはテーブル内のすべてのファイアウォールルールをクリアし、管理オプション「-F」を使用します
- たとえば、フィルタテーブルのINPUTチェーン内のすべてのルールをクリアするには、次の操作を実行できます。
[root@localhost ~]# iptables -F INPUT
[root@localhost ~]# iptables -n -L
INPUT ##确认删除效果
Chain INPUT (policy ACCEPT)
target prot opt source destination
- 管理オプション「-F」を使用すると、チェーン名を省略でき、テーブル内のすべてのチェーンのすべてのルールがデフォルトでクリアされます。
- たとえば、次の操作を実行して、フィルターテーブル、ナットテーブル、マングルテーブルをそれぞれクリアします。
iptables -F
iptables -t nat -F
iptables -t mangle -F
- 管理オプション「-F」を使用してチェーンをクリアする場合、デフォルトのポリシーは影響を受けないことに注意してください。
- したがって、デフォルトポリシーを変更する場合は、管理オプション「-P」を使用してリセットする必要があります。
- -PでDROPを設定した後、-Fを使用するときは注意してください!リモート接続を許可する関連ルールをクリアした後、ホストのリモート接続を防止します。この場合、ルールが保存されていない場合は、ホストを再起動して問題を解決できます(チケットを購入してください〜)
5.ルールの一致条件
- ファイアウォールルールを作成する場合、一致条件の設定が決定的な役割を果たします
- 一致条件が明確かつ正確に設定されている場合にのみ、ファイアウォールは、「マンスロー」を回避するために、条件を満たすデータパケットが処理されることを知ることができます。
- 同じファイアウォールルールに対して、複数の一致条件を指定できます。つまり、これらの条件がすべてルールを満たしている必要があります。
- iptablesのモジュール構造と組み合わせたデータパケットのさまざまな特性に応じて、一致条件の設定には次の3つのカテゴリが含まれます。
5.1一般的なマッチング
- 一般的なマッチングは通常のマッチングとも呼ばれます。このマッチング方法は単独で使用でき、他の条件や拡張モジュールに依存しません。
- 一般的な一般的なマッチングには、プロトコルマッチング、アドレスマッチング、およびネットワークインターフェイスマッチングが含まれます
5.1.1プロトコルマッチング
- iptablesルールを作成するときは、「-pプロトコル名」形式を使用して、TCP、UDP、ICMP(すべてのIPデータパケット用)などのデータパケットで使用されるネットワークプロトコルをチェックするように指定します。
- 使用可能なプロトコルタイプは、Linuxシステムの/ etc / protocolsファイルに保存されています。
- たとえば、icmpプロトコルを介してファイアウォールのローカルマシンにアクセスするデータパケットを破棄する場合は、ICMPプロトコルを除き、ファイアウォールを通過するデータパケットの転送を許可します。
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
5.1.2アドレスマッチング
- 「-s送信元アドレス」または「-d宛先アドレス」を使用して、パケットの送信元アドレスまたは宛先アドレスをチェックするiptablesルールを作成するときに指定します
- IPアドレスとネットワークセグメントアドレスは許容されますが、ホスト名とドメイン名アドレスを使用することはお勧めしません。相対的に言えば、解決プロセスは効率に影響します。
- たとえば、送信元アドレスが192.168.1.11の転送データを拒否する場合は、送信元アドレスが192.168.7.0/24ネットワークセグメントにあるデータの転送を許可します。
[root@localhost ~]# iptables -A FORWARD -s 192.168.11.1 -j REJECT
[root@localhost ~]# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
- 小規模なネットワークスキャン攻撃に遭遇した場合、IPアドレスをブロックすることがより効果的な方法です
- たとえば、ネットワークセグメント(10.20.30.0/24)が頻繁にスキャンされ、ログインが徹底的に行われ、その他の不正な試行が検出された場合は、すぐにファイアウォールを追加してブロックできます。
[root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
[root@localhost ~]# iptables -I FORWARD -s 10.20.30.0/24 -j DROP
5.1.3ネットワークインターフェイスのマッチング
- iptablesルールを作成するときは、「-iインターフェイス名」と「-oインターフェイス名」の形式を使用して、データパケットが接続または送信されるファイアウォールのインターフェイスを確認します。それぞれ、受信ネットワークカードと送信ネットワークカードに対応します。
- たとえば、外部ネットワークインターフェイス(eth1)からファイアウォールのローカルマシンにアクセスするデータパケットを破棄する必要があり、送信元アドレスがプライベートアドレスである場合、次の操作を実行できます。
[root@localhost ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
5.2暗黙のマッチング
- このマッチング方法では、サブ条件と同等の前提条件として指定されたプロトコルマッチングが必要であるため、単独で使用することはできず、対応する関数は必要に応じてiptablesによって自動的に(暗黙的に)カーネルにロードされます。
- 一般的な暗黙的マッチングには、ポートマッチング、TCPタグマッチング、およびICMPタイプマッチングが含まれます
5.2.1ポートマッチング
- iptablesを作成するときは、「– sport送信元ポート」または「–dport宛先ポート」の形式を使用します。ターゲットプロトコルはTCPまたはUDPで、データパケットの送信元ポートまたは宛先ポートを確認します。
- 単一のポート番号またはコロン「:」で区切られたポート範囲は許容されますが、連続していない複数のポートはこの方法を使用できません
- たとえば、ネットワークセグメント192.168.4.0/24のDNSクエリパケットの転送を許可するには
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
- 別の例として、vsftpdサーバーを構築するときに、ポート20と21を開き、パッシブモードポートが24500〜24600の場合、次の操作を参照してファイアウォールルールを設定できます。
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT
- 使用法
--sport 1000 #匹配源端口是1000的数据包
--sport 1000: 3000 #匹配源端口是1000-3000的数据包
--sport : 3000 #匹配源端口是3000及以下的数据包
--sport 1000: #匹配源端口是1000及以上的数据包
注意: --sport 和--dport 必须配合-p <协议类型>使用
- TCPタグマッチング
--tcp-flags TCP标记
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
5.2.2ICMPタイプマッチング
- iptablesルールを作成するときは、「– icmp-type ICMP type」の形式を使用し、ターゲットプロトコルはICMPであり、ICMPパケットのタイプをチェックします。
- ICMPタイプは、文字列または数値コードで表されます
- 「エコーリクエスト」(コード8)はリクエストを意味します
- 「エコー返信」(コード0)はエコーを意味します
- 「宛先-到達不能」(コード3)は、ターゲットが到達不能であることを意味します
- その他の利用可能なICMPプロトコルタイプについては、「iptables -picmp-h」コマンドを実行してヘルプ情報を表示できます。
iptables -A INPUT -p icmp - icmp-type 8 -j DROP #禁止其它主机ping本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允许本机ping其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其它主机时提示目标不可达
#此时其它主机需要配置关于icmp协议的控制类型为REJECT
iptables -A INPUT -p icmp -j REJECT
5.3ディスプレイの一致
- このマッチング方法では、サポートを提供するために追加のカーネルモジュールが必要です。マッチング条件を設定する前に、「-mモジュール名」の形式で対応するモジュールを手動で呼び出す必要があります。
- 一般的なディスプレイマッチングには、マルチポートマッチング、IP範囲マッチング、MACアドレスマッチング、およびステータスマッチングが含まれます。
5.3.1マルチポートマッチング
- iptablesルールを作成するときに使用します。
“-m multiport --dports 端口列表”
“-m multiport --sports 端口列表”
- 上記の2つの形式は、データパケットの送信元ポートと宛先ポートをチェックするために使用され、複数のポートはコンマで区切られます
- たとえば、マシンがポート80、22、21、20、53を開いて電子メールサービスを提供できるようにする場合は、次のようにします。
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
5.3.2IP範囲マッチング
- iptablesルールを作成するときは、次のフォームを使用してください
-m iprang --src-rang IP范围
- データパケットの送信元アドレスと宛先アドレスを確認するために使用されます。IP範囲は「開始アドレス-終了アドレス」の形式で表されます。
- たとえば、送信元アドレスが192.168.80.100〜192.168.80.200のudpパケットの転送を禁止する場合
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
5.3.3MACアドレスマッチング
- iptablesルールを作成するときは、次のフォームを使用してください
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP(MAC地址)
#禁止来自某MAC地址的数据包通过本机转发
- パケットの送信元MACアドレスを確認するために使用されます
- MACアドレス自体の制限により、このような一致条件は通常、内部ネットワークにのみ適用されます。
5.3.4状態マッチング
- iptablesルールを作成するときの次のフォーム
-m state --state 连接状态
- iptables状態追跡メカニズムに基づいてデータパケットの接続ステータスを確認します
- 一般的な接続状態は次のとおりです。
- NEW:接続とは関係ありません。接続はまだ開始されていません
- ESTABLISHED:要求に応答して、または接続が確立された場合、接続状態
- 関連:既存の接続(FTPアクティブおよびパッシブモードでのデータ接続など)、派生状態に関連し、通常はESTABLISHEDと組み合わせて使用されます
- 無効:どの接続が属しているか、またはステータスがないかを識別できません
- たとえば、通常のTCP接続に関連しないsyn以外の要求パケット(偽造されたネットワーク攻撃パケットなど)の転送を禁止する場合は、次の操作を実行できます。
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
- 別の例として、このマシンのWebサービス(ポート80)のみが開かれ、このマシンに送信されたTCP応答パケットが解放され、他のインバウンドデータパケットが破棄された場合、対応するインバウンド制御ルールは次の操作を参照できます。
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHD -j ACCEPT
iptables -P INPUT DROP
3、まとめ
- netfilterは、ファイアウォール機能をフィルタリングするためのカーネルメカニズムであり、iptablesは、ファイアウォールルールを管理するためのユーザーモードツールです。
- iptablesルールシステムには、デフォルトで4つのテーブル(filter、nat、mangle、raw)と5つのチェーン(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)が含まれています。
- テーブルの一致順序は、raw→mangle→nat→filterです。
- チェーンのマッチングシーケンスは特定のデータフローに依存し、LOG操作を除いて「マッチアンドストップ」の原則に従います。
- iptablesルールの一致条件タイプには、一般一致、暗黙的一致、および明示的一致が含まれます。明示的一致の場合、モジュールには「-mモジュール名」をロードする必要があります。