我对iptables的一些体会
时间:2006-08-01 来源:txkss
利用iptables做squid的透明代理时候,发现一些问题
我把自己的理解写出来,大家看一下对不对
一般做透明代理的时候,squid和网关是同一台机器,一般这样做
iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 80 -j DNAT --to localhost:3128
或者
iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 80 -j REDIRECT --to 3128
但是,如果对内网网段没有在filter表里打开对本机TCP/3128的端口,那么透明代理无法实现
我分析原因如下
DNAT和REDIRECT只相当于网关拦截到数据包,然后转交给新的IP或者端口
而转交之后,实际内网的电脑是直接与DNAT或者REDIRECT之后的地址、端口进行通讯的,因此如果做透明代理,必须打开squid那台机器对内网网段的TCP/3128
因为squid和网关是在同一个机器,所以该机器必须打开对内网网段的TCP/3128
另外,如果只做NAT,而不需要设置squid的透明代理,我们可以忽略filter表的INPUT和OUTPUT链,因为这两个链是针对使用iptables的机器自己而言的,是“出入”自己的数据包,而不是“经过”的数据包,因此即使禁止了INPUT和OUTPUT链,也不影响NAT
但是,如果做了squid,就必须打开INPUT的TCP/3128和OUTPUT链,因为squid是一个代理机制,他首先要收到客户机的HTTP请求,这个过程要用到INPUT到自己内部,然后squid再向外访问客户要访问的目的地址,这个过程又要OUTPUT
因此,结论就是
1、只做squid的机器,FILTER表的INPUT、OUTPUT链必须要合理设置,不能是DROP
2、只做NAT的机器,只需设置表的POSTROUTING链,而FILTER表的FORWARD链不能是DROP
我把自己的理解写出来,大家看一下对不对
一般做透明代理的时候,squid和网关是同一台机器,一般这样做
iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 80 -j DNAT --to localhost:3128
或者
iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 80 -j REDIRECT --to 3128
但是,如果对内网网段没有在filter表里打开对本机TCP/3128的端口,那么透明代理无法实现
我分析原因如下
DNAT和REDIRECT只相当于网关拦截到数据包,然后转交给新的IP或者端口
而转交之后,实际内网的电脑是直接与DNAT或者REDIRECT之后的地址、端口进行通讯的,因此如果做透明代理,必须打开squid那台机器对内网网段的TCP/3128
因为squid和网关是在同一个机器,所以该机器必须打开对内网网段的TCP/3128
另外,如果只做NAT,而不需要设置squid的透明代理,我们可以忽略filter表的INPUT和OUTPUT链,因为这两个链是针对使用iptables的机器自己而言的,是“出入”自己的数据包,而不是“经过”的数据包,因此即使禁止了INPUT和OUTPUT链,也不影响NAT
但是,如果做了squid,就必须打开INPUT的TCP/3128和OUTPUT链,因为squid是一个代理机制,他首先要收到客户机的HTTP请求,这个过程要用到INPUT到自己内部,然后squid再向外访问客户要访问的目的地址,这个过程又要OUTPUT
因此,结论就是
1、只做squid的机器,FILTER表的INPUT、OUTPUT链必须要合理设置,不能是DROP
2、只做NAT的机器,只需设置表的POSTROUTING链,而FILTER表的FORWARD链不能是DROP
相关阅读 更多 +