我们的办公室有 RHEL 5.0 squid 代理。
我们的 LAN 是 172.20.12.0 /24 n/w。代理 ip 是 172.20.12.4 /24。
我想通过代理共享互联网。
最重要的是:
- 我想授予两个 IP 172.20.12.8 和 172.20.12.9 完全访问权限以访问互联网
- 所有用户都应该在浏览器中设置代理地址才能上网,如果浏览器中没有代理,互联网就会被阻止。
有人能帮我看看 iptables 里该写些什么吗?
答案1
如果您想强制某些 IP 范围通过代理,基本上您需要阻止端口 80(如果您使用 HTTPS,则为 443)上的传出 TCP 流量,这些流量源自面向 Internet 的接口上的 172.20.12.0/24。这样,如果他们尝试不使用代理,连接就会失败。
你要确保在该规则之前加上三个例外:
- 一个用于代理本身,应允许来自 172.20.12.4 的流量在 TCP 端口 80/443 上发起流量
- 但是,对于要在该规则之前跳过代理的 IP 地址,有两个。
以下是您要添加到iptables
脚本中的内容,或者您可以直接执行的命令。请记住三件事:
- 您可能需要查看现有规则,以确保先前的规则不会接受您想要阻止的流量
- 这假设您的
OUTPUT
策略是DROP
(即未明确ACCEPT
指定的流量将被DROP
过滤)。如果不是,您需要在底部再添加一条规则,以丢弃来自 172.20.12.0/24 并尝试通过 TCP 80/443 传出的所有其他流量。 $OUT_IFACE
您的互联网或面向上游的接口是
# accepts all traffic outgoing on TCP 80/443 from 172.20.12.8
/sbin/iptables -A OUTPUT --protocol TCP --source 172.20.12.8/24 --match -multi-port --destination-ports 80,443 --out-interface $OUT_IFACE --jump ACCEPT
# accepts all traffic outgoing on TCP 80/443 from 172.20.12.9
/sbin/iptables -A OUTPUT --protocol TCP --source 172.20.12.9/24 --match -multi-port --destination-ports 80,443 --out-interface $OUT_IFACE --jump ACCEPT
# accepts all traffic outgoing on TCP 80/443 NOT going to 172.20.12.4
/sbin/iptables -A OUTPUT --protocol TCP --source 0/0 --destination 172.20.12.4 --match -multi-port --destination-ports 80,443 --out-interface $OUT_IFACE --jump ACCEPT
# assuming a policy of DROP everything not obeying the above rules shoud die. You could add a LOG target here to log any incidents.
顺便说一句,我已经有一段时间没有玩过 Squid 了,但我认为它确实有能力对用户进行身份验证,并可能对此类用户应用不同的规则集(包括不针对某些用户制定规则 - 但我认为你Via:
的 HTTP 流中仍然会注入一个标头,表明你正在使用代理)。