すべてのLinux管理者は確かにiptablesを使用してきました。これは、長年にわたって私たちに役立ってきた長年のLinuxファイアウォールです。しかし、あなたはまだ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はこれと同様に機能しますが、「チェーン」と「ルール」もあります。ただし、最初はベースチェーンがないため、構成が少し柔軟になります。
iptablesの非効率性の1つの領域は、すべて トラフィックがどのルールにも一致しなかった場合でも、ネットワークデータはこれらの前述のチェーンの1つ以上を通過する必要がありました。チェーンが構成されているかどうかに関係なく、iptablesはネットワークデータをチェーンと照合します。
Linuxへのnftablesのインストール
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からの着信接続をブロックします:
[email protected]:~$ 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
さらにいくつかの例を見てみましょう。Linuxサーバーを強化するときに通常iptablesに入力する一般的なものです。
[email protected]:~$ 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
192.168.1.0/24からの着信SSH接続を許可する場合:
[email protected]:~$ 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
MySQL接続をeth0ネットワークインターフェイスに許可する
iptablesとnftablesの構文は次のとおりです。
[email protected]:~$ 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
特定のタイプのトラフィックを許可するために、両方のコマンドの構文は次のとおりです。
[email protected]:~$ 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ルールを正常にアップグレードするために理解する必要のある新しい構文を開始する方法について説明しました。
ご質問やご提案がございましたら、コメント欄でお知らせください。