这篇文章配置端口转发主要的应用场景为:本地虚拟机Kali
的metasploit
在攻击成功时,需要获取外网主机的反弹shell
。因为虚拟机kali
为本地局域网,外网无法直接访问。需要在VPS
上做端口转发,让外网主机先访问VPS
某个端口,然后VPS
的端口转发到本地虚拟机kali
的某个端口。
环境预设
虚拟机Kali
:位于本地,NAT
模式,外网无法访问
外网VPS
:公网独立IP
,Ubuntu 20.04
第一种办法:nftables+ssh
远程端口转发
说是iptables
在ubuntu 20.04
已经默认不再使用,推荐nftables
。
1 | systemctl start nftables |
ssh
远程端口转发参照第二种办法中相关设置。
第二种办法:rinetd+ssh
远程端口转发
- 远程
VPS
安装rinetd
1 | apt install rinetd |
- 配置rinetd(
/etc/rinetd.conf
)
1 | # |
这里配置的意思是:0.0.0.0
表示本机绑定所有可用地址,将所有发往本机5555
端口的请求转发到localhost
的4444
端口。
- 运行
rinetd
1 | rinetd -c /etc/rinetd.conf |
ssh
远程端口转发的时候,需要注意几点:
sshd_config
里要打开AllowTcpForwarding
选项,否则-R
远程端口转发会失败。默认转发到远程主机上的端口绑定的是
127.0.0.1
,如要绑定0.0.0.0
需要打开sshd_config
里的GatewayPorts
选项。用
SSH
实现的内网穿透长时间没有数据传输会断掉,需要进行一些配置,让客户端和服务端保持连接:方法1.安装
autossh
,这个软件能够自动重连在虚拟机
kali
产生公钥和私钥1
2
3
4ssh-keygen
...(一直按Enter,最后在~/.ssh/下生成密钥)
ls ~/.ssh/
id_rsa id_rsa.pub known_hosts复制
kali
生成的id_rsa.pub
公钥到外网VPS
主机上,并将内容加入到~/.ssh/authorized_keys
中1
cat id_rsa.pub >> ~/.ssh/authorized_keys
autossh
连接,其中,-M
参数指定了autossh
监听的端口,注意这里与其转发的端口要区分开。另外,-N
表示禁止执行远程命令,-T
表示禁止分配伪终端,这两个参数结合起来表示SSH
连接不允许用户交互执行远程操作,只能用来传数据,从而保证了远程主机的安全。1
autossh -M 6666 -NTR 0.0.0.0:4444:192.168.13.4:4444 root@vps-ip -p vps-port
方法2.让
SSH
客户端定时发送消息保持连接永久方案:修改
SSH
客户端配置文件。在Windows
上,这个文件位于<用户目录>\.ssh\config
,默认是没有这个配置文件的,需要手动创建一个。内容如下:1
2Host *
ServerAliveInterval 240一次性方案:启动
SSH
客户端时添加参数:-o ServerAliveInterval=240
方法3.让
SSH
服务端定时发送消息保持连接。修改/etc/ssh/sshd_config
,添加下面两行:1
2ServerAliveInterval 30
ServerAliveCountMax 60
- 本地
kali
执行如下命令:
1 | ssh -fNTR 4444:192.168.91.138:4444 -p vps-port root@vps-ip |
执行完之后,退出rinetd
的命令:(不要仅退出rinetd -c /etc/rinetd.conf
)
1 | pkill rinetd |
第三种办法:frp
分别在
vps
和虚拟机kali
上下载对应版本的frpvps
上配置服务端(frps.ini
)
1 | [common] |
- 配置完启动服务端
1 | ./frps -c frps.ini |
- 虚拟机
kali
配置客户端
1 | [common] |
- 配置完启动客户端
1 | ./frpc -c frpc.ini |
客户端通过vps
的ip
和7000
端口建立连接,把本地的4444
端口数据传递给公网的5555
端口。
参考链接: