如何在Ubuntu 20.04 LTS Linux上安装Squid Proxy Server
如何在Web客户端的Ubuntu 20.04 LTS Linux服务器上安装Squid Proxy Server?
我如何使用在Ubuntu服务器上运行的Squid过滤掉LAN用户的互联网流量,例如阻止域,不需要的URL,上网时间等等?
Squid代理服务器是一个免费的开源高性能缓存和转发HTTP Web代理。
它主要用于通过缓存重复的请求,缓存DNS和用于共享网络的Web查找来加快Web服务器的速度。
它还添加了一个安全策略,以过滤掉Web或者办公室用户不需要的流量。
本教程说明如何在Ubuntu 20.04 LTS Linux服务器上安装,设置和配置Squid代理服务器。
步骤1在Ubuntu上安装Squid代理服务器
首先,使用ssh命令登录:
ssh user@server-ip-here ssh [email protected]
接下来,使用apt命令更新系统:
sudo apt update sudo apt upgrade
我们可以搜索Squid包,如下所示:
apt show squid
输出:
Package: squid Version: 4.10-1ubuntu1 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <[email protected]> Original-Maintainer: Luigi Gangitano <[email protected]> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 8,792 kB Provides: squid3 Pre-Depends: adduser Depends: libc6 (>= 2.29), libcap2 (>= 1:2.10), libcom-err2 (>= 1.43.9), libdb5.3, libecap3 (>= 1.0.1), libexpat1 (>= 2.0.1), libgcc-s1 (>= 3.0), libgnutls30 (>= 3.6.6), libgssapi-krb5-2 (>= 1.17), libkrb5-3 (>= 1.10+dfsg~), libldap-2.4-2 (>= 2.4.7), libltdl7 (>= 2.4.6), libnetfilter-conntrack3 (>= 1.0.7), libnettle7, libpam0g (>= 0.99.7.1), libsasl2-2 (>= 2.1.27+dfsg), libstdc++6 (>= 9), libxml2 (>= 2.7.4), netbase, logrotate (>= 3.5.4-1), squid-common (>= 4.10-1ubuntu1), lsb-base, libdbi-perl, ssl-cert Recommends: libcap2-bin, ca-certificates Suggests: squidclient, squid-cgi, squid-purge, resolvconf (>= 0.40), smbclient, ufw, winbind, apparmor Homepage: http://www.squid-cache.org Download-Size: 2,556 kB APT-Sources: http://mirrors.linode.com/ubuntu focal/main amd64 Packages Description: Full featured Web Proxy cache (HTTP proxy) Squid is a high-performance proxy caching server for web clients, supporting FTP, gopher, ICY and HTTP data objects.
安装Squid 4
既然系统软件是最新的,是时候安装Squid服务器了,执行:
sudo apt install squid
步骤2配置Squid服务器
squid配置文件位于/etc/squid/squid.conf和/etc/squid/conf.d/目录中。
让我们使用文本编辑器编辑/etc/squid/squid.conf。
备份原始文件,以便在使用cp命令出现问题时可以返回:
sudo cp -v /etc/squid/squid.conf{,.factory} '/etc/squid/squid.conf' -> '/etc/squid/squid.conf.factory'
sudo nano /etc/squid/squid.conf ## 或者 sudo vim /etc/squid/squid.conf
更改Squid端口并列出IP地址
缺省情况下,squid侦听所有接口上的所有IP地址。
默认端口是TCP3128。
查找行:
http_port 3128
对其进行如下更改或者根据您的需要进行更改:
http_port 10.8.0.1:3128
设置端口的ACL
ACL是一种访问控制方案,我们可以根据需要使用它来拒绝或者允许访问。
例如,时间acl允许您为用户设置一天中的浏览时间和一周中的一天。
不喜欢社交媒体领域?
我们可以使用Squid代理服务器阻止Facebook和其他域名。
有几个不同的访问列表。
让我们看一些常见的例子。
定义您要允许的SSL和安全端口
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
调整以列出应允许浏览的(内部)IP网络
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
如下定义您的LAN ACL
acl mylan src 10.8.0.0/24
我们还可以定义您希望阻止的其他域
acl baddomain1 dstdomain www-bad-guys-domain-name-here
允许或者拒绝访问
使用允许HTTP客户端(例如浏览器)访问HTTP端口的http_access。
这是主要的访问控制列表
# Block access to all Unsafe ports i.e. only allow Safe_ports defined in acl above # http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # Block domains # http_access deny baddomain1 # only allow cachemgr access from localhost # http_access allow localhost manager http_access deny manager # Allow internet access to localhost and mylan sub/net # http_access allow localhost http_access allow mylan # and finally deny all other access to this proxy server # http_access deny all
Squid代理服务器更改传出IP地址
假设您为服务器分配了多个IP地址,我们可以按如下方式更改代理服务器的传出IP地址:
tcp_outgoing_address 139.1.2.3
根据需要设置缓存大小
cache_mem 256 MB
强制Squid隐藏客户端真实IP地址
forwarded_for delete via off forwarded_for off follow_x_forwarded_for deny all request_header_access X-Forwarded-For deny all forwarded_for delete
指定要使用的DNS名称服务器列表
dns_nameservers 127.0.0.1 10.8.0.1
Squid有更多选择。
我在这里介绍了基本的内容。
因此,请参阅此页面,其中可以找到所有Squid配置指令。
验证配置选项是否有效
要解析和测试配置文件,请执行:
sudo /usr/sbin/squid -k check echo $? sudo /usr/sbin/squid -k parse
有关更多信息,请参见"确保Unix/Linux配置文件没有语法错误的21个示例"。
第3步-启动/停止/重启Squid
首先,在启动时使用systemctl命令打开Squid服务:
sudo systemctl enable squid.service
语法如下:
启动Squid服务器
sudo systemctl start squid.service
停止Squid服务器
sudo systemctl stop squid.service
或者
sudo squid -k shutdown
重启Squid服务器
sudo systemctl restart squid.service
查找Squid服务器状态
sudo systemctl status squid.service
在配置更改正常后重新加载Squid
每当您对squid.conf进行更改时,请按以下方式重新加载它:
sudo squid -k reconfigure
或者
sudo systemctl reload squid.service
步骤4-封锁网域
让我们阻止twitter.com和facebook.com:
acl socialsite dstdomain .twitter.com acl socialsite dstdomain .facebook.com http_access deny socialsite
第5步-使用关键字阻止网址
假设任何网址包含诸如"foo
"或者"browse.php? u =
"之类的关键字,请使用url_regex acl将其阻止:
acl urlkeywordsblocks url_regex -i "/etc/squid/blocked-urls-keyword.conf" http_access deny urlkeywordsblocks
创建一个名为/etc/squid/blocked-urls-keyword.conf的文件,如下所示:
sudo vim /etc/squid/blocked-urls-keyword.conf
追加网址/关键字:
foo browse.php?u=
第6步-阻止文件扩展名
我们也可以使用squid代理来阻止不需要的文件扩展名:
acl blockedexentions urlpath_regex -i "/etc/squid/blocked-file-externsions.conf" http_access deny blockedexentions
在/etc/squid/blocked-file-externsions.conf中追加以下内容
.exec .mp4 .mp3 .zip .pdf
第7步-在工作日仅允许在9:00 AM至18:00之间访问互联网
acl official_hours time M T W H F 09:00-18:00 http_access deny all http_access allow official_hours
步骤8-配置网络浏览器
可以在Firefox首选项中如下设置使用代理的连接设置:
- 点击"菜单"按钮,然后选择"首选项"
- 在"常规"面板中,通过向下滚动选项页面转到"网络设置"部分。
- 点击"设置..."。连接设置对话框将打开并设置代理服务器地址,例如10.8.0.1和端口3128: