iptablesのとnetfilterのアーキテクチャの深い理解

[翻訳]のiptablesとnetfilterのアーキテクチャの-depth理解

2019年2月18日に公開| 最後の更新

翻訳の序文

2015年における英語のブログから、この翻訳AディープダイブINTO iptablesのとNetfilterのアーキテクチャ

設計原理とiptablesとnetfilterのより包括的なこの紹介、軟膏で飛ぶには、各フックポイントのカーネルスタックのない部分はありませんとiptablesは(から以下ここで追加し、写真と古典的な優先順位を支配ウィキペディア):

(NATを行うベースのiptables)加えて、我々は理論について話すが、これは、以下の実用的に焦点を当てています。

  1. (翻訳)NAT - ネットワークアドレス変換

それは、この記事を読んで、補助として使用することができます。

限らレベルトランスレータに、これは誤りや欠落場所から自由ではありません。疑問がある場合は、元のテキストを参照してください。

以下は、翻訳したものです。


序文

ファイアウォールは、サーバーやインフラストラクチャのセキュリティを保護するための重要なツールです。Linuxのエコシステムでは、iptablesそれはパケットフィルタリングフレームワークカーネル(パケットフィルタリングフレームワーク)に基づいており、ファイアウォールのツール、非常に広範な使用の一つですnetfilterこれらのシステムのアーキテクチャの管理者やユーザの知識が、それはiptablesの構文はかなり一方、挑戦さもあって、信頼性の高いファイアウォールポリシーを作成することができない場合があり織りなす複雑になるのnetfilterフレームワーク内にあります。

この記事では、読者の深い理解取るiptablesファイアウォールポリシーを作成する必要がある人は、それはより包括的に理解しているように、フレームワークを。私たちは、いくつかのコンポーネントがどのように編成されたnetfilter iptablesの相互作用で議論する包括的なフィルタリングおよび補正システム(包括的フィルタリングとマングリングシステム)されます。

どのような1 iptablesのとNetfilterのこと?

Linuxは、最も一般的に使用されるツールは、ファイアウォールiptablesのです。これは、作業を完了するために、プロトコル・スタック内の関数をフィルタリングiptablesのとバッグフック相互作用を持っています。これらは、コアのnetfilterフックフレームワークを構成しています。

プロトコルスタックを通過するフックをトリガーするときにネットワークシステム(受信または送信)に入る各パケットは、プログラムができ、フック関数を登録何らかの方法クリティカルパスのネットワークトラフィックを処理します。iptablesのカーネルモジュールハンドラに関連し、ファイアウォールルールのiptablesのルールを設定することにより、ネットワークトラフィックを満たすことが可能であるように、フックでポイントを登録。

2. Netfilterのフック

netfilterのフックの提供5つのポイント。プロトコルスタックを通してパッケージときにトリガされるカーネルモジュールは、ハンドラ登録ここ(送信または受信)どの方向パケットトリガフックに応じて、パケットの宛先アドレス、及びフックポイントのパケットは拒否または廃棄等されます。

ここでは、カーネルスタックが定義されているいくつかのフックは以下のとおりです。

  • NF_IP_PRE_ROUTING:前(ここで、パケットを送信する)トリガーパケットのプロトコルスタックは直ちにルーティング決定を行う、このフックに入る受信した後
  • NF_IP_LOCAL_IN:オブジェクトがネイティブであるかどうかを決定した後に受信したパケットをルーティング、これはフックをトリガーします
  • NF_IP_FORWARD:目的は、他のマシンであれば、決定をルーティングし、受信したパケットの後、これはフックをトリガーします
  • NF_IP_LOCAL_OUTこのプロトコルスタックを入力した後に送信されるローカルに生成されたパケットの調製直ちにフックをトリガ
  • NF_IP_POST_ROUTING:パケットまたはトリガーこのフックの後にルートを決定した後、ローカルで生成された送信する準備ができてパケットを転送

