Iptables

使用 iptables 將埠重定向到 localhost / 阻塞目標埠

  • February 11, 2015

我喜歡將所有到達 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匹配一個數據包

引用自:https://serverfault.com/questions/666838