为啥这个 iptables 的配置无法工作?

2015-06-18 11:57:23 +08:00
 raincious

故事是我在配置一个OCServ服务器,然后为了安全,当然要走个HTTP Proxy,否则分享出去被人用来下BT就会有麻烦了。

然后,HTTP Proxy配置是正常的,通过

wget www.google.com -e use_proxy=yes -e http_proxy=http://127.0.0.1:3128

访问没问题

VPN服务器也是正常的,可以正常连接和访问。

但是一旦加上下面这句,80端口就超时无法打开了,同时Nginx(HTTP Proxy)日志里没有提到有访问记录(可能根本没链接到嘛),其他端口倒是仍然正常(当然

iptables -t nat -A PREROUTING -s 192.168.251.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

然后我改成

iptables -t nat -A PREROUTING -i vpns+ -p tcp --dport 80 -j REDIRECT --to-port 3128

也不行。

整个配置在这里:

#!/bin/bash

# iptables
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport (SSH端口,不给你看) -j ACCEPT

# ocserv
iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp --dport 443 -j ACCEPT

iptables -t filter -A FORWARD -s 192.168.251.0/24 -d 192.168.251.0/24 -j DROP
iptables -t filter -A FORWARD -d 192.168.251.0/24 -j ACCEPT

iptables -t nat -A PREROUTING -s 192.168.251.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128 (就是这神秘的一句

iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 3128 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p udp --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 21 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 443 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 993 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 465 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp -j REJECT --reject-with tcp-reset
iptables -t filter -A FORWARD -s 192.168.251.0/24 -j DROP

iptables -t nat -A POSTROUTING -s 192.168.251.0/24 -j MASQUERADE

/opt/ocserv/sbin/ocserv -c /opt/ocserv/etc/config

求解,感谢!
(俺好菜啊,怎么办)

2722 次点击
所在节点    服务器
6 条回复
ryd994
2015-06-18 13:31:28 +08:00
squid 配置里加了intercept没?http://www.squid-cache.org/Doc/config/http_port/
ryd994
2015-06-18 13:36:58 +08:00
3128是谁在listen?
是bind0.0.0.0还是只bind本地?
bind全部interface试试,如果行的话再做讨论。

另外iptables filter表有打开3128端口么?redirect之后就不是允许80而是允许3128了。filter表在nat表之后
elyamen
2015-06-18 13:37:51 +08:00
破头像害我点了两次
iCodex
2015-06-18 14:18:07 +08:00
iptables -t nat -A => iptables -t nat -I
raincious
2015-06-18 14:26:00 +08:00
@ryd994 好吧,我做了测试,貌似如果直接

iptables -A INPUT -s 192.168.251.0/24 -p tcp --dport 3128 -j ACCEPT,

然后让Nginx听全部端口的话就可以连接了

再然后我看了一眼Nginx的日志:

192.168.251.46 - - [18/Jun/2015:02:16:35 -0400] "GET /m/gne/suggest/v2?q=http%3A%2F%2Fportquiz.net%2Fddd.avi&hl=zh-CN&app=iss&appv=141338691&platform=android&pff=1&feeds=qs,ns HTTP/1.1" 404 151 "-" "Android/1.0 (umts_everest I.7.1-45)"

192.168.251.46....

(唔脸,原来真相是这样……
ryd994
2015-06-18 20:43:05 +08:00
@raincious 是这样的
某些系统内核禁止其他端口转发到lo,而且你也没有redirect 到127.0.0.1

源是外面的IP并没有错
DNAT工作方法就是这样:直接改包头

其实如果你如果是劫持,而且网站比较多的话还是建议squid比较方便

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

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

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

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

© 2021 V2EX