失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > iptables:tproxy做透明代理

iptables:tproxy做透明代理

时间:2023-09-03 06:58:49

相关推荐

iptables:tproxy做透明代理

什么是透明代理

客户端向真实服务器发起连接,代理机冒充服务器与客户端建立连接,并以客户端ip与真实服务器建立连接进行代理转发。因此对于客户端与服务器来说,代理机都是透明的。

如何建立透明代理

本地socket捕获数据包

nat方式

iptables -t nat -N MY_TCP #在nat表上新建名为MY_TCP自定义链

iptables -t nat -p tcp -A MY_TCP -j REDIRECT --to-ports 8081 #将进入MY_TCP链的数据包端口重定向到8081上

iptables -t nat -N MYNAT #在nat表上新建名为MYNAT自定义链

iptables -t nat -A PREROUTING -p tcp -j MYNAT #将MYNAT加入到PREROUTING链后

iptables -t nat -A MYNAT -p tcp -m multiport --dports 80 -j MY_TCP #在端口为80时执行MY_TCP链

nat方式在代理机上使用netstat查看,看到的目标地址将是本机socket侦听的地址。而下面的tproxy不会改变服务端地址。

tproxy方式

iptables -t mangle -N DIVERT #在nat表上新建名为DIVERT自定义链

iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j DIVERT #已建立的socket且被tproxy标记过的数据包执行DIVERT

iptables -t mangle -A DIVERT -j MARK --set-xmark 0x10000000/0xf0000000 #进入DIVERT设置标记

iptables -t mangle -A DIVERT -j ACCEPT

iptables -t mangle -N MY_TCP

iptables -t mangle -p tcp -A MY_TCP -j TPROXY --on-port 8081 --tproxy-mark 0x10000000/0xf0000000

#MY_TCP执行TPROXY转发为8081端口并进行标记

iptables -t mangle -A MY_TCP -j ACCEPT

iptables -t mangle -N MYMANGLE

iptables -t mangle -A PREROUTING -p tcp -j MYMANGLE #MYMANGLE链加入到PREROUTING

iptables -t mangle -A MYMANGLE -p tcp -m multiport --dports 80 -j MY_TCP #80端口的包执行MY_TCP

ip rule add fwmark 0x10000000/0xf0000000 table 200 pref 200 #对标记过的数据包执行序号为200的规则

ip route add local default dev lo table 200 #200规则:数据包发送到本地回环

更推荐tproxy做透明代理

注:tproxy对于内核以及iptables版本有一定要求,需要先查阅是否支持

为socket设置IP_TRANSPARENT选项

在设置完iptables规则之后,还须为socket设置IP_TRANSPARENT选项。

设置之后可以bind一个不属于本机的IP地址,作为客户端,它可以使用一个不属于本机地址的IP地址作为源IP发起连接,作为服务端,它可以侦听在一个不属于本机的IP地址上,而这正是透明代理所必须的。面对真实的客户端,透明代理明知道目标地址不是自己,却还是要接受连接,对于真实的服务器,透明代理明显不是真实的客户端,却还要使用真实客户端的地址发起连接。

setsockopt(fd,SOL_IP, TRANSPARENT,&opt,sizeof(opt));

setsockopt之后,作为代理服务器bind真实服务器addr,作为代理客户端bind真实客户端addr。

如果觉得《iptables:tproxy做透明代理》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。