在實際的生產環境中,我們為了安全性,會將一些重要的服務(數據庫服務)不開放外網訪問,但是當我們某個時刻由於一些特殊需求,需要進行外網訪問的時候,我們可以通過端口轉發來實現。通過一台和與服務可以互相訪問的主機,通過該主機進行端口轉發。
- 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
進行端口轉發的話我們后面進行補充。