あなたが前世紀に住んでいる、とクラウドコンピューティングやレンガを動かし関連分野でない場合は、CentOSの8正式版がリリースされました最近聞いたことがあるはずですCentOS
に完全に準拠してRed Hat
再配布ポリシー、および上流の製品を使用することに全力を注いこれは、機能と完全に互換性があります。CentOSの8と大きな変化のRedHat Enterprise Linuxの8は同じであり、カーネルのバージョンは、Fedora 28ベースの4.18
主な変更点は、ネットワークであり、とのnftables
代替フレームワークのiptables
デフォルトのネットワークパケットフレームとしてフィルタリングツールを。あなたがnftablesを聞いていない場合は、今全部について学ぶために時間があります。
nftablesは、netfilter
既存の{IP、IP6、ARP、EB交換することを目的とするプロジェクト }テーブル{IPは、IP6}テーブルが新しいパケットフィルタフレーム、新しいユーザ空間ユーティリティ(NFT)とを提供するためのフレームワークを互換性レイヤ。これは、従来のフック、リンク追跡システムを使用し、ユーザ空間は、コンポーネントキューに入れられたnetfilter
ロギングサブシステムを。
カーネルの実装、libnlネットリンクnftablesユーザ通信および空間:nftablesは、主に3つの成分からなります。カーネルが提供するnetlink
設定インターフェイスと実行時の評価ルールセットを、libnl
それはカーネル関数、ユーザーはできるスペースとの基本的な通信が含まnft
れ、ユーザインタラクションを。
本論文では、ユーザー空間コマンドラインツールの説明nft
使用状況を。
1. nftables VS iptablesの
表は、チェーンを含むことを特徴とする請求のiptablesとテーブル(表)チェーン(鎖)として、ルールをnftables(ルール)組成物は、ルールを含む鎖は、ルールが真の作用です。iptablesのと比較すると、以下の変更を中心にnftables:
iptables
レイアウト規則はメモリ、すなわち、アレイのレイアウトの連続するチャンクに基づいており、そしてnftables
ルールは、レイアウト・チェーンを定義します。Kubernetesユーザーはこのことについて非常に興奮する必要がありますかのように実際には、配列、リンクリストの違いは、ありますか?iptables
あなたが唯一のカーネルを再コンパイルし、新しい機能を追加したい場合は、作業のほとんどは、カーネルモードで完了し、かつnftables
作業のほとんどは、非常に簡単に新しい機能を追加し、ユーザーモードで実行され、あなたはカーネルを変更する必要はありません。iptables
そこには登録のみに従いますチェーンや他のチェーンが必要な場合でも、チェーンに内蔵されている;およびnftables
内蔵のチェーンを使用すると、オンデマンドで登録することができ、存在しません。以来iptables
、組み込みのデータパケットカウンタ、空であっても内蔵のチェーン場合、パフォーマンスの低下を引き起こします。- 簡素化
IPv4/IPv6
デュアルスタックの管理を - コレクション、辞書、地図のネイティブサポート
戻るnftables、デフォルトのルールセットを初めて目には有効です。
$ nft list ruleset
(あなたはオフにした場合は何も、実際には組み込みの連鎖ああされていないfirewalld
サービスを)。
2.テーブルを作成します。
nftablesテーブルには、クラスタごとに1つのアドレスのみを持っている、とだけクラスタのデータパケットに適用されます。あなたは、5つのクラスタのリストを指定することができます。
nftablesクラスタ | iptablesのコマンドラインツール |
---|---|
IP | iptablesの |
IP6 | ip6tablesを |
INET | iptablesのとip6tablesを |
ARP | arptables |
ブリッジ | ebtablesの |
inet
これはすなわち、団結、IPv4とIPv6の両方のパケットに適用されるip
とip6
次の例では、INETクラスタを使用する、ルールクラスタは、より容易に定義することができます。
新しいテーブルを作成します。
$ nft add table inet my_table
すべてのルールをリストします。
$ nft list ruleset
table inet my_table {
}
テーブルにはすべてのルールを持っていない今、私たちはルールを保存するためにチェーンを作成する必要があります。
3.チェーンを作成します。
チェーンもnftablesため、組み込みのチェーン、表示する必要はありませんチェーンを作成するには、ルール、およびテーブルを保存するために使用されます。チェーン2種類があります。
- 従来のチェーン:フックタイプと優先度を指定する必要はありませんが、分類は論理的ルール、ジャンプを作るために使用することができます。
- 基本チェーン:エントリポイントのデータパケットは、フックタイプと優先度を指定する必要があります。
定期的にチェーンを作成します。
$ nft add chain inet my_table my_utility_chain
基本的なチェーンを作成します:
$ nft add chain inet my_table my_filter_chain { type filter hook input priority 0 \; }
- バックスラッシュ(
\
)シェルは、コマンドセミコロンの終了として解釈されないように、脱出します。 priority
整数値をとり、それが負の数、優先鎖の小さい値であってもよいです。
チェーン内のすべてのルールをリストします。
$ nft list chain inet my_table my_utility_chain
table inet my_table {
chain my_utility_chain {
}
}
$ nft list chain inet my_table my_filter_chain
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
}
}
4.ルールを作成します。
あなたがテーブルとチェーンを持っていたら、あなたはルールを作成することができ、ルールがチェーンに含ま文や式、で構成されています。SSHログインを許可するには、次のルールを追加します。
$ nft add rule inet my_table my_filter_chain tcp dport ssh accept
add
それはあなたがチェーンの先頭にルールを追加したい場合は、使用することができ、チェーンの最後にルールを追加すると述べinsert
。
$ nft insert rule inet my_table my_filter_chain tcp dport http accept
すべてのルールをリストします。
$ nft list ruleset
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport ssh accept
}
}
なぜなら、使用する前に、先にsshルールのHTTPルールに注意してくださいinsert
。
ルールはまた、2つの方法があり、チェーン内の指定された位置に挿入することができます。
1、index
インデックスのルールを指定します。add
それは、新しいルールはルールのインデックス位置の後に追加さを表すinser
新しいルールはルールインデックスの前に追加さを表します。インデックス値は、ゼロから増加しました。
$ nft insert rule inet my_table my_filter_chain index 1 tcp dport nfs accept
$ nft list ruleset
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport nfs accept
tcp dport ssh accept
}
}
$ nft add rule inet my_table my_filter_chain index 0 tcp dport 1234 accept
$ nft list ruleset
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport 1234 accept
tcp dport nfs accept
tcp dport ssh accept
}
}
index
iptablesの同様の-I
オプションは、注意するには、2つのものがありますが、まず、インデックスの値がゼロベースで、2番目は、インデックスがルールの存在を指していなければならないですが、このようにnft insert rule … index 0
違法です。
2、handle
ルールのハンドルを指定します。add
それは、新しいルールはルールのインデックス位置の後に追加さを表すinser
新しいルールはルールインデックスの前に追加さを表します。handle
パラメータの値をすることができます--handle
取得しました。
$ nft --handle list ruleset
table inet my_table { # handle 10
chain my_filter_chain { # handle 2
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 4
tcp dport 1234 accept # handle 6
tcp dport nfs accept # handle 5
tcp dport ssh accept # handle 3
}
}
$ nft add rule inet my_table my_filter_chain handle 4 tcp dport 1234 accept
$ nft insert rule inet my_table my_filter_chain handle 5 tcp dport nfs accept
$ nft --handle list ruleset
table inet my_table { # handle 10
chain my_filter_chain { # handle 2
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 4
tcp dport 2345 accept # handle 8
tcp dport 1234 accept # handle 6
tcp dport 3456 accept # handle 9
tcp dport nfs accept # handle 5
tcp dport ssh accept # handle 3
}
}
nftablesにおいて、ハンドラ値は、ルールがルールのために安定した指標を提供する、除去されない限り、固定されています。index
値は可変であり、限り新しいルールが挿入さがあるので、それは変更することができます。一般的には推奨されるhandle
新しいルールを挿入します。
あなたは価値のルールを処理するためのルールを作成する場合にのみ、あなたがルールを作成するときにパラメータを追加する必要があり、取得することができます--echo
と--handle
。
$ nft --echo --handle add rule inet my_table my_filter_chain udp dport 3333 accept
add rule inet my_table my_filter_chain udp dport 3333 accept # handle 10
5.ルールを削除します。
単一のルールは、あなたが最初に削除したいルールへのハンドルを見つける必要があり、そのハンドルにより削除することができます。
$ nft --handle list ruleset
table inet my_table { # handle 10
chain my_filter_chain { # handle 2
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 4
tcp dport 2345 accept # handle 8
tcp dport 1234 accept # handle 6
tcp dport 3456 accept # handle 9
tcp dport nfs accept # handle 5
tcp dport ssh accept # handle 3
udp dport 3333 accept # handle 10
}
}
ハンドル値は、ルールを削除するために使用されます。
$ nft delete rule inet my_table my_filter_chain handle 8
$ nft --handle list ruleset
table inet my_table { # handle 10
chain my_filter_chain { # handle 2
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 4
tcp dport 1234 accept # handle 6
tcp dport 3456 accept # handle 9
tcp dport nfs accept # handle 5
tcp dport ssh accept # handle 3
udp dport 3333 accept # handle 10
}
}
6.リストのルール
前の例は、すべてのルールを一覧表示され、我々は彼らのニーズに応じて記載されている規則の一部もできます。例えば:
テーブル内のすべてのルールをリストします。
$ nft list table inet my_table
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport 1234 accept
tcp dport 3456 accept
tcp dport nfs accept
tcp dport ssh accept
udp dport 3333 accept
}
}
バーのチェーン内のすべてのルールをリストします。
$ nft list chain inet my_table my_other_chain
table inet my_table {
chain my_other_chain {
udp dport 12345 log prefix "UDP-12345"
}
}
7.コレクション
nftables
コレクションの構文ネイティブサポートは、複数のIPアドレス、ポート番号、ネットワークカード、またはその他の条件を一致させるために使用することができます。
匿名コレクション
コレクションは分割され、匿名コレクションの名前のコレクションを変更する必要はありません。将来のために、より適切なルールの匿名のコレクション。
たとえば、次のルールは、送信元のIPから許可され10.10.10.123 ~ 10.10.10.231
、この範囲内のホストからのトラフィック。
$ nft add rule inet my_table my_filter_chain ip saddr { 10.10.10.123, 10.10.10.231 } accept
$ nft list ruleset
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport nfs accept
tcp dport ssh accept
ip saddr { 10.10.10.123, 10.10.10.231 } accept
}
}
匿名収集欠点は、あなたがセットを変更する必要がある場合、あなたはルールを交換する必要があることです。後で頻繁にコレクションを変更する必要がある場合は、名前のコレクションを使用することをお勧めします。
ルール前の実施例はまたによって単純化のセットに追加することができます。
$ nft add rule inet my_table my_filter_chain tcp dport { http, nfs, ssh } accept
iptablesのはできると
ipset
コレクションで使用され、そしてコレクションはネイティブサポートをnftablesので、ヘルプなしipset
。
名前付きセット
nftablesも名前のコレクションをサポートして、名前付きセットを変更することができます。コレクションを作成します。現在サポートされているデータタイプは、要素の型を指定する必要があります。
ipv4_addr
:IPv4アドレスipv6_addr
:IPv6アドレスether_addr
:イーサネット(イーサネット)アドレスinet_proto
:ネットワークプロトコルinet_service
:ネットワークサービスmark
:タグタイプ
空の名前付きコレクションを作成します。
$ nft add set inet my_table my_set { type ipv4_addr \; }
$ nft list sets
table inet my_table {
set my_set {
type ipv4_addr
}
}
参照コレクション内のルールを追加するには、使用することができ@
、コレクションの名前を保つためにシンボルを。ルールの次のセットは、と述べたmy_set
ブラックリストにIPアドレスを追加します。
$ nft insert rule inet my_table my_filter_chain ip saddr @my_set drop
$ nft list chain inet my_table my_filter_chain
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0; policy accept;
ip saddr @my_set drop
tcp dport http accept
tcp dport nfs accept
tcp dport ssh accept
ip saddr { 10.10.10.123, 10.10.10.231 } accept
}
}
コレクションに要素を追加します。
$ nft add element inet my_table my_set { 10.10.10.22, 10.10.10.33 }
$ nft list set inet my_table my_set
table inet my_table {
set my_set {
type ipv4_addr
elements = { 10.10.10.22, 10.10.10.33 }
}
}
あなたがコレクションにセクションを追加した場合は与えられます。
$ nft add element inet my_table my_set { 10.20.20.0-10.20.20.255 }
Error: Set member cannot be range, missing interval flag on declaration
add element inet my_table my_set { 10.20.20.0-10.20.20.255 }
^^^^^^^^^^^^^^^^^^^^^^^
フラグに収集間隔を使用するには追加する必要がありinterval
、適切なデータ構造となるようコアは、予め記憶されているセットのデータ型を確認しなければならないので、。
サポートセクション
サポートコレクションの名前付き範囲を作成します。
$ nft add set inet my_table my_range_set { type ipv4_addr \; flags interval
$ nft add element inet my_table my_range_set { 10.20.20.0/24 }
$ nft list set inet my_table my_range_set
table inet my_table {
set my_range_set {
type ipv4_addr
flags interval
elements = { 10.20.20.0/24 }
}
}
サブネットマスク表記は、暗黙的にIPアドレスの範囲に変換されて、あなたはまた、直接の範囲を使用することができ
10.20.20.0-10.20.20.255
、同じ効果を得るために。
カスケードの異なる種類
名前付きセットはまた、カスケード要素の種類をサポートし、オペレータによるカスケードが.
分離します。例えば、次の規則が一度IPアドレス、プロトコル、およびポート番号を一致させることができます。
$ nft add set inet my_table my_concat_set { type ipv4_addr . inet_proto . inet_service \; }
$ nft list set inet my_table my_concat_set
table inet my_table {
set my_concat_set {
type ipv4_addr . inet_proto . inet_service
}
}
コレクションに要素を追加します。
$ nft add element inet my_table my_concat_set { 10.30.30.30 . tcp . telnet }
参考文献の収集とルールにおける同じタイプのカスケードの前に、しかし各要素を指示する必要がどの位置ルールのセットに対応します。
$ nft add rule inet my_table my_filter_chain ip saddr . meta l4proto . tcp dport @my_concat_set accept
これは、ソースIPパケット、プロトコルタイプならば、ポートがターゲットと一致することを意味し10.30.30.30、tcp、telnet
た時間を、nftablesは、パケットが通過できるようになります。
また、のようなカスケード要素の匿名のコレクションを使用することができます。
$ nft add rule inet my_table my_filter_chain ip saddr . meta l4proto . udp dport { 10.30.30.30 . udp . bootps } accept
今、あなたはバーのnftablesコレクションのパワーを鑑賞することができるはずです。
カスケードの同様のタイプには、例えば、重合型ipset nftablesを設定します
hash:ip,port
。
8.辞書
辞書には、上記の特定のルールにマッピングされたデータと一致条件の異なる種類を使用することができる高度な機能のnftables、であり、それは一方向ハッシュマップがあるので、あなたが連鎖法則完璧なジャンプパフォーマンスのオーバーヘッドを回避することができます。
上記の要件は、ルールによって達成することができるように、例えば、ルールを処理するために、論理的にTCPとUDPパケットが開いて分割されます、辞書を用いて実現することができます。
$ nft add chain inet my_table my_tcp_chain
$ nft add chain inet my_table my_udp_chain
$ nft add rule inet my_table my_filter_chain meta l4proto vmap { tcp : jump my_tcp_chain, udp : jump my_udp_chain }
$ nft list chain inet my_table my_filter_chain
table inet my_table {
chain my_filter_chain {
...
meta nfproto ipv4 ip saddr . meta l4proto . udp dport { 10.30.30.30 . udp . bootps } accept
meta l4proto vmap { tcp : jump my_tcp_chain, udp : jump my_udp_chain }
}
}
そして同じのコレクションは、匿名の辞書に加えて、あなたは名前の辞書を作成することができます。
$ nft add map inet my_table my_vmap { type inet_proto : verdict \; }
辞書に要素を追加します。
$ nft add element inet my_table my_vmap { 192.168.0.10 : drop, 192.168.0.11 : accept }
後で、ルールで辞書の要素を参照することができます:
$ nft add rule inet my_table my_filter_chain ip saddr vmap @my_vmap
9.表の名前空間
nftablesでは、各テーブルには、同じ名前を持つことができるので、異なるテーブルチェーン、コレクション、辞書を意味し、別の名前空間です。例えば:
$ nft add table inet table_one
$ nft add chain inet table_one my_chain
$ nft add table inet table_two
$ nft add chain inet table_two my_chain
$ nft list ruleset
...
table inet table_one {
chain my_chain {
}
}
table inet table_two {
chain my_chain {
}
}
この機能を使用すると、互いに独立して相の場合には、独自のテーブルを管理する別のルールを適用することができ、かつ使用がiptables
これを実行することはできません。
もちろん、この機能は、各テーブルが別々のファイアウォールとして扱われるため、パケットがあっても、テーブル内のすべてのルール、真の解放を解放しなければならない欠陥があるtable_one
パケットの通過を許可、パケットがまだありますされる可能性がありますtable_two
拒否。この問題を解決するために、優先度の導入、nftables priority
バリューチェーン優先順位が高い低い、priority
より低い値チェーンpriority
実行するより高いバリューチェーン。同じ優先順位の2本鎖場合は、競争を入力します。
10.バックアップとリカバリ
これらの規則の例は、の私たちは、実際のnftablesに、自動的に再起動後に負荷を復元し、バックアップを支配することができ、すべての一時的および恒久的な秩序あるsystemd
サービスは、このような仕事があります。
バックアップのルール:
$ nft list ruleset > /root/nftables.conf
負荷回復:
$ nft -f /root/nftables.conf
CentOSの8では、nftables.service
ルールが格納されている/etc/nftables.conf
一般的に位置、規則を含むいくつかの他の実施例では/etc/sysconfig/nftables.conf
、ファイルが、デフォルトはコメントします。
11.概要
この記事で説明したいと考えている、あなたは機能や利用nftablesを理解することができ、もちろん、あなたが公式nftablesを見ることができる唯一の少数の普通紙の使用量と、より高度な使用を必要とするwiki
、または私の次の記事を待ちます。:私は、ナレッジベースの記事で、あなたが記事を特に参照して、Linuxのにスマートな転換を実現使うとnftablesを楽しむことができるはずと信じてLinuxのグローバルスマート転換プログラム。
マイクロチャンネル公衆数
公共号にクラウド技術を議論するために、当社のクラウドネイティブ取引所グループ、およびSun Hongliang、Zhangguanチャン、陽明およびその他のネイティブ首長に参加するように、2次元コードマイクロチャネル国民の関心の数を掃引返信◉◉プラスグループ以下