如何使用 iptables 重定向已建立的連線?

如何使用 iptables 重定向已建立的連線?

我正在嘗試建立 iptables 規則,將所有發送到連接埠 1986 的流量重新導向到連接埠 9,以使用以下規則引發「連線被拒絕」:

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9

這對於新連線非常有效,但問題是已建立的連線似乎會跳過此規則並且不會被拒絕。

我嘗試NOTRACK在原始表中添加一條規則來嘗試避免連接狀態跟踪,但這沒有效果:


iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK

將狀態新增至 nat 規則也不起作用:

iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9

如何使用 iptables 為在已建立的連線上傳送的資料包引發「連線被拒絕」錯誤?

答案1

DNAT當透過 TCP 3 次握手建立連線時,此規則會在 conntrack 表中建立一個條目。

notrack規則似乎禁止創建新的 conntrack 條目。但是,它不會阻止使用現有的 conntrack 條目。

由於連線已經建立,因此 conntrack 表中已經有一個條目,核心使用它來轉送流量。

您應該使用conntrack工具從 conntrack 表中刪除流。例如:

conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986

發出此命令後,將使用 iptables 中的新 DNAT 規則將連線重新新增至 conntrack。然後新的目標伺服器將拒絕連線。我不確定新的目標伺服器到底會發回什麼,也許是 TCP RST。

相關內容