Ubuntu
iptables - 根據規則/名稱刪除 NAT 規則,而不是規則編號
我需要在 Ubuntu 16 伺服器上編寫一些涉及 NAT 規則 (-t nat) 的 Iptables 規則更改。這似乎是使用 -D 刪除規則的常用方法
$$ rule here $$不適用於 -t 標識符…我真的不想通過辨識我正在尋找的鏈中的哪個規則並獲取其關聯的行號來使腳本複雜化…有什麼想法嗎? 如果有幫助,以下規則的目的是在本地 MySQL 數據庫崩潰或重新啟動期間(基本上)將 localhost 和外部的流量從 1 個伺服器重定向到備份。
我的規則:
iptables -t nat -A POSTROUTING -j MASQUERADE iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306 iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
我嘗試放棄(作品):
iptables -t nat -D POSTROUTING -j MASQUERADE iptables -t nat -D PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306
在不使用 –line-number 的情況下無法弄清楚如何刪除此規則:
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
給定帶有
-I
(insert) 或-A
(append) 的任何規則,您可以重複規則定義以-D
將其刪除。對於您的特定範例,這將刪除
OUTPUT
錶鍊中nat
的第一個匹配規則iptables -t nat -D OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
如果您需要輕鬆地打開或關閉規則,那麼為它製作一個單獨的鏈怎麼樣?
iptables -t nat -N MySQLnat iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306
然後以稍微修改的方式創建您的規則:
iptables -t nat -A POSTROUTING -j MASQUERADE iptables -t nat -A PREROUTING -p tcp --dport 3306 -j MySQLnat iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j MySQLnat
現在,您可以通過清空自定義鏈輕鬆刪除 MySQL 的特定於 MySQL 的 DNAT 規則:
iptables -t nat -F MySQLnat
空鏈與剛剛
-j RETURN
進入的鏈相同,因此它什麼也不做,然後繼續處理跳入空鏈的鏈。(在你的立場上,我會謹慎刪除
-j MASQUERADE
POSTROUTING 鏈中的無條件規則,除非我非常確定沒有其他依賴於它。)當您再次需要 MySQL DNAT 時,只需將鏈的內容放回:
iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306