在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 nameacl 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> 网络设置>手动代理配置。校验 将此代理服务器用于所有协议。

尝试访问浏览器上被阻止的站点。 ;

在Ubuntu 20.04上安装和设置Squid代理

检查日志。

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代理的结尾。

Sidebar