我有一个用例,我想控制(和审计)在 Ubuntu 台式电脑上运行的应用程序的所有网络访问。Squid 看起来是个不错的开始 - 我已经安装并配置了它。当 Web 浏览器配置为使用 localhost:3128 上的代理时,我得到了我想要的审计和访问控制。
问题在于,任何未配置为专门使用 localhost:3128 作为代理的应用程序仍然可以与我的 LAN 和互联网正常通信。
我发现各种“操作指南”文档详细说明如何配置具有多个以太网卡的主机以充当网关 - 并使用 Squid 作为强制代理...但我的配置略有不同。我想确保 squid 是唯一通过网络通信的应用程序。有没有一种简单的方法可以在具有一个以太网连接的单个主机上阻止除通过 squid 之外的所有网络访问(入站和出站 - 甚至包括 DNS - 等)?
答案1
你可以简单地用防火墙设置规则来拒绝除 3128 之外的所有传出端口。确保你已经ufw
安装了(sudo apt-get install ufw
如果不是), 然后:
sudo ufw deny out to any # deny all outgoing addresses
sudo ufw allow out from any to 127.0.0.1 port 3128 proto udp # allow the single outgoing port
sudo ufw allow out from any to 127.0.0.1 port 3128 proto tcp
sudo ufw allow out from any port 3128 to any # outgoing from any IP:3128 to any address (to allow packets of squid)
你不能确定所有现有的应用程序都会使用代理,原因很简单,有些应用程序可能甚至没有考虑代理。(代理不能透明使用,应用程序必须特别注意代理),但联邦快递规则将确保其数据包不会从其他端口挤进来。并且不要忘记设置 http(s)_proxy 变量进入/etc/environment
。