netfilter和squid配合创建透明代理的问题讨论

29 篇文章 0 订阅

original url:

http://www.oschina.net/question/17_6371

最近常在网上看到很多朋友假设透明代理碰到问题,一个常见的问题是: 

1.IPtables(netfilter)以配置好,Squid也配置好了; 
2.不通过Squid可以正常访问网页; 
3.或者清空iptables规则,在客户端配置代理也能访问; 
4.一旦同时启用iptables,Squid,同时把80的流量转发到代理端口时就出现问题,网页无法访问;而其他的应用正常. 

为什么?其实我想可能是很多朋友对IPtables还没有个透彻的理解,下面就和大家一起讨论一下: 
一、iptables和netfilter的区别 
iptables使用来配置netfilter的工具,只是一个人机界面,真正工作时是netfilter在根据规则来对流量进行过滤。 

二、流量如何通过netfilter? 
不同的流量,由于其目标地址的不同,其穿过的netfilter链也是不同的,基本上可以分为下面三种情况: 
1.输入流:目标地址为本机的数据包 
2.输出流:源地址为本机的数据包 
3.转发流:目标和源均不是本机,但需要本机的转发 

输入流的链路径: 
线路->;接口->;mangle.PREROUTING->;nat.PREROUTING->;[routing]->;mangle.INPUT->;filter.INPUT->;[本地处理] 

输出流的链路径: 
应用程序->;[routing]->;mangle.OUTPUT->;nat.OUTPUT->;filter.OUTPUT->;mangle.POSTROUTING->;nat.POSTROUTING->;接口->;线路 

转发流的链路径: 
线路->;接口->;mangle.PREROUTING->;nat.PREROUTING->;[routing]->;mangle.FORWARD->;filter.FORWARD->;mangle.POSTROUTING->;nat.POSTROUTING->;接口->;线路 

[routing]指本地地路由决策。 

以上为www.netfilter.org网站对IP数据包如何流过linux路由器地描述,由于本人对以前版本地IPchain及IPfw了解不多,因此这里仅限于对netfilter/iptables的讨论。 

从上面的路径链可以看到, 三种数据流穿过的规则链是有区别的 。下面就让我们讨论一下iptables应该如何配合squid. 

三、直接转发与使用SQUID的区别 
不管是直接转发,还是通过NAT接入internet,数据包都是在第三层进行处理,此时数据流是[u] 转发流 [/u],不会穿过filter.INPUT和filter.OUTPUT链。 
而squid是在[u] 应用层 [/u]来完成代理工作的,它将介入internet信息的访问过程,分别和内部客户机、外部服务器建立数据连接,因此 数据流将是输入流和输出流 也必将穿越filter.INPUT和filter.OUTPUT链。因此,要让Squid正常为客户提供代理服务,我们必须在INPUT和OUTPUT链中增加相应设置。而很多时候我们都把INPUT和OUTPUT链的缺省规则设置为DROP。 
这就是出现以上故障现象的主要原因。 

看到这里我想大多数朋友应该知道如何来配置INPUT和OUTPUT规则链了。实际上在这个链中只要具备了满足如下规则的条目,就可以达到我们的目的。 
1.允许内部机器到本机代理端口的连接; 
2.允许本机到外部世界的连接。 

典型的,在常用配置中(缺省的链策略为DROP)增加规则如下: 
iptables -A INPUT -i $INTERNAL -p tcp --dport 3128 -j ACCEPT 
iptables -A INPUT -o $INTERNAL -m state --state RELATIVE,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i $INTERNAL -m state --state RELATIVE,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o $EXTERNAL -m state --state NEW,RELATIVE,ESTABLISHED -j ACCEPT 

以上为本人查阅相关资料并分析和总结所得,如有错误的地方,欢迎大家指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值