当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

作者:精品下载站 日期:2024-12-14 23:36:14 浏览:14 分类:玩电脑

如何在 Linux 上安装和配置 Squid 代理服务器


Squid可能是最知名和最流行的开源缓存代理服务器。 Squid代理服务器支持很多缓存协议(ICP、HTCP、CARP、WCCP),并允许代理HTTP、HTTPS、FTP等流量。 Squid 易于扩展,您可以使用它来过滤内容或限制每个用户或站点的带宽,它支持用户身份验证(包括 Active Directory LDAP 身份验证)。在本文中,我们将展示如何在 Linux 上安装 Squid 代理服务器。

在 Linux 上安装 Squid 代理服务器

使用包管理器在主机上安装 Squid 包。根据您的 Linux 版本,使用以下命令之一:

  • Oracle、Rocky Linux、CentOS、Fedora 或 Red Hat Enterprise Linux:

    # dnf install -y squid
  • SUSE Linux 企业服务器:

    # zypper install squid
  • Ubuntu 或 Debian:

    # apt-get install squid

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

如果你想在 Squid 中实现用户身份验证,请再安装一个包:

  • RHEL/CentOS/Fedora:

    # dnf -y install httpd-tools
  • Debian/Ubuntu:

    # sudo apt install apache2-utils

使用 systemd 在 Linux 中启用 Squid,运行服务并检查其状态:

# systemctl enable squid
# systemctl start squid
# systemctl status squid

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

要列出所有选项,squid 是用以下命令构建的:

# squid -v
Squid Cache: Version 4.15
Service Name: squid
This binary uses OpenSSL 1.1.1k FIPS 25 Mar 2021. For legal restrictions on distribution see https://www.openssl.org/source/license.html
configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--libexecdir=/usr/lib64/squid' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,PAM,POP3,RADIUS,SASL,SMB,SMB_LM' '--enable-auth-ntlm=SMB_LM,fake' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs,rock' '--enable-diskio' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' '--disable-security-cert-validators' '--with-swapdir=/var/spool/squid' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

配置 Squid 缓存代理服务器

默认情况下,squid 使用的是/etc/squid/squid.conf 配置文件。

在编辑原始配置文件之前,请将其复制并设为只读。

$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
$ sudo chmod a-w /etc/squid/squid.conf.original

您可以稍后返回到原始配置文件或将其用作指令参考。

编辑squid配置文件:

$ sudo mcedit /etc/squid/squid.conf

在 Squid 配置文件的开头,指定了一个访问控制列表,该列表定义了允许连接到代理服务器的客户端的 IP 地址(子网)。

例如,您希望仅允许来自本地网络的客户端进行访问。添加以下指令:

acl localnet src 192.168.50.0/24

您可以评论其他 acl localnet 行。

允许访问该网络的指令在配置文件中设置如下:

http_access allow localnet

默认情况下,Squid 接受端口 TCP/3128 上的用户连接。您可以更改http_port中的端口号。我将squid监听端口改为4555:

http_port 4555

如果要使用代理服务器进行缓存,请配置缓存目录:

cache_dir ufs /var/spool/squid 5120 32 256
  • 20480

    - 是以 MB 为单位的缓存大小

  • 32

    - 是缓存的一级目录数,

    256

    是二级目录

要在磁盘上为鱿鱼缓存创建文件夹结构,请运行以下命令:

$ squid -z

为了对鱿鱼中的用户进行身份验证,我们将使用简单的基本身份验证。首先,创建一个文件来存储用户名和密码:

$ sudo touch /etc/squid/passwd && sudo chown squid /etc/squid/passwd

要将新用户添加到文件中,请运行以下命令:

$ sudo htpasswd -c /etc/squid/passwd username1

添加下一个用户时,不需要使用 -c 选项。

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

然后将以下行添加到squid.conf 文件的开头:

# use basic auth and password file
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
# the number of concurrent connections
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
# session length without re-entering login and password
auth_param basic credentialsttl 8 hours
auth_param basic casesensitive off
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

不同的 Linux 发行版可能有不同的 basic_ncsa_auth 文件路径:

  • /usr/lib64/squid/basic_ncsa_auth(Oracle、Rocky Linux、RHEL、CentOS)

  • /usr/lib/squid/basic_ncsa_auth(Debian、Ubuntu、Kali Linux)

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

您可以使用 basic auth 包实现 AD 身份验证:

auth_param basic program /usr/lib64/squid/basic_ldap_auth -R -b "dc=a-d,dc=com" -D "[email protected] " -w "<user password>" -f "sAMAccountName=%s" <AD domain controller IP address>

基本身份验证的缺点是密码以 Base64 加密文本形式传输(很容易解密,请参阅使用 telnet 和 SMTP 身份验证发送电子邮件一文中的示例)。因此,在 Squid 中使用 Kerberos Active Directory 身份验证更加安全。如果您没有 AD,您可以在 Squid 中配置 HTTP Digest 身份验证。但这超出了本文的范围。

允许和拒绝规则是使用鱿鱼配置文件末尾的http_access指令设置的。例如,仅允许经过身份验证的用户访问:

http_access allow localhost
http_access allow authenticated
http_access deny all

Squid 允许您阻止特定网站。创建一个包含禁止站点列表的文件:

$ sudo vi /etc/squid/blocked_sites

添加您要拒绝访问的网站列表:

facebook.com
twitter.com
instagram.com

然后将以下行添加到鱿鱼配置文件中:

acl blocked_sites dstdomain "/etc/squid/blocked_sites"
http_access deny blocked_sites

更改鱿鱼配置文件后,检查它是否有语法错误:

$ sudo squid -k parse

如果没有错误,您可以应用新的鱿鱼配置选项(不需要重新启动守护进程):

$ sudo squid -k reconfigure

允许连接到防火墙中的代理服务器端口(在我们的示例中为 TCP 4555)。如果您使用的是firewalld,请添加允许规则,如下所示:

# firewall-cmd --zone=public --add-port=4555/tcp
# firewall-cmd --reload

如果您的 Linux 服务器由外部提供商(AWS、Azure、Oracle Cloud 等)托管,请记住将端口 TCP/4555 的允许规则添加到相应的安全组。

检查 Squid 是否正在侦听 http_port 指令中指定的端口:

$ netstat -tulnp

使用curl,您可以检查squid代理服务器的可用性:

$ curl -x http://xx.xx.xx.xx:4555 -L http://google.com

如果

authentication required/ Access Denied 

出现错误,提交用户名和密码来访问squid:

$ curl -x http://xx.xx.xx.xx:4555 --proxy-user proxyuser1:NDMk23C3jvm -I http://google.com

[玩转系统] 如何在 Linux 上安装和配置 Squid 代理服务器

要实时检查squid日志,请使用以下命令:

$ sudo tail -f /var/log/squid/access.log

如果您的浏览器显示错误:

The proxy server is refusing connections

并且有

TCP_DENIED/403 4041 CONNECT

access.log 中的行,检查您的 ACL。

如果用户已成功通过身份验证,squid 日志将包含以下行

TCP_TUNNEL/200 39 CONNECT a-d.site:80 proxyusername HIER_DIRECT/xx.xx.xx.xx

或者

TCP_MISS/200

.
仍然需要在用户计算机上的浏览器中设置代理服务器设置。在浏览器设置中设置 Squid 主机的 IP 地址(名称)和端口。您可以通过 GPO 在 Windows 计算机上配置代理设置。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