私のサーバーにnftablesが設定されていて、いくつかの保護されたポート(たとえば80)に入ってくるすべてのトラフィックをルート権限なしで使用できるより高いポート(たとえば13080)にリダイレクトしたいと思います。リモートで80個しかアクセスできませんが、ローカルでは両方のポートにアクセスできるようにしたいです。私が思いついた設定は次のとおりです。
#!/usr/bin/nft -f
flush ruleset
table inet firewall {
chain inbound {
type filter hook input priority filter; policy drop;
ct status dnat counter accept # accept everything that came through destination nat (port 80)
iifname lo counter accept
oifname lo counter accept
ct state { established, related } counter accept
ct state invalid counter drop
tcp dport 22 ct state new counter accept
counter reject with icmpx type port-unreachable # reject everything else
}
chain destination-nat {
type nat hook prerouting priority dstnat; policy accept
tcp dport 80 counter redirect to 13080 # redirect 80 to 13080
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain outbound {
type filter hook output priority 0; policy accept;
}
}
ただし、何らかの理由でポート80へのローカルアクセスがブロックされます(13080はまだアクセス可能ですが)。誰かが私が間違っていることを教えてもらえますか?
答え1
ここに例があります。一般ネットワークのNetfilterとパケットフロー有効期間はnftables:
重要な詳細は内部に記録されています。*「新しい」接続についてのみ「nat」表を参照してください。。
ローカルで開始された接続の場合、新しい接続の最初のパケットは出力中に新しいconntrackステータスを生成します(出力のconntrackボックス)。この接続がループバックされたとき(ほとんどすべての場合に以下を介して)ルオインターフェース)同じパケットが事前ルーティング(別のconntrackボックス)を介して戻ると、conntrackステータスが一致します。つまり、ローカルループバック接続には2つのconntrack状態がありません。
他の場合は、新しい接続の最初のパケットが事前ルーティング(事前ルーティングされたconntrackボックス)を介して到着し、新しいconntrackステータスが作成されます。
したがって、接続の最初のループバックパケットが送信されると、新しいconntrackエントリが生成されます。出力中このパケットが事前ルーティングを介して戻ると、既存の conntrack エントリと一致します。もう新しいアイテムではありません。 NATフック(nat / preroutingチェーンを意味destination-nat
)は通過しないため、この接続には影響しません。出力段階で機会が欠落しています。
代わりにDNAこの状況を解決するために、新しいconntrackステータスの説明がnat / outputに表示されます。デフォルトでは、ローカルで開始されたすべての接続(インターネットなど)に影響を与えるため、ローカル接続にのみ使用するように注意する必要があります。ルオ相互作用。このチェーンとルールがこれを行います。
nft add chain inet firewall loopback-nat '{ type nat hook output priority -100; policy accept; }'
nft add rule inet firewall loopback-nat oif lo tcp dport 80 counter redirect to :13080
他の場所で実行すると、その動作を追跡できます。conntrack
イベントモードのコマンド:
conntrack -E -p tcp --dport 80
そして、外部から開始された接続とローカルで開始されたループバック接続(この追加のチェーンの有無)の違いを確認してください。覚えておいてください、ナットフックはステータスとともに表示された項目だけを見ることができます[NEW]
(それに応じてコマンドによって表示される項目が変更されました)。