
我正在嘗試建立 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。