iptables 层面如何做到判断 header 来做反向代理?

2021-05-08 21:53:27 +08:00
 herozzm

正常情况下,可以用 iptables -t nat -A PREROUTING ... 来实现反向代理的,但是这个层面是无法判断 header 的,那么有其他办法吗?

需求是只允许带有某个 header 的请求反向代理成功,其他一律拒绝

3911 次点击
所在节点    Linux
27 条回复
LGA1150
2021-05-09 17:24:52 +08:00
iptables nat 表只能匹配到新连接的包,对于 TCP 来说就是 SYN,看不到应用层的数据。

你可能要找的是 ipvs
Lemeng
2021-05-09 17:35:26 +08:00
也是来学习的
wangritian
2021-05-09 17:44:40 +08:00
@PolarBears 有可能,只允许定制的客户端访问这些端口

@herozzm 一个服务这样做是正常的,几百个就应该在 7 层管理了,除非是特殊需求
falcon05
2021-05-09 17:53:41 +08:00
http 明文传输是肯定是可以的,好像以前做过,https 理论上也可以,需要读取私钥或者信任证书,类似 Wireshark 的抓包。但我觉得还是应该在应用层解决比较好
xenme
2021-05-09 17:59:19 +08:00
直接 iptables 接管所有流量转发到 nginx,然后再 nginx 处理呗。透明代理现在都是这种思路
falcon05
2021-05-09 18:07:06 +08:00
哦,以前做的是拦截某个 header 的 http 请求,比如 X-Forwarded-For

iptables -I INPUT 1 -p tcp --dport 80 -m string --algo bm --string 'X-Forwarded-For:' -j DROP

firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 10 -p tcp --dport 80 -m string --algo bm --string 'X-Forwarded-For:' -j DROP
julyclyde
2021-05-10 11:28:21 +08:00
你都明知道不存在了还问啥啊
用-m match 处理并不能保证结果正确

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX