通过几个简单的工具进行下实战, 模拟下代理的访问路径,环境如下
测试环境
目标服务器: 4.ipw.cn
代理机器: lflish.cloud(云机器)
通过本机请求4.ipw.cn,显示当前出口IP是 111.198.1.1
#本机->4.ipw.cn
C:\Users\Administrator>curl 4.ipw.cn
111.198.1.1
通过代理服务器请求4.ipw.cn,显示当前出口IP是101.43.194.10
#代理服务器->4.ipw.cn
[root@centos]$ curl 4.ipw.cn
101.43.194.10
ncat实战
nc号称网络界的瑞士军刀,平时测试网络问题很常用,接下来测试通过nc进行转发客户端请求,实现以下路径
本机->flish.cloud->4.ipw.cn
代理服务器配置如下:
###监听本机7000端口,将数据转发到 4.ipw.cn的80端口
ncat --sh-exec "ncat 4.ipw.cn 80" -l 7000 --keep-open
通过curl访问
C:\Users\Administrator>curl lflish.cloud:7000
101.43.194.10
这里直接访问代理服务器的7000端口,然后代理服务器会转发数据到目标机,并返回数据,为了方便区别特意用了不同的端口。
如果本机配置了hosts,并且代理服务器是使用80端口,那么结果会如下
C:\Users\Administrator>curl 4.ipw.cn
101.43.194.10
这里nc只是单纯的数据转发,达到了隐藏源IP的目的,也即是骇客口中的跳板机, 但是这里客户端->到代理服务器数据未进行加解,抓包7000端口与80端口,发现数据完全一样。
iptables实战
linux通过iptables命令下发规则到内核层,当前使用的是CentOS 7.9做测试,以下配置命令总结成了脚本,方便后续使用,有需求的同学,直接修改本机IP与函数参数即可开箱即用,好多公司也采用的类似解决方案,曾经给客户(国际专线)也提供过类似脚本。
## 下边代码尚未进行测试,后续会更新(因为这次使用了80端口测试,抓包发现运营商拦截了请求,网站目前正在备案中)
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -F
#本机IP地址
LOCAL=10.0.24.7
#基于端口进行转发
function add_dnat_dip()
{
PORT=$1
DIP=$2
iptables -t nat -I PREROUTING --dst ${LOCAL} -p tcp --dport ${PORT} -j DNAT --to-destination ${DIP}
iptables -t nat -I POSTROUTING -p tcp --dport ${PORT} -j SNAT --to-source ${LOCAL}
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${PORT} -j ACCEPT
}
#基于Ip+port进行转发
function add_dnat_dst()
{
PORT=$1
DIP=$2
DPORT=$3
iptables -t nat -I PREROUTING --dst ${LOCAL} -p tcp --dport ${PORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -t nat -I POSTROUTING -p tcp --dport ${DPORT} -j SNAT --to-source ${LOCAL}
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${PORT} -j ACCEPT
}
#add_port_2_dip 80 114.132.191.12
add_dnat_dst 7000 114.132.191.12 80
显示结果,应该是跟NC一样的,这里总结下nc与iptables区别。
总结:
chatGPT: 当涉及到端口转发时,iptables 和 nc(netcat)是两种不同的实现方式,各自有其特点和用途。
iptables 端口转发:
- iptables 是一个在 Linux 上用于配置防火墙规则的工具,它可以进行网络地址转换(NAT)以及端口转发等功能。
- 通过 iptables 进行端口转发是在系统级别进行的,可以影响整个系统的网络流量控制。
- iptables 可以实现四层(传输层)的端口转发,可以基于源地址、目标地址、源端口、目标端口等信息进行转发规则的配置。
nc 端口转发:
- nc(netcat)是一个网络工具,用于在网络上读写数据,包括建立连接、传输数据等功能。
- 通过 nc 进行端口转发是在应用层进行的,通常用于临时性的、针对特定应用的端口转发需求。
- nc 端口转发是在命令行中执行的,只会影响 nc 所启动的端口转发过程,不会影响系统的其他网络流量。
使用场景
- iptables 适用于系统级别的网络流量控制,而 nc 更适用于临时性的、应用层的端口转发需求。
- iptables 实现的端口转发作用于整个系统的网络流量,而 nc 只会影响 nc 命令所启动的端口转发过程。
- iptables 可以实现四层的端口转发,而 nc 更多地是应用层的端口转发工具。