ハンドラを登録する際の優先順位が与えられなければならないので、フックトリガーは、呼処理の優先度のレベルに応じて機能することができたときにことを、。これは作るモジュール(または同じカーネルモジュールの複数のインスタンス)複数の同じフックポイントに登録することができ、決定した処理順序を有しています順番にカーネルモジュールは、それぞれの時間は、あなたがこのパッケージには、何を行うことを示唆し、netfilterのフレームワークに結果を返すと呼ばれています。

表3のIPTablesとチェーン(テーブルとチェーン)

応じて、組織の使用ルールにiptablesのテーブル、決意の種類が作ったものに(彼らが使用されている意思決定のタイプのメイクに) 基準は、ルールが異なるテーブルに分かれています。ネットワークアドレス変換ルールが処理される場合、例えば、それが置かれますnatテーブルと、パケットをフォワードするかどうかを決定継続が許可された場合、それが配置されてもよいfilterテーブル。

各テーブル内で、ルールは、さらに鎖に編成され、構築されたチェーンが内蔵フックによってトリガされます鎖は、実質的に(基本的にdetermin)ルールを決定することができる場合に一致します。

以下は見ることができ、内蔵のチェーン名とのnetfilterフック名が一から一です。

  • PREROUTINGNF_IP_PRE_ROUTINGトリガーフック
  • INPUTNF_IP_LOCAL_INトリガーフック
  • FORWARDNF_IP_FORWARDトリガーフック
  • OUTPUTNF_IP_LOCAL_OUTトリガーフック
  • POSTROUTINGNF_IP_POST_ROUTINGトリガーフック

鎖は、コントロールに管理者ができたパケットの伝送経路上の点(パケットの配信経路におけるアプリケーションポリシー )。各テーブルには、チェーンを複数有しているので、プロセスに影響を与える可能性がテーブル内の複数箇所に適用するからです。特定ポイントプロトコルスタックは理にかなっているだけで、ルールの特定のタイプ、したがって、すべてのテーブルはカーネルフック各鎖に登録されていません

5つだけのコアのnetfilterフックの総数、従って異なる鎖の最終的なテーブルからは、これらの点に登録されています。例えば、3つの表がありますPRETOUTINGチェーン。チェーンが対応に登録されている場合NF_IP_PRE_ROUTING、時間フックポイント、彼らはのコール有効にする必要があり、優先度テーブルを指定する必要はPRETOUTING最低の優先度に、最高のチェーンを。私たちは、優先課題のチェーンが表示されますよ。

4.テーブルタイプ

提供iptablesのテーブルの種類で見てみましょう。テーブルは、ルールのタイプ分類に基づいています。

4.1フィルタ表

filterテーブルがために、最も一般的なテーブルの一つであるパケットの通過を許可するかどうかを決定します

一般に「フィルタリング」パッケージと呼ばれるファイアウォールの分野で(パケットを「フィルタリング」)。この表は、ファイアウォールのいくつかの一般的な機能を提供します。

4.2 NATテーブル

nat ネットワークアドレス変換テーブルには、ルールを実装するために使用しました。

パケットがプロトコルスタックに入ると、これらのルールは、ルーティングされているかどうか、どのようにパケットの振る舞いを変更するには、パケットの送信元/送信先アドレスを変更するかを決定します。natテーブルは通常、ネットワークにパケットをルーティングするために使用されている直接アクセスすることはできません。

表4.3マングル

mangle用(修正)表IPパケットヘッダを変更します

例えば、パッケージは、パケットが通過することができるホップの数を増加または減少、TTLを変更してもよいです。

また、パケットを再生することができます。この表には、カーネルだけで有効である「タグ」(内部カーネル「マーク」) 、その後の処理テーブルやツールがタグを使用することができます。パッケージには、カーネルを表し上のマークは、パッケージそのものではなく、マークを変更しません。

4.4生表

iptablesのファイアウォールは、ステートフルです:各パケットであるときを決定する決定されたパッケージに依存

netfilterの接続追跡(接続トラッキング)特性に基づいて、既存の接続またはセッションの一部としてそのようなiptablesのパケットの代わりになる別、無関係なパケットストリーム。パケットの後にコネクション追跡ロジック・ネットワーク・インタフェースは、すぐに適用されてきます。

