Linux - 本地机器上的 Squid 控制传出流量

Linux - 本地机器上的 Squid 控制传出流量

我正在尝试在我的计算机上设置 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

相关内容