向環回發出 NATing 伺服器專用介面(對於 MySQL)
我正在嘗試將發送到伺服器專用介面的流量 NAT 到環回(因為 MySQL
bind-address
已打開127.0.0.1
且無法更改,但我仍需要通過專用介面訪問它)。配置
-mysql
bind-address
= -enabled127.0.0.1
ip forwarding with
sysctl -w net.ipv4.ip_forward=1
-setup iptables 如下(
eth0
是私有介面)-P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT -A INPUT -i lo --jump ACCEPT -A INPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT -t nat -A PREROUTING -i eth0 -p tcp --port 3306 -j DNAT --to-destination 127.0.0.1 -t nat -A POSTROUTING -o lo -j SNAT --to-source 127.0.0.1
驗證
- mysql 綁定正常(
telnet 127.0.0.1 3306
工作正常)-ip 轉發已正確啟用(
sysctl net.ipv4.ip_forward
給出 1)
- 連接到
eth0
on3306
很好,因為當我將其設置為我bind-address
擁有的 IP時,eth0
我可以連接。關於
on localhost 和上述 iptables 規則 的問題bind-address
我無法連接到eth0
on擁有的 IP3306
:如果我執行,tcpdump -ni any port 3306
我可以看到SYN
後面跟著 aRST
但我現在知道這RST
是從哪裡來的,因為我希望SYN
轉發以lo
ip127.0.0.1
作為源和目標。問:我對 NAT
eth0
到lo
埠缺少什麼3306
?附加資訊:
ubuntu server 10.04
執行iptables v1.4.4
用案例更新問題
要求:
-我們有幾個在 localhost 上執行的帶有許多服務(jetty、tomcat、ldap、mysql)的盒子
這些服務**只需要在本地主機上執行,**不需要在公共介面上訪問。
但是我們希望我們的外部Nagios 伺服器通過私有介面檢查它們
-出於安全原因,我們****不想將這些服務配置為在公共介面上偵聽(儘管我們可以在公共介面上阻止它們,但我們認為如果出現問題,這些服務最好不要在公共 IP 上偵聽帶防火牆)
Defense in depth
- 將這些服務配置為在環回和私有介面上偵聽是不可能的,或者更難以實現。
好處
使用從私有到內部介面的 NAT 將提供以下好處:
-**更容易實施:**我們不必重新配置現有服務
-**更少的維護:**如果添加了新的服務來監聽環回,我們只需要添加 iptable 規則而不需要重新配置這些服務
-**更安全:**如果我們的 FW 出現故障,更糟糕的情況是我們失去了對這些服務的監控,但它們不會暴露於公共介面。
你不能 nat 127.0.0.1 這是一個超級特殊的保留網路。您最好將綁定地址設置為 0.0.0.0,然後使用 iptables 過濾您不想允許流量的 IP/介面。
嘗試刪除此規則:
-t nat -A POSTROUTING -o lo -j SNAT --to-source 127.0.0.1
我必須完全撤回我的答案;來自 Linux 機器外部的數據包不允許進入 127.0.0.1。請參閱以下電子郵件(以及之前的電子郵件):
http://lists.netfilter.org/pipermail/netfilter/2004-August/055117.html