rawテーブルの定義は非常にいる、限られている唯一の目的は、フレームパケット接続トラッキングようにバイパスを提供することです

4.5セキュリティ表

securityアクションテーブルは、ラベルをパッケージ化するために、または他のSELinuxは、パケットの振る舞いを処理するためのシステムのSELinuxのセキュリティコンテキストを解釈することができます影響を与えるためにSELinuxのでマークされています。これらのマーカーは、単一のパケットに基づくものとすることができる、それはまた、ベースに接続することができます。

チェーンを達成するために、各テーブルの5

すでに述べたように、それぞれ独自の方法で各テーブルの横に参照チェーンテーブルとチェーンを、議論しました。また、我々はまた、同じフックの異なる鎖に登録された優先順位の問題を議論します。テーブルには3本の持っている場合たとえば、PRETOUTINGチェーンを、それを注文するものでそれらを呼び出す必要がありますか?

次の表は、テーブルとチェーンとの関係を示しています。横方向テーブルは、縦鎖、Yは、鎖があり、このテーブルを表します。例えば、2行目を表しrawそこテーブルPRETOUTINGOUTPUT2つのチェーン。倒れた順序から各列に特定は、netfilterのフックは、(テーブルに対応する)順鎖呼び出されたときにトリガされます。

説明する必要がいくつかのポイントがあります。以下の図では、nat表を下に細分されるDNAT(送信先アドレスを変更し)、そしてSNATより容易にするために、(送信元アドレスを変更すること)は、それらの優先順位を示します。また、当社は、ルーティングの決定点と接続追跡のポイントを追加しましたので、全体のプロセスをより完全かつ包括的な:

テーブル/チェーン PREROUTING 入力 FORWARD 出力 POSTROUTING
(ルート決意)        
     
(接続トラッキング)      
行方不明
夜(DNAT)      
(ルート決意)      
フィルタ    
セキュリティ    
夜(SNAT)    

パケットはnetfilterのフックがトリガされると、プロセスは、列に沿って上から下に実行されます。トリガー(列)方向とパッケージ(入力/出力)は、ルートが決定された関連フック、フィルタ条件。

特定のイベントは、チェーンテーブルをスキップする原因になります。例えば、NATルールと一致する各接続の最初のパケットは、このパッケージの動作は、このパッケージの後ろに接続されているすべてに適用されます。接続に対する応答パケットが自動的に反対方向にNATルールを適用します。

チェーントラバーサルの優先順位

サーバがどのようにルーティングするパケットを知っており、ファイアウォールは、データパケットの伝送を可能にする、以下は異なるプロセス移行パッケージの下のシーンであると仮定:

  • 受信したパケットの対象マシンであります:PRETOUTING- >INPUT
  • 受け取った、目的は他のホストパッケージです:PRETOUTING- > FORWARD- >POSTROUTING
  • 本地产生的包:OUTPUT -> POSTROUTING

综合前面讨论的 table 顺序问题,我们可以看到对于一个收到的、目的是本机的包: 首先依次经过 PRETOUTING chain 上面的 rawmanglenat table;然后依次经 过 INPUT chain 的 manglefiltersecuritynat table,然后才会到达本机 的某个 socket。

6 IPTables 规则

规则放置在特定 table 的特定 chain 里面。当 chain 被调用的时候,包会依次匹配 chain 里面的规则。每条规则都有一个匹配部分和一个动作部分。

6.1 匹配

规则的匹配部分指定了一些条件,包必须满足这些条件才会和相应的将要执行的动作(“ target”)进行关联。

匹配系统非常灵活,还可以通过 iptables extension 大大扩展其功能。规则可以匹配协 议类型、目的或源地址、目的或源端口、目的或源网段、接收或发送的接口(网卡)、协议 头、连接状态等等条件。这些综合起来,能够组合成非常复杂的规则来区分不同的网络流 量。

6.2 目标

包符合某种规则的条件而触发的动作(action)叫做目标(target)。目标分为两种类型:

  • 终止目标(terminating targets):这种 target 会终止 chain 的匹配,将控制权 转移回 netfilter hook。根据返回值的不同,hook 或者将包丢弃,或者允许包进行下一 阶段的处理
  • 非终止目标(non-terminating targets):非终止目标执行动作,然后继续 chain 的执行。虽然每个 chain 最终都会回到一个终止目标,但是在这之前,可以执行任意多 个非终止目标

