在實際的生產環境中,我們為了安全性,會將一些重要的服務(資料庫服務)不開放外網訪問,但是當我們某個時刻由於一些特殊需求,需要進行外網訪問的時候,我們可以通過埠轉發來實現。通過一臺和與服務可以互相訪問的主機,通過該主機進行埠轉發。
- Windows 埠轉發
- Linux 埠轉發
一、Windows 埠轉發
windows 主要是通過 netsh
進行埠轉發。
listenaddress # 本地監聽的ip
listenport # 本地監聽的埠
connectaddress # 轉發請求接收的主機ip
connectport # 轉發請求接收的主機的埠
# 執行命令
netsh interface portproxy add v4tov4 listenaddress=localip listenport=localport connectaddress=remoteip connectport=remoteport
# 檢視現有的配置
netsh interface portproxy show all
# 刪除原有的埠轉發
netsh interface portproxy delete v4tov4 listenaddress=localip listenport=localport
示例
設定將請求到 本地 IP 192.168.15.89
的埠請求 2222
轉發到 192.168.15.35
埠 22
。
注意: 下面的命令需要用管理員執行。
netsh interface portproxy add v4tov4 listenaddress=192.168.15.89 listenport=2222 connectaddress=192.168.15.35 connectport=22
PS C:\WINDOWS\system32> netsh interface portproxy show all
偵聽 ipv4: 連線到 ipv4:
地址 埠 地址 埠
--------------- ---------- --------------- ----------
192.168.15.89 2222 192.168.15.35 22
二、Linux 埠轉發
1、rinetd
簡介
官方文件 :https://boutell.com/rinetd/
下載 https://boutell.com/rinetd/http/rinetd.tar.gz
rinetd
可以將 TCP
連線從一個 IP 地址和埠重定向到另外一個 IP 地址和埠。rinetd
是一個單程式服務(非阻塞IO程式),它可以處理配置檔案/etc/rinetd.conf
中指定的地址和埠中任意數量的連線。rinetd
不能重定向 FTP,因為 FTP 需要多個 socket
。 rinetd
可以在 Linux 平臺上執行,也可以在 Windows 95/98/NT
平臺上執行。
安裝:
wget https://boutell.com/rinetd/http/rinetd.tar.gz
tar -xzf rinetd.tar.gz
yum install gcc -y
cd rinetd
# (修改埠範圍)
sed -i 's/65536/65535/g' rinetd.c
# 建立目錄
mkdir /usr/man
# 解壓安裝
make && make install
配置檔案
配置轉發
配置檔案的轉發書寫規則,可以配置多個轉發。
bindaddress bindport connectaddress connectport
示例:
0.0.0.0 2222 192.168.15.89 22
0.0.0.0 3333 192.168.15.89 80
配置過濾規則
rinetd
可以使用過濾規則,來設定可以訪問的主機。(只能使用ip,不能使用主機名)
注意: 填寫的位置應該位於檔案的開頭
。
allow #設定允許訪問的主機
deny #設定拒絕訪問的主機
示例:拒絕 192.168.15
整個網段的請求。
deny 192.168.15.*
配置日誌檔案
預設情況下, rinetd
不會生成日誌檔案。要啟用日誌記錄,請將以下行新增到配置檔案中:
logfile log-file-location
示例:注意 logfile 與後面路徑只有一個空格哦。
logfile /var/log/rinetd.log
配置檔案示例:
deny 192.168.15.*
0.0.0.0 2222 192.168.15.89 22
0.0.0.0 3333 192.168.15.89 80
logfile /var/log/rinetd.log
寫入配置檔案
echo <<EOF >/etc/rinetd.conf
deny 192.168.15.*
0.0.0.0 2222 192.168.15.89 22
0.0.0.0 3333 192.168.15.89 80
logfile /var/log/rinetd.log
EOF
執行和管理
# 啟動 rinetd
rinetd
# 設定開機自啟
echo rinetd >>/etc/rc.local
# 暫停 ,通過kill pid
kill `cat /var/run/rinetd.pid`
# 使用其他配置檔案
rinetd -c /opt/rinetd.conf
我們在上面使用的埠,記得在防火牆新增放行規則。
iptables
和 Firewalld
進行埠轉發的話我們後面進行補充。