在實際的生產環境中,咱們爲了安全性,會將一些重要的服務(數據庫服務)不開放外網訪問,可是當咱們某個時刻因爲一些特殊需求,須要進行外網訪問的時候,咱們能夠經過端口轉發來實現。經過一臺和與服務能夠互相訪問的主機,經過該主機進行端口轉發。css
- Windows 端口轉發
- Linux 端口轉發
1、Windows 端口轉發
windows 主要是經過 netsh
進行端口轉發。html
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
。linux
注意: 下面的命令須要用管理員執行。nginx
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
2、Linux 端口轉發
一、rinetd
簡介
官方文檔 :https://boutell.com/rinetd/shell
下載 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
平臺上運行。windows
安裝:
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
配置文件
配置轉發安全
配置文件的轉發書寫規則,能夠配置多個轉發。bash
bindaddress bindport connectaddress connectport
示例:markdown
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
進行端口轉發的話咱們後面進行補充。