每个规则可以跳转到哪个 target 依上下文而定,例如,table 和 chain 可能会设置 target 可用或不可用。规则里激活的 extensions 和匹配条件也影响 target 的可用性。

7 跳转到用户自定义 chain

这里要介绍一种特殊的非终止目标:跳转目标(jump target)。jump target 是跳转到其 他 chain 继续处理的动作。我们已经讨论了很多内置的 chain,它们和调用它们的 netfilter hook 紧密联系在一起。然而,iptables 也支持管理员创建他们自己的用于管理 目的的 chain。

向用户自定义 chain 添加规则和向内置的 chain 添加规则的方式是相同的。不同的地方 在于,用户定义的 chain 只能通过从另一个规则跳转(jump)到它,因为它们没有注册到 netfilter hook

用户定义的 chain 可以看作是对调用它的 chain 的扩展。例如,用户定义的 chain 在结 束的时候,可以返回 netfilter hook,也可以继续跳转到其他自定义 chain。

这种设计使框架具有强大的分支功能,使得管理员可以组织更大更复杂的网络规则。

8 IPTables 和连接跟踪

在讨论 raw table 和 匹配连接状态的时候,我们介绍了构建在 netfilter 之上的连 接跟踪系统。连接跟踪系统使得 iptables 基于连接上下文而不是单个包来做出规则判 断,给 iptables 提供了有状态操作的功能。

连接跟踪在包进入协议栈之后很快(very soon)就开始工作了。在给包分配连接之前所做 的工作非常少,只有检查 raw table 和一些基本的完整性检查。

跟踪系统将包和已有的连接进行比较,如果包所属的连接已经存在就更新连接状态,否则就 创建一个新连接。如果 raw table 的某个 chain 对包标记为目标是 NOTRACK,那这 个包会跳过连接跟踪系统。

连接的状态

连接跟踪系统中的连接状态有:

  • NEW:如果到达的包关连不到任何已有的连接,但包是合法的,就为这个包创建一个新连接。对 面向连接的(connection-aware)的协议例如 TCP 以及非面向连接的(connectionless )的协议例如 UDP 都适用

  • ESTABLISHED:当一个连接收到应答方向的合法包时,状态从 NEW 变成 ESTABLISHED。对 TCP 这个合法包其实就是 SYN/ACK 包;对 UDP 和 ICMP 是源和目 的 IP 与原包相反的包

  • RELATED:包不属于已有的连接,但是和已有的连接有一定关系。这可能是辅助连接( helper connection),例如 FTP 数据传输连接,或者是其他协议试图建立连接时的 ICMP 应答包

  • INVALID:包不属于已有连接,并且因为某些原因不能用来创建一个新连接,例如无法 识别、无法路由等等

  • UNTRACKED:如果在 raw table 中标记为目标是 UNTRACKED,这个包将不会进入连 接跟踪系统

  • SNAT:包的源地址被 NAT 修改之后会进入的虚拟状态。连接跟踪系统据此在收到 反向包时对地址做反向转换

  • DNAT:包的目的地址被 NAT 修改之后会进入的虚拟状态。连接跟踪系统据此在收到 反向包时对地址做反向转换

这些状态可以定位到连接生命周期内部,管理员可以编写出更加细粒度、适用范围更大、更 安全的规则。

9 总结

netfilter 包过滤框架和 iptables 防火墙是 Linux 服务器上大部分防火墙解决方案的基 础。netfilter 的内核 hook 和协议栈足够紧密,提供了包经过系统时的强大控制功能。 iptables 防火墙基于这些功能提供了一个灵活的、可扩展的、将策略需求转化到内核的方 法。理解了这些不同部分是如何联系到一起的,就可以使用它们控制和保护你的的服务器环 境。

想了解更多 iptables 使用方式,参考这个教程

おすすめ

転載: www.cnblogs.com/taosiyu/p/12024999.html