[Ubuntu] 增加服務 Listening Ports

今天碰到外部網路無法存取 MySQL,調查原因發現是 firewall 把 port 3306 擋住了

考慮到安全性的問題,在 firewall 擋確實是一個有效的方法,但是如果直接改 MySQL listening port,內部服務要改動的幅度有點大

而 MySQL 也不支援同一服務對應多個 port

靈光一閃想到直接用 iptables 做 port forwarding,如此一來就能讓同一個 MySQL 服務同時監聽多個 port

此方法不限定 MySQL,也適用於只能指定一個 listening port 的服務

1
2
3
4
# OS: Ubuntu 14.04 Server LTS x64
# User: root
# 將網路卡介面eth0上port 20000的封包轉送到port 3306
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 20000 -j REDIRECT --to-port 3306

 

這時候用 port scanner 工具掃描 port 20000,state 是 open

但因為不是常見的 service listening port,所以會顯示為 unknown

1
2
PORT     STATE SERVICE
20000/tcp open  unknown

 

因為自定義的 iptables rules 在重開機之後就會消失,所以我們要在重開機後能自動復原 rules

1
2
3
4
5
6
7
8
9
# 先保存現在已經設定好的 rules
iptables-save > /etc/network/iptables.rules

# 以 vim 開啟網路介面設定檔,當網路卡啟用時同時載入自訂的rules

vim /etc/network/interfaces

# 在設定尾端加入下列這行
pre-up iptables-restore < /etc/network/iptables.rules

 

這時候外部網路就能以 port 20000 連線到 MySQL

而內部網路一樣可以用預設的 port 3306,也可以用新加入的 port 20000

最後還是要提醒一下直接改 service port 是比較好的

不過因為內部網路的服務有點多了怕麻煩只好偷吃步 XD

Licensed under CC BY-NC-SA 3.0 TW
comments powered by Disqus