SSH转发和iptables端口转发
SSH端口转发简介
SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做”隧道“(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet ,SMTP ,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境许中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够将通过将TCP用端口转发来使用SSH进行通讯。
SSH端口转发的两大功能:
- 加密SSH Client端至SSH Server端之间的通讯数据。
- 突破防火墙的简直完成一些之前无法建立的TCP连接。
SSH本地SOCKS5代理
1 | ssh -qTfnN -D 7777 username@remotehost |
1 | 参数说明: |
浏览器开启代理:
IP地址已经发生变化:
SSH本地转发
场景:
- 本机能与中间服务器互通
- 中间服务器能与目标机器互通,中间服务器已拿到目标机器权限
- 本地不能直接访问目标机器
- 目标机器不出网
- 目的:本机能访问目标机器
命令:
1 | ssh -L localport:targethost:targetport username@sshserver |
1 | localport 本机开启的端口 |
结果:
此时,在在本机访问localport就可以访问目标主机的targetport了
SSH远程转发
反向连接的一种,可以穿透内网防火墙,在内网中比较好用
1 | ssh -R sshserverport:targethost:targetport username@sshserver |
1 | sshserverpor 中间服务器的端口号 |
开启远程需要更改配置
1 | sudo vim /etc/ssh/sshd_config |
1 | sudo /etc/ssh/sshd_config restart #重启SSH |
因为是反向连接,所以肯定需要在目标机器上执行命令
在目标机器上执行命令:
1 | ssh -R 8899:10.10.10.132:80 test@10.10.10.135 |
现在任何机器,只要访问10.10.10.13这台中间服务器的8899端口,就相当于访问了不出网的内网10.10.10.132机器的80端口
iptables端口转发
基础配置
修改内核文件实现端口转发
方法1:
1 | 1.编辑sysctl配置文件 vim /etc/sysctl.conf |
方法2: 直接sysctl修改
1 | 使用sysctl -w net.ipv4.ip_forward=1 |
本地端口转发
REDIRECT模式是防火墙所在的机子内部转发包或流到另一个端口,也就是所有接收的包只转发给本地端口。
将本机的 7777 端口转发到 6666 端口:
1 | iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666 |
远程端口转发
通过 1.168 的 6666 端口访问 1.8 的 7777 端口,在 1.168 上设置:
1 | sysctl -w net.ipv4.ip_forward=1 |
删除该端口转发
查看当前iptables 的 nat 表的所有规则:(不用 -t 指定表名默认的是指 filter 表)
1 | iptables -t nat -nL --line |
删除指定表的指定链上的规则, -D 并指定序号即可。
1 | iptables -t nat -D PREROUTING 1 |
参考: