nftablesを使って別のポートを開く方法は?

nftablesを使って別のポートを開く方法は?

私はDebian Linuxサーバーを実行しています。

一部のファイアウォールポートを開く必要があります。通常、iptablesは簡単ですが、このサーバーはnftablesを実行しています。

conf ファイルを開くと、ルールは表示されません。

cx:/etc# cat nftables.conf 

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
        }

        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;

ただし、ルールを一覧表示すると、次のようになります。

:/etc# nft list ruleset
table inet filter {
        chain input {
                jump phonesystem
        }

        chain phonesystem {
                ip daddr 224.0.1.75 counter packets 0 bytes 0 accept
                tcp dport { http, https, sip, sip-tls, 5062, 5090 } ct state new counter packets 0 bytes 0 accept
                udp dport { sip, 5090, 7000-10999 } counter packets 0 bytes 0 accept
        }
}
table ip filter {
        chain INPUT {
                meta l4proto tcp tcp dport 22 counter packets 0 bytes 0 accept
                jump phonesystem
        }

        chain phonesystem {
                ip daddr 224.0.1.75 counter packets 0 bytes 0 accept
                tcp dport { http, https, sip, sip-tls, 5062, 5090 } ct state new counter packets 0 bytes 0 accept
                udp dport { sip, 5090, 7000-10999 } counter packets 0 bytes 0 accept
        }

        chain FORWARD {
                type filter hook forward priority 0; policy accept;
        }

        chain OUTPUT {
                type filter hook output priority 0; policy accept;
                meta l4proto tcp tcp dport 22 counter packets 0 bytes 0 accept
        }
}
table ip6 filter {
        chain INPUT {
                jump phonesystem
        }

        chain phonesystem {
                tcp dport { http, https, sip, sip-tls, 5062, 5090 } ct state new counter packets 0 bytes 0 accept
                udp dport { sip, 5090, 7000-10999 } counter packets 0 bytes 0 accept
        }

        chain FORWARD {
                type filter hook forward priority 0; policy accept;
        }

        chain OUTPUT {
                type filter hook output priority 0; policy accept;
        }
}
table ip security {
        chain INPUT {
                type filter hook input priority 150; policy accept;
        }

        chain FORWARD {
                type filter hook forward priority 150; policy accept;
        }

        chain OUTPUT {
                type filter hook output priority 150; policy accept;
        }

さて、ポート4001などを開きたいです。

IPテーブルに関連付けられている電話システムで多くのコマンドを試しましたが、常に構文エラーが発生します。私はどこで間違っているのだろうか?

例えば

:/etc# nft add rule ip filter input tcp dport 4001 accept
Error: Could not process rule: No such file or directory
add rule ip filter input tcp dport 4001 accept

または

:/etc# nft add rule ip phonesystem tcp dport 4001 counter accept
Error: syntax error, unexpected tcp, expecting string
add rule ip phonesystem tcp dport 4001 counter accept

より多くのポートを開きたい場合は、電話システムチェーンにどのように追加しますか?

ベストアンサー1

あなたのシステム基本的にiptables-nft代わりに使用してくださいiptables-legacy

Debian Buster 以降、nf_tables は iptables-nft 階層を介して (つまり、nf_tables カーネルサブシステムを介して iptables 構文を使用して) iptables を使用する場合のデフォルトのバックエンドです。これはip6tables、arptables、ebtablesにも影響します。

ツール構成iptablesだから使用していますiptables-nft代わりにiptables-legacy。だから目に見えます。nftablesまた。でも同じことが起こりますip6tables

したがって、nft list ruleset実際に表示されるのはinet基本的に定義されたスイート(デュアルIPv4 + IPv6)です。nftables渡す/etc/nftables.conf そしてiptables別の構成またはツールで完了したコマンドの結果。

ip filter INPUT/OUTPUT/FORWARDチェーンなどの規則を変更しないでください。そうしないと、iptables後でチェーンから再変換できない場合に失敗する可能性があります。nftables 互換性APIiptables。同様にnft、すべてのコンテンツをデコードすることは不可能かもしれません。iptables'チェーンはまだ翻訳できないものを使用できるからです。iptables一致またはターゲット。現在のルールセットではそうではありません(または#コメント()を含む行は時々表示されます)。

ip filter INPUTデフォルトチェーンip6 filter INPUTとして表示されinet filter inputず、phonesystemユーザー/一般チェーン:まず、type filter hook input priority 0; policy accept;パケットパスでNetfilterフックを使用してデフォルトチェーンにする必要があります。これがなければ、ここでは入力フィルタリングは行われません。または、切り取り/貼り付けエラーの場合、デフォルトの入力ポリシーがパケットを破棄するかどうか(そうでなければパケットを受け入れる必要があるのはなぜですか?)が不明になり、最終提案に影響します。

この質問に答えるために。チェーン名が正しくないか(大文字と小文字が区別された)、必須テーブル名が欠落しているため、毎回構文エラーが発生します。それ以外の場合は機能しますが、コマンドを使用できなくするコマンドはiptables次のとおりです。

nft add rule ip filter INPUT tcp dport 4001 accept
nft add rule ip filter phonesystem tcp dport 4001 counter accept

何があってもしないでください。

iptables-saveルールセットを表示するために使用されます。iptablesiptablesルールは次のコマンドで作成されたので、書式設定し、それを使用して通常どおりにルールを変更しますiptables(体系的にカウンタルールプロンプトを表示)。

iptables -A INPUT -p tcp --dport 4001 -j ACCEPT
iptables -A phonesystem -p tcp --dport 4001 -j ACCEPT

使用法の競合がないため、inetフィルタテーブルにルールを自由に追加できます。あるいは、名前が一致しない限り、必要に応じてテーブルを直接作成できます。iptables(-nft API経由):

たとえば、

nft add table ip myowntable
nft add chain ip myowntable mycustominput '{ type filter hook input priority 10; policy accept; }'

相互作用があることに注意してください。パケットがチェーンから失われると、永遠に失われたままになります。パケットがチェーン(たとえば)で承認されると、ip filter INPUT同じフック/タイプ(たとえば、または)のチェーンフックに引き続きドロップできます。だからこれは意味があります:inet filter inputip myowntable mycustominput

ドロップされたパケットは回復されません。

nft add rule ip myowntable mycustominput tcp dport 5555 drop

ただし、以下は役に立ちません(これを受け入れても、ip myowntable mycustominput他の規則によって削除される前に他の場所から削除されるのを防ぐことはできませんip filter INPUT)。

nft add rule ip myowntable mycustominput tcp dport 4001 accept

結論:システムで使用されている他のツールがある場合は、そのiptablesツールを引き続き使用するiptablesか、そのツールに切り替えてください。nftables最初。両方を同時に使用すると、より多くの問題が発生します。両方を使用する必要がある場合は、この質問に答えることができるいくつかの追加のQ&Aがあります(ヒント:パケットの表示が必要な場合があります)。

おすすめ記事