如何在Ubuntu 20.04 LTS Linux上安装Squid Proxy Server

时间:2020-01-09 10:45:40  来源:igfitidea点击:

如何在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: