在Ubuntu 20.04上安装和设置Squid代理
在本教程中,我们将学习如何在Ubuntu 20.04上安装和设置Squid Proxy。
乌贼 是功能齐全的Web代理缓存应用程序,它为HTTP,FTP,SSL请求和DNS查找提供代理和缓存服务。它还通过缓存和重用经常请求的网页来执行透明缓存,以减少带宽并缩短响应时间。
在Ubuntu 20.04上安装和设置Squid代理
运行系统更新
首先,请确保您的系统软件包是最新的。
apt update apt upgrade
在Ubuntu 20.04上安装Squid Proxy
Squid代理可在默认的Ubuntu 20.04存储库上使用。
apt-cache policy squid
squid:
Installed: (none)
Candidate: 4.10-1ubuntu1.1
Version table:
4.10-1ubuntu1.1 500
500 http://ke.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
500 http://ke.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages
4.10-1ubuntu1 500
500 http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages
因此,您可以通过运行命令进行安装,也可以通过运行命令进行安装。
apt install squid
在Ubuntu 20.04上运行Squid
安装后,将启动Squid并使其能够在系统启动时运行;
systemctl status squid
● squid.service - Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-05-29 14:00:41 UTC; 10min ago
Docs: man:squid(8)
Main PID: 2237 (squid)
Tasks: 4 (limit: 2282)
Memory: 16.3M
CGroup: /system.slice/squid.service
├─2237 /usr/sbin/squid -sYC
├─2239 (squid-1) --kid squid-1 -sYC
├─2240 (logfile-daemon) /var/log/squid/access.log
└─2241 (pinger)
May 29 14:00:41 ubuntu20 squid[2239]: Using Least Load store dir selection
May 29 14:00:41 ubuntu20 squid[2239]: Set Current Directory to /var/spool/squid
May 29 14:00:41 ubuntu20 squid[2239]: Finished loading MIME types and icons.
May 29 14:00:41 ubuntu20 squid[2239]: HTCP Disabled.
May 29 14:00:41 ubuntu20 squid[2239]: Pinger socket opened on FD 14
May 29 14:00:41 ubuntu20 squid[2239]: Squid plugin modules loaded: 0
May 29 14:00:41 ubuntu20 squid[2239]: Adaptation support is off.
May 29 14:00:41 ubuntu20 squid[2239]: Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 12 flags=9
May 29 14:00:42 ubuntu20 squid[2239]: storeLateRelease: released 0 objects
...
检查是否已启用以在系统启动时运行;
systemctl is-enabled squid.service
enabled
在Ubuntu 20.04上配置Squid代理服务器
/etc/squid/squid.conf
是默认的Squid代理配置。该配置具有建议的最小设置。但是,我们将修改此配置以进行一些更改。您还可以在下面进行其他配置 /etc/squid/conf.d/
目录。
备份默认配置文件。
cp /etc/squid/squid.conf{,.old}
默认情况下,Squid配置文件如下所示(已删除注释);
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 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 include /etc/squid/conf.d/* 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 /(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
配置Squid访问控制策略
如果您已经注意到,则上面的配置文件具有用于特定网络和安全端口的ACL。您可以修改它们以包括您的安全端口以及Squid应该代理的本地网络。
定义ACL时,每个ACL必须以一个 acl name
和 acl type
随后是特定于类型的参数或从中读取它们的带引号的文件名;
acl aclname acltype argument ...
acl aclname acltype "file" ...
当使用“file
”,文件每行应包含一项。
vim /etc/squid/squid.conf
在本教程中,我们将为我们的局域网创建一个ACL, 192.168.57.0/24
。我们将此行附加在SSL端口ACL的正上方。 相应地替换ACL的名称和源网络。
acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines # My LAN network ACL acl kifarunix-demo-net src 192.168.57.0/24 ...
在上阅读有关ACL配置指令的更多信息 鱿鱼维基页面。
您可以注释掉默认ACL(在各行的开头添加#)。
# Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #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 # My LAN network ACL acl kifarunix-demo-net src 192.168.57.0/24 ...
根据定义的ACL允许或拒绝访问
有了ACL之后,您就可以使用 http_access
指令定义允许或拒绝使用代理访问外部网络的ACL。因此,为了允许我们的ACL定义的网络, kifarunix-demo-net,外部访问,在下面添加行;
... #http_access allow localnet http_access allow localhost # Allow kifarunix-demo-net http_access allow kifarunix-demo-net # And finally deny all other access to this proxy http_access deny all
最后一个条目应始终为 http_access deny all
。
拒绝访问特定网站
可以使用Squid Proxy限制对特定网站的访问。例如,阻止访问youtube,facebook,netflix;
- 您将必须创建一个文件来定义这些网站的域,如下所示;
- 否则,您将列出域名,在ACL语句上用空格分隔。
vim /etc/squid/denied-sites.squid
.youtube.com .facebook.com .netflix.com
接下来,在squid配置文件中为上述受限站点创建ACL,然后设置 拒绝 定义的ACL的规则。
acl deniedsites dstdomain "/etc/squid/denied-sites.squid"
或者,您可以列出站点域;
acl deniedsites dstdomain youtube.com facebook.com netflix.com
更新鱿鱼配置文件。
... # # My LAN network ACL acl kifarunix-demo-net src 192.168.57.0/24 ## Sites to Block access to ### acl deniedsites dstdomain "/etc/squid/denied-sites.squid" ... ... # Deny access to facebook, youtube, netflix http_access deny deniedsites # Allow kifarunix-demo-net http_access allow kifarunix-demo-net # And finally deny all other access to this proxy http_access deny all
根据特定关键字屏蔽网站
您还可以通过使用关键字来限制对网站的访问。创建具有特定关键字的文件,如下所示;
vim /etc/squid/banned-keywords.squid
porn ads movie gamble
在squid配置文件上进行必要的更改。
... # # My LAN network ACL acl kifarunix-demo-net src 192.168.57.0/24 ... acl CONNECT method CONNECT # ACL for Sites to Block Access to acl deniedsites dstdomain "/etc/squid/denied-sites.squid" acl keyword-ban url_regex -i "/etc/squid/keyword-ban.squid" ... # http_access allow localnet http_access allow localhost # Deny access to facebook, youtube, netflix http_access deny deniedsites # Deny access based on keywords http_access deny keyword-ban # Allow kifarunix-demo-net http_access allow kifarunix-demo-net # And finally deny all other access to this proxy http_access deny all
注意: http_access
条目从上到下进行处理,并根据访问的先后顺序来允许或拒绝访问。
屏蔽外向流量
通过使用代理服务器将代理的IP地址提供给其他Web服务器来匿名化IP地址,代理服务器可能会在传出的HTTP请求中公开您的IP地址。但是,您可以通过在squid配置文件的末尾包含以下指令来禁用此功能。
通过定位行来在请求和回复中禁用“通过标题”, # via on
,取消注释并将其值设置为 off
。
#Default: # via on via off
通过取消注释行,将Squid配置为不在客户端转发的HTTP请求中附加客户端的IP地址, # forwarded_for on
,并将值设置为 off
。
#Default: # forwarded_for on forwarded_for off
删除Squid代理标头,以避免泄露Squid代理服务器的身份。您可以在该部分下面添加以下行, # TAG: request_header_access
。
request_header_access From deny all request_header_access Server deny all request_header_access WWW-Authenticate deny all request_header_access Link deny all request_header_access Cache-Control deny all request_header_access Proxy-Connection deny all request_header_access X-Cache deny all request_header_access X-Cache-Lookup deny all request_header_access Via deny all request_header_access X-Forwarded-For deny all request_header_access Pragma deny all request_header_access Keep-Alive deny all
更改鱿鱼默认端口
鱿鱼代理听 TCP port 3128
默认。要更改此端口,请打开 /etc/squid/squid.conf
配置文件并替换 http_port
与您所需的端口号。
例如,只要没有其他应用程序在同一端口上侦听,就可以将默认端口更改为8888。
... # Squid normally listens to port 3128 # http_port 3128 << Comment the line by adding # http_port 8888 ...
您也可以将其设置为侦听特定IP(相应地替换IP地址)
http_port 192.168.57.8:3128
完成配置后,保存并退出配置文件。
检查Squid配置文件中的错误
squid -k parse
如果有语法错误,将显示错误的行。确保每次修改配置时都运行此命令。
重启鱿鱼
完成配置后,保存文件并重新启动squid。
systemctl restart squid
检查Squid是否在定义的端口上侦听。在这种情况下,我们没有更改默认值。
ss -altnp | grep 3128
LISTEN 0 256 192.168.57.8:3128 0.0.0.0:* users:(("squid",pid=3808,fd=12))
在防火墙上允许鱿鱼端口
如果UFW正在运行,则允许打开鱿鱼代理端口;
ufw allow 3128/tcp
配置客户端以通过代理服务器连接
要配置端点通过Squid代理服务器连接到Internet,可以设置系统范围的代理配置,将客户端配置为使用Squid代理作为网关,或者在浏览器上设置代理设置。
系统范围的代理配置
要设置系统范围的代理配置,请在下面创建配置文件 /etc/profile.d
环境变量定义了鱿鱼代理服务器的详细信息,如下所示;
vim /etc/profile.d/squid.sh
相应地替换Squid服务器的IP地址。
PROXY_URL="192.168.57.8:3128" HTTP_PROXY=$PROXY_URL HTTPS_PROXY=$PROXY_URL FTP_PROXY=$PROXY_URL http_proxy=$PROXY_URL https_proxy=$PROXY_URL ftp_proxy=$PROXY_URL export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
之后,获取新的配置文件。
source /etc/profile.d/squid.sh
要对此进行测试,请尝试从客户端下载任何内容,同时将访问日志记录在鱿鱼代理服务器上。
在客户端的终端上运行;
wget google.com
--2020-06-02 21:24:08-- http://google.com/ Connecting to 192.168.57.8:3128... connected. Proxy request sent, awaiting response... 301 Moved Permanently Location: http://www.google.com/ [following] --2020-06-02 21:24:08-- http://www.google.com/ Reusing existing connection to 192.168.57.8:3128. Proxy request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.4’ index.html.4 [ <=> ] 12.36K --.-KB/s in 0.01s 2020-06-02 21:24:08 (971 KB/s) - ‘index.html.4’ saved [12657]
在Squid代理服务器上;
tail -f /var/log/squid/access.log
1591122302.356 0 192.168.57.10 TCP_MEM_HIT/301 629 GET http://google.com/ - HIER_NONE/- text/html 1591122302.642 282 192.168.57.10 TCP_MISS/200 13538 GET http://www.google.com/ - HIER_DIRECT/216.58.223.100 text/html
在Firefox浏览器上配置代理设置。
在Firefox上,将其配置为通过Squid服务器连接外部网络。 偏好 > 属l> 网络设置>手动代理配置。校验 将此代理服务器用于所有协议。
尝试访问浏览器上被阻止的站点。 ;
检查日志。
tail -f /var/log/squid/access.log
1591126191.919 0 192.168.57.11 TCP_DENIED/403 3963 CONNECT www.youtube.com:443 - HIER_NONE/- text/html
以及如何从根本上配置squid代理以阻止或拒绝对外部资源的访问。这标志着本教程有关如何在Ubuntu 20.04上安装和配置Squid代理的结尾。
。