ウェブサイト検索

iptables と nftables: 違いは何ですか?


長い間、iptables はシステム管理者にとってお気に入りのツールでした。しかし、最近ではnftablesが推奨されています。その理由については、お読みください。

すべての Linux 管理者は、長年にわたって私たちに役立ってきた長年の Linux ファイアウォールである iptables を使用したことがあります。しかし、nftables についてはまだ馴染みがないかもしれません。nftables は、私たちに切望されていたアップグレードを提供し、最終的には老朽化した iptables を置き換えることを目的とした新参者です。

なぜ iptables ではなく nftables なのでしょうか?

nftables は、現在 iptables を保守しているのと同じ組織である Netfilter によって開発されています。これは、iptables の問題、つまりスケーラビリティとパフォーマンスを解決するために作成されました。

新しい構文といくつかのアップグレードを除けば、以前のバージョンと非常によく似た機能を備えていることがわかります。

新しいユーティリティを正当化するもう 1 つの理由は、iptables フレームワークが、iptables、ip6tables、arptables、ebtables がすべて異なるが類似した機能を提供することで少し複雑になっているということです。

たとえば、iptables で IPv4 ルールを作成し、ip6tables で IPv6 ルールを作成し、2 つの同期を維持するのは単純に非効率です。 Nftables は、これらすべてを置き換え、一元化されたソリューションになることを目指しています。

nftables は 2014 年から Linux カーネルに組み込まれていますが、最近では採用が広まり、注目を集めています。 Linux の世界では変化が遅く、古いユーティリティが段階的に廃止され、アップグレードされたユーティリティが使用されるまでには数年以上かかることがよくあります。

Nftables は推奨されるファイアウォールの選択肢になりつつあり、Linux 管理者はレパートリーを更新する義務があります。 nftables を学習し、既存の iptables 構成を更新するには、今が絶好の機会です。

何年も iptables を使用していて、まったく新しいユーティリティを学習する必要があるという考えにそれほど興奮していない場合でも、心配しないでください。このガイドではその内容について説明しています。この記事では、nftables と iptables の違いについて説明し、新しい nftables 構文でファイアウォール ルールを構成する例を示します。

nftables のチェーンとルール

iptables には、入力、出力、および転送という 3 つのデフォルト チェーンがあります。これら 3 つの「チェーン」 (設定されている場合は他のチェーンも) は「ルール」を保持し、iptables はネットワーク トラフィックをチェーン内のルールのリストと照合することによって機能します。検査対象のトラフィックがどのルールにも一致しない場合、そのトラフィックにはチェーンのデフォルト ポリシーが使用されます (つまり、ACCEPT、DROP)。

Nftables は、「chains」と「rules」でも同様に機能します。ただし、基本チェーンから開始するわけではないため、構成がもう少し柔軟になります。

iptables の非効率な領域の 1 つは、トラフィックがルールに一致しない場合でも、すべてのネットワーク データが前述のチェーンの 1 つ以上を通過する必要があることです。チェーンが設定されているかどうかに関係なく、iptables は依然としてネットワーク データをチェーンと照合してチェックします。

Linux への nftable のインストール

Nftables はすべての主要な Linux ディストリビューションで利用でき、ディストリビューションのパッケージ マネージャーを使用して簡単にインストールできます。

Ubuntu または Debian ベースのディストリビューションでは、次のコマンドを使用できます。

sudo apt install nftables

システムの再起動時に nftables が自動的に開始されるようにするには、次の手順を実行します。

sudo systemctl enable nftables.service

iptables と nftables の構文の違い

Nftables の構文は iptables とは異なり、はるかに単純です。正直に言うと、iptables の構文は常に不明確であり、習得するには余分な努力が必要でした。 iptables から移行する人にとって幸運なことに、nftables は依然として古い構文を受け入れます。

また、iptables-translate ユーティリティを使用することもできます。このユーティリティは、iptables コマンドを受け入れ、同等の nftables コマンドに変換します。これは、2 つの構文がどのように異なるかを簡単に確認する方法です。

次のコマンドを使用して、Ubuntu および Debian ベースのディストリビューションに iptables-translate をインストールします。

sudo apt install iptables-nftables-compat

インストールしたら、iptables 構文を iptables-translate コマンドに渡すと、nftables と同等のコマンドが返されます。

これらのコマンドが互いにどのように異なるかを理解するために、いくつかの例を見てみましょう。

受信接続をブロックする

このコマンドは、IP アドレス 192.168.2.1 からの受信接続をブロックします。

linux@handbook:~$ iptables-translate -A INPUT -s 192.168.2.1 -j DROP
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop

受信 SSH 接続を許可する

さらにいくつかの例を見てみましょう。これは、Linux サーバーを強化するときに iptables に通常入力する一般的な内容です。

linux@handbook:~$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept

特定の IP 範囲からの SSH 接続を許可する

192.168.1.0/24 からの受信 SSH 接続を許可する場合:

linux@handbook:~$ iptables-translate -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept

eth0 ネットワーク インターフェイスへの MySQL 接続を許可する

iptables と nftables の構文は次のとおりです。

linux@handbook:~$ iptables-translate -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT iifname eth0 tcp dport 3306 ct state new,established counter accept

受信 HTTP および HTTPS トラフィックを許可する

特定のタイプ f トラフィックを許可するための両方のコマンドの構文は次のとおりです。

linux@handbook:~$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept

これらの例からわかるように、構文は依然として iptables によく似ていますが、コマンドはもう少し直観的です。

nftables を使用したロギング

上記の nft コマンドの例にある「counter 」オプションは、iptables がデフォルトで行うように、ルールがタッチされた回数をカウントするように nftables に指示します。

nftables では、これらはオプションであり、指定する必要があります。

nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept

Nftables には、構成をエクスポートするためのオプションが組み込まれています。現在、XML と JSON をサポートしています。

nft export xml

結論

この記事では、Linux ファイアウォールに関して nftables が新たに推奨される選択肢である理由を説明しました。また、古い iptables と新しい nftables の機能や構文などの多くの違いもリストしました。

このガイドでは、nftables へのアップグレードを検討する理由と、古い iptables ルールを正常にアップグレードするために慣れる必要がある新しい構文の使用を開始する方法を説明しました。

ご質問やご提案がございましたら、コメント欄でお知らせください。