我正在尝试在我的计算机上设置 squid,以便仅控制来自同一台计算机的传出流量。如果我的理解正确的话,squid 在大多数 Linux 发行版上都以用户“squid”的身份运行(我的是 Fedora,如果重要的话?)。
我已经设置 iptables 来丢弃除来自 uid 0 和 uid 23(root 和 squid)的数据包之外的所有传出的数据包。
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -m owner --uid-owner 0 -j ACCEPT
-A OUTPUT -m owner --uid-owner 23 -j ACCEPT
-A OUTPUT -j DROP
COMMIT
然后,我希望必须手动将 Squid 代理信息输入到每个本地用户帐户的浏览器中(因此我认为我不需要透明设置)。如果可能的话,我希望有一个用户/密码才能连接到 Squid,这样可以防止用户通过 Squid 代理以外的任何方式访问互联网?
我当前的 squid.conf 如下,但它根本不起作用,并且显然不包含用户/密码要求:
acl ssl_ports port 443
acl safe_ports port 80 # http
acl safe_ports port 21 # ftp
acl safe_ports port 443 # https
acl safe_ports port 70 # gopher
acl safe_ports port 210 # wais
acl safe_ports port 1025-65535 # unregistered ports
acl safe_ports port 280 # http-mgmt
acl safe_ports port 488 # gss-http
acl safe_ports port 591 # filemaker
acl safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !safe_ports
http_access deny CONNECT !ssl_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .
我所尝试做的事情是否可以实现?我是否以正确的方式进行?
我对 iptables 所做的操作会起作用吗?
我意识到这不是我要在 10 分钟内学会正确设置的东西,因此关于如何实现这一点的任何帮助/指南指针甚至替代解决方案都值得欢迎吗?
答案1
您可能需要至少为其他程序开放 DNS 的访问权限。
Squid 确实有一个身份验证模块,但您不需要它。由于只有 Squid 可以访问网络,因此所有用户都必须使用它。
检查用于设置代理的环境变量并全局配置它们。您http_proxy
至少应该设置。
有一种wpad.dat
配置代理的机制,但我没有按照您的意图使用它。
我想你会发现很多服务使用未列出的端口,而且浏览体验不会很好。
由于您似乎没有阻止任何网站,因此使用限制端口可能会更简单iptables
。