Nftables : 基本操作2023/07/13 |
Nftables の基本操作です。[nft] ツールで各種操作を実行可能です。
|
|||||||||||||||
[1] |
nftables は、従来の iptables, ip6tables, arptables, ebtables の機能を統合したツールです。
それぞれの機能が担っていたネットワークレベルは、[Family] として抽象化されています。 [nft] ツールでの各種設定時には、これらの [Family] を指定して実行することになります。 現時点で指定可能な [Family] は下記の通りです。( 将来的に下記以外の [Family] が追加される可能性あり )
|
[2] |
UFW から設定を引き継がない限りは、nftables デフォルトではフィルタリングの設定はないため、テーブルの作成から始めることになります。
⇒ nft add table [family] [table name]
テーブルは以下のようにして作成します。 |
# 現在のルールセット表示 (初期状態はフィルタリングルールなし) root@dlp:~# nft list ruleset table inet filter { chain input { type filter hook input priority filter; policy accept; } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } # 上記ルールは削除して [inet] ファミリーに [firewall01] テーブルを追加 root@dlp:~# nft flush ruleset root@dlp:~# nft add table inet firewall01 # [inet] ファミリーのテーブル表示 root@dlp:~# nft list tables inet table inet firewall01 # 現在のルールセット表示 root@dlp:~# nft list ruleset table inet firewall01 { } # テーブルを削除する場合は以下 root@dlp:~# nft delete table inet firewall01 |
[3] |
テーブル作成後はチェインを追加します。
⇒ nft add chain [family] [table name] [chain name] { type [type] hook [hook} priority [priority] \; }
指定可能な [type], [hook] は下記の通りです。[priority] についてはよくある整数値の設定で、値が小さいほど優先後が高まります。
|
# [filter] タイプ, [input] フック, 優先度 [0] で # [inet] ファミリーの [firewall01] テーブルに [filter_INPUT] チェインを追加 root@dlp:~# nft add chain inet firewall01 filter_INPUT { type filter hook input priority 0 \;}
nft list ruleset table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; } } # チェインを削除する場合は以下 root@dlp:~# nft delete chain inet firewall01 filter_INPUT root@dlp:~# nft list ruleset table inet firewall01 { } |
[4] | テーブルとチェインを作成した後は、設定したいルールを追加します。 |
root@dlp:~# nft list ruleset table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; } } # 例として、コネクションの状態が [related, established] のパケットを許可するルールを追加 root@dlp:~# nft add rule inet firewall01 filter_INPUT ct state related,established accept
nft list table inet firewall01 table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; ct state established,related accept } } # 例として、ループバックインターフェースを許可するルールを追加 root@dlp:~# nft add rule inet firewall01 filter_INPUT iif lo accept
nft list table inet firewall01 table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; ct state established,related accept iif "lo" accept } } # 例として、追加済みのルール以外のパケットは破棄するルールを追加 root@dlp:~# nft add rule inet firewall01 filter_INPUT drop
nft -a list table inet firewall01 table inet firewall01 { # handle 2 chain filter_INPUT { # handle 1 type filter hook input priority filter; policy accept; ct state established,related accept # handle 4 iif "lo" accept # handle 5 drop # handle 6 } } # 例として、[22] 番ポート宛でコネクションの状態が [new, untracked] の # パケットを許可するルールを [handle 5] の後ろの位置に追加 root@dlp:~# nft add rule inet firewall01 filter_INPUT handle 5 tcp dport 22 ct state { new,untracked } accept
nft -a list table inet firewall01
table inet firewall01 { # handle 2 chain filter_INPUT { # handle 1 type filter hook input priority filter; policy accept; ct state established,related accept # handle 4 iif "lo" accept # handle 5 tcp dport 22 ct state { new, untracked } accept # handle 8 drop # handle 6 } } # 例として、パケットのメタデータが [icmp,ipv6-icmp] のパケットを許可するルールを [handle 8] の後ろの位置に追加 root@dlp:~# nft add rule inet firewall01 filter_INPUT handle 8 meta l4proto { icmp,ipv6-icmp } accept
nft -a list table inet firewall01 table inet firewall01 { # handle 2 chain filter_INPUT { # handle 1 type filter hook input priority filter; policy accept; ct state established,related accept # handle 4 iif "lo" accept # handle 5 tcp dport 22 ct state { new, untracked } accept # handle 8 meta l4proto { icmp, ipv6-icmp } accept # handle 10 drop # handle 6 } } # ルールを削除する場合は削除したいルールの [handle] 番号を指定して削除 root@dlp:~# nft delete rule inet firewall01 filter_INPUT handle 8
nft -a list table inet firewall01 table inet firewall01 { # handle 2 chain filter_INPUT { # handle 1 type filter hook input priority filter; policy accept; ct state established,related accept # handle 4 iif "lo" accept # handle 5 meta l4proto { icmp, ipv6-icmp } accept # handle 10 drop # handle 6 } } |
Sponsored Link |