如何將來自埠 A 的傳入流量重定向到埠 B,並允許埠 B 上的 localhost 流量但不允許傳入?
我想為 MySql 伺服器添加一個“小”安全性。
我想保留開放埠 330,但僅用於內部目的(本地主機),並打開另一個埠(例如 12345),重定向到 3306。
所以我需要添加一個 iptable 路由,僅在 eth1 介面上顯示“來自 12345 的所有傳入流量都重定向到 3306,但從直接外部傳入流量關閉 3306”。
如何關閉 3306 上的外部傳入流量?
如果我很好地理解了您的所有要求,請這樣做:
# assuming your network interface is named `eth1` as per your OP example iptables -t raw -A PREROUTING -i eth1 -p tcp --dport 3306 -j DROP iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to-port 3306
第一個命令禁止從
eth1
tcp 埠 3306 傳入的連接。第二個命令將指向本地埠 12345 的任何傳入連接重定向到本地埠 3306
如果您有多個名為
eth0
,eth1
,eth2
等的介面,並且您想全部阻止它們,您可以通過eth+
在上面的第一個命令中指定(注意加號)來獲得它,否則只能選擇性地阻止您的特定介面’將需要在每個介面上使用第一個命令一次來阻止。上面的兩個命令是實現您請求的行為所需的命令,根據您的整體需求可能就足夠了。
但是,為了獲得更一致的體驗,我建議使用額外的可選配置:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306
這會將本地發起的連接重定向到本地埠 12345 到本地埠 3306,以便您也可以從同一本地電腦通過埠 12345 連接到您的 mysql。
最後,作為重要的旁注,請記住命令
-A
選項附加規則已經存在的規則,因此優先於附加的新規則,從而乾擾它們。iptables
因此,如果您嘗試使用任何 iptables 命令,您可能需要在某些時候清除涉及的表,您可以使用
-F
選項來執行此操作,如下所示:iptables -t raw -F PREROUTING iptables -t nat -F PREROUTING # and possibly also iptables -t nat -F OUTPUT # if you also used the additional advised commmand
另一方面,還要記住,這些命令會清除這些表中存在的所有規則,包括那些可能因為存在其他防火牆而存在的規則。有更多細粒度的命令可以選擇性地刪除特定規則,但這些取決於您的整體 iptables 設置,如果它非常複雜,超出了此處看到的兩個簡單規則。
所以你應該總是首先看到你的初始配置是什麼,你可以使用
-L
選項來做到iptables
這一點,即像這樣:iptables -t raw -nL PREROUTING iptables -t nat -nL PREROUTING # and possibly also iptables -t nat -nL OUTPUT # if you also used the additional advised commmand
當然,您也可以隨時使用它們,在添加規則時查看表的目前狀況。然後,您可能希望添加
v
選項(如 中-nvL
)以查看規則計數器,因為它們匹配(或不匹配)網路流量隨時間變化。