我在 Ubuntu 20.04 上运行 Squid 5.2。我将这台机器设置为我孩子们的网络过滤器。代理功能似乎工作正常。我非常确定至少有一个孩子能够弄清楚如何删除计算机上的代理设置,因此我打算通过服务器路由流量并让 Squid 以这种方式过滤它。
我设置了数据包转发并且流量通过得很好。我可以查看测试网页等。但是,当我修改 PREROUTING 语句以将端口 80 流量重定向到 3128 时,我在 Web 浏览器中收到一条错误,指出“无效 URL”。
我的鱿鱼配置如下:
access_log daemon:/var/log/squid/access.log
acl localnet src 192.168.1.0/24
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
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
error_directory /usr/local/squid/share/errors
acl me src 192.168.1.33
acl kids src 192.168.1.215 192.168.1.253
acl ksm dstdomain "/usr/local/squid/etc/kidssocialmedia.txt
acl chat dstdomain "/usr/local/squid/etc/chatdomains.txt"
acl porn dstdomain "/usr/local/squid/etc/porndomains.txt"
acl webmail dstdomain "/usr/local/squid/etc/webmaildomains.txt"
deny_info ERR_TROLL_KIDS kids ksm
http_reply_access deny kids ksm
http_access deny kids ksm
deny_info ERR_TROLL_PORN kids porn
http_reply_access deny kids porn
http_access deny kids porn
deny_info ERR_TROLL_WEBMAIL kids webmail
http_reply_access deny kids webmail
http_access deny kids webmail
deny_info ERR_TROLL_CHAT kids chat
http_reply_access deny kids chat
http_access deny kids chat
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128 ssl-bump cert=/usr/local/squid/etc/ssl_cert/myCA.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/logs/ssl_db -M 4MB
coredump_dir /usr/local/squid/var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern . 0 20% 4320
cache_dir ufs /mount/storage/squid 4096 16 256
maximum_object_size_in_memory 0
maximum_object_size 250
cache_mem 0
这是我在 UFW Rules.before 文件中过滤器部分之前的内容:
*nat :预路由接受[0:0]
-A 预路由 -i br0 -p tcp --dport 80 -j 重定向 --to-端口 3128
犯罪
服务器的主接口是br0(192.168.1.149)。如果没有重定向语句,流量将毫无问题地通过服务器路由到互联网网关 (192.168.1.1)。将网络浏览器代理设置设置为 192.168.1.149:3128 也没有问题。
我也尝试过 DNAT 语句,但也不起作用。无论如何,如果可能的话,我不喜欢使用 DNAT,因为我不想将流量伪装成鱿鱼服务器。如果愿意的话,我还有另一台机器可以用于端口重定向。