这篇文章配置端口转发主要的应用场景为:本地虚拟机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端口。
参考链接: