0x00 背景
端口轉發是一個常用的功能,不管是在服務器運維還是在***領域,都需要用到。在近期遇到一個問題就是一個服務的端口不能進行配置,但是由於出口硬件防火牆的原因,為了不修改硬件防火牆的策略,所以只能在本地做端口轉發。因此嘗試和尋找了以下的幾種方法。
0x01 iptables和firewall
iptables
iptables是我第一個想到的方法,但卻是最后一個嘗試的,因為我對iptables並不熟悉。
1、打開IP轉發功能。
linux的IP轉發功能是默認關閉的,而且根據很多安全加固策略以及安全基線的要求,IP轉發功能必須關閉,所以需要先打開IP轉發。需要長期使用的話則寫入到sysctl的配置文件中。
1
2
|
echo
1 >
/proc/sys/net/ipv4/ip_forward
sysctl -w
/etc/sysctl
.conf
|
2、配置iptables,在PERROUTING鏈中做DNAT。需要長期使用的話需要注意保存配置。
1
2
|
iptables -t nat -A PEROUTING -p tcp -i eth0 --dport 22222 -j DNAT --to x.x.x.x:22
service iptables save
|
遠程端口轉發的還可以參考這里:
http://www.jb51.net/LINUXjishu/401922.html
firewall
firewall是CentOS 7上替代iptables的服務。使用起來比iptables要稍微簡單一點,直接使用firewall的端口轉發就能實現。firewall我也不熟悉,參考了http://www.centoscn.com/CentOS/Intermediate/2015/0313/4879.html
1、打開端口轉發功能
1
|
firewall-cmd --zone=public --add-forward-port=port=22222:proto=tcp:toport=22
|
在不增加toaddr的情況下,默認就是轉發到自己的IP上。
如果需要長期使用則增加--permanent加入到永久規則即可。
0x02 rinetd端口映射轉發工具
1、下載並解壓rinetd
1
|
wget
|
2、安裝rinetd
1
2
|
make
make
install
|
安裝過程可能遇到man目錄不存在的問題,手動創建即可完成安裝。
3、創建/etc/rinetd.conf並寫入轉發規則
配置文件中的規則格式為:
[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口
使用iptables的命令要更直接一些。但寫入規則的時候需要注意源端口不能被其他服務占用,並且也需要在iptables上打開。
4、運行rinetd
運行后即可發現,rinetd已經綁定了指定的端口。
如果需要長期使用,把命令寫入開機啟動即可。
更多rinetd的參考:https://boutell.com/rinetd/和http://blog.csdn.net/paulluo0739/article/details/7023711
0x03 lcx端口轉發
lcx是***中經常用的工具,使用簡單。但一般用於Windows,由於沒有shell版本的lcx,編譯、安裝等環節較為麻煩,因此比較少見。因此,lcx雖然是我第一個想到的實現方法,但卻是實現的最麻煩的。
1、網上找到代碼見附件
來源和參考:http://www.oldrss.com/article/hacker-00205.html
2、gcc編譯
1
|
gcc lcx.c -o lcx
|
CentOS6.X & CentOS 7.0測試可以編譯成功。
3、運行lcx
使用方式較為簡單,根據提示運行即可。
1
|
lcx -m 1 -h1 0.0.0.0 -p1 22222 -h2 127.0.0.1 -p2 22 -log
/tmp/lcx
.log
|
如果服務連接較多,建議不要記錄日志,因為日志中會記錄傳輸的所有數據,這樣將會占用大量的空間,並且也可能會影響傳輸。
如果需要長期使用,設置開機啟動並置入后台即可。
0x04 總結
整體上來看,iptables和firewall是最簡單的方案,不需要安裝任何的程序和服務,系統自帶。rinetd和lcx也都受到iptables和firewall的限制,必須要其打開端口。