Iptables
使用 iptables 將埠重定向到 localhost / 阻塞目標埠
我喜歡將所有到達 80 的流量轉發到 8000。
我用了
iptables -tnat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8000
但是8000埠仍然對公眾開放。
我試過-DNAT:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8000
但這根本不起作用。/proc/sys/net/ipv4/ip_forward 設置為 1。
沒有配置其他規則。
請幫幫我:)
–
編輯:
回答以下問題:這是我想要實現的目標:
我有一個在埠 8000 上執行的服務,它可以被視為一個網路伺服器。它應該可以從外部通過埠 80 訪問,但不能通過埠 8000。內部網路無關緊要:可能會受到限制。
我知道,REDIRECT 不會丟棄直接發送到埠 8000 的數據包,但是如果我將 INPUT 鏈中的所有數據包丟棄到 8000,那麼重定向的數據包也會被丟棄。
iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP
不能為我工作。
有沒有辦法丟棄沒有通過我的 PREROUTING 鏈重定向的目標埠為 8000 的數據包?
通過 -s 添加源 ip 沒有幫助,對嗎?因為源IP在重定向時不會改變。
回答
根據接受的答案,我可以這樣解決:
iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1 iptables -A INPUT -m mark --mark 1 -j DROP
在您重定向的數據包中設置標記。然後在被阻止的包之前允許標記的包。看到
iptables -j MARK -h
標記一個數據包並iptables -m mark -h
匹配一個數據包