Ubuntu

向環回發出 NATing 伺服器專用介面(對於 MySQL)

  • December 22, 2011

我正在嘗試將發送到伺服器專用介面的流量 NAT 到環回(因為 MySQLbind-address已打開127.0.0.1且無法更改,但我仍需要通過專用介面訪問它)。

配置

-mysql bind-address= -enabled 127.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)

  • 連接到eth0on3306很好,因為當我將其設置為我bind-address擁有的 IP時,eth0我可以連接。

關於
on localhost 和上述 iptables 規則 的問題bind-address我無法連接到eth0on擁有的 IP 3306:如果我執行,tcpdump -ni any port 3306我可以看到SYN後面跟著 aRST但我現在知道這RST是從哪裡來的,因為我希望SYN轉發以loip127.0.0.1作為源和目標。

問:我對 NATeth0lo埠缺少什麼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

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