1.squid代理服务器简介
Squid是一款流行的代理服务器软件,支持正向代理、透明代理和反向代理。它可以进行缓存、流量控制、安全性和隐私保护等操作,广泛应用于企业和互联网服务提供商。
Squid的主要功能包括:
- 缓存:Squid可以缓存经常访问的Web页面、图片和其他内容,从而提高访问速度和响应时间。
- 流量控制:Squid可以限制用户的访问速度和访问量,避免网络拥塞和滥用。
- 安全性:Squid可以进行访问控制、身份验证和日志记录,保护网络安全和隐私。
- 隐私保护:Squid可以隐藏客户端的真实IP地址,保护用户隐私和匿名性。
常用的Squid端口包括:
- 3128:默认的Squid代理端口,用于HTTP代理和HTTPS代理。
- 8080:常用的Squid代理端口,通常用于Web代理和透明代理。
- 80:常用的Web服务端口,当Squid作为反向代理服务器时,可以使用80端口接收客户端请求并将其转发给后端服务器。
2.代理类型
| 代理类型 | 代理位置 | 代理功能 | 应用场景 | |------|--------------------|-----------------------|-----------------------| | 正向代理 | 代理服务器位于客户端和目标服务器之间 | 隐藏客户端的真实IP地址、访问控制、缓存等 | 突破网络限制、提高访问速度、安全访问互联网 | | 透明代理 | 代理服务器位于客户端和目标服务器之间 | 隐藏客户端的真实IP地址、访问控制、缓存等 | 突破网络限制、提高访问速度、安全访问互联网 | | 反向代理 | 代理服务器位于目标服务器和客户端之间 | 负载均衡、缓存、安全控制等 | 构建高可用性和高性能的Web应用程序和服务 |
3.常见代理服务器软件
| 软件名称 | 功能 | 支持的代理类型 | 应用领域 | |-----------|------------------|----------------|-------------------| | Squid | 缓存、流量控制、安全性和隐私保护 | 正向代理、透明代理和反向代理 | 企业和互联网服务提供商 | | Nginx | 负载均衡、缓存和安全性等 | 反向代理 | 构建高性能的Web应用程序和网站 | | HAProxy | 流量控制、负载均衡和安全性等 | 反向代理 | 构建高可用性的Web应用程序和服务 | | Apache | 负载均衡、缓存和安全性等 | 反向代理 | 构建高性能的Web应用程序和网站 | | Varnish | 缓存、流量控制和安全性等 | 反向代理 | 构建高性能的Web应用程序和网站 | | Tinyproxy | 缓存和流量控制等 | 正向代理 | 个人用户和小型企业 | | Pound | 流量控制和负载均衡等 | 反向代理 | 构建高可用性的Web应用程序和服务 | | Privoxy | 隐私保护和广告过滤等 | 正向代理 | 个人用户和小型企业 |
其中常用的为Squid
、Nginx
服务器。
4.部署squid代理服务器基础环境准备
| 服务名称 | 主机名 | IP地址/域名 | 操作系统 |
|------------|------------|-------------------|-------------|
| Squid代理服务器 | mysquid
| 192.168.250.231
| Centos7.8
|
| 测试机(客户机) | moonrong
| 110.129.100.101
| WIN10系统
|
| WEB服务器 | testa | www.haopython.com | centos7.6 |
关闭代理服务器selinux。
5.安装Squid服务器
5.1yun方式安装
[root@mysquid ~]# yum -y install squid
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/2): extras/7/x86_64/primary_db | 246 kB 00:00:05
(2/2): updates/7/x86_64/primary_db | 15 MB 00:00:44
正在解决依赖关系
--> 正在检查事务
---> 软件包 squid.x86_64.7.3.5.20-17.el7_9.6 将被 安装
--> 正在处理依赖关系 squid-migration-script,它被软件包 7:squid-3.5.20-17.el7_9.6.x86_64 需要
--> 正在处理依赖关系 perl(Digest::MD5),它被软件包 7:squid-3.5.20-17.el7_9.6.x86_64 需要
5.2启动squid服务
[root@mysquid ~]# systemctl start squid
[root@mysquid ~]# systemctl enable squid
Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service.
[root@mysquid ~]#
5.3查看服务启动状态
[root@mysquid ~]# systemctl status squid
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2022-04-18 11:25:22 CST; 4min 1s ago
Main PID: 3019 (squid)
CGroup: /system.slice/squid.service
├─3019 /usr/sbin/squid -f /etc/squid/squid.conf
├─3021 (squid-1) -f /etc/squid/squid.conf
└─3024 (logfile-daemon) /var/log/squid/access.log
4月 18 11:25:22 mysquid systemd[1]: Starting Squid caching proxy...
4月 18 11:25:22 mysquid squid[3019]: Squid Parent: will start 1 kids
4月 18 11:25:22 mysquid squid[3019]: Squid Parent: (squid-1) process 3021 started
4月 18 11:25:22 mysquid systemd[1]: Started Squid caching proxy.
[root@mysquid ~]#
active (running)
表示启动成功。
6.配置squid服务
squid
默认配置文件在/etc/squid/squid.conf
下,先进行备份:
[root@mysquid ~]# cp /etc/squid/squid.conf /etc/squid/squid.conf.ori.20220418
[root@mysquid ~]#
默认情况下,Squid 被配置成在服务器所有网络接口上监听端口3128。如果想修改端口号,并且设置监听接口,定位到http_port处,并且指定接口 IP 地址和新端口。如果没有接口指定,Squid 将监听所有网络接口。
/etc/squid/squid.conf
# Squid normally listens to port 3128
http_port IP_ADDR:PORT
在所有接口上和默认端口上运行 Squid 对大部分用户都很适用。
可以使用 Access Control Lists (ACLs)来控制 Squid 服务器的访问。
默认情况下,Squid 仅仅允许从本地主机和本地网络来的访问。
如果所有将要使用代理服务器的客户端都有一个固定 IP 地址,你可以创建一个 包含允许 IP 地址的 ACL。
不用在主要配置中添加 IP地址,我们可以创建一个新配置文件,用来配置地址:/etc/squid/myallowed_ips.txt
[root@mysquid squid]# cat squid.conf
acl allowed_ips src "/etc/squid/myallowed_ips.txt" 增加该项
......
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access allow allowed_ips #增加该项
http_access deny manager
这里需要注意的是,确认在http_access deny all
之前添加了这一行。
http_access
指令类似于防火墙规则。
Squid
从上到下读取规则,并且后面匹配的规则不会被处理。
接着重启一下squid服务并查看状态:
[root@mysquid squid]# systemctl status squid.service
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2022-04-18 11:54:04 CST; 4s ago
Process: 3353 ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF (code=exited, status=1/FAILURE)
Process: 3401 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 3393 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 3405 (squid)
Tasks: 3
CGroup: /system.slice/squid.service
├─3405 /usr/sbin/squid -f /etc/squid/squid.conf
├─3407 (squid-1) -f /etc/squid/squid.conf
└─3410 (logfile-daemon) /var/log/squid/access.log
4月 18 11:53:59 mysquid systemd[1]: Starting Squid caching proxy...
4月 18 11:54:04 mysquid squid[3405]: Squid Parent: will start 1 kids
4月 18 11:54:04 mysquid squid[3405]: Squid Parent: (squid-1) process 3407 started
4月 18 11:54:04 mysquid systemd[1]: Started Squid caching proxy.
[root@mysquid squid]#
7.Squid 身份验证
Squid 可以使用不同的后端,包括 Samba,LDAP 和 HTTP 基本验证来验证用户。
在本例中,我们配置 Squid 使用基本验证。它是一个简单的验证方法,内置在 HTTP 协议中。
我们将使用openssl
来生成密码,并且附加username:password
对到文件/etc/squid/htpasswd
文件中,并且显示出来:
格式如下:
printf "USERNAME:$(openssl passwd -crypt PASSWORD)\n" | sudo tee -a /etc/squid/htpasswd
比如,这里创建一个用户名为moonrong
,密码为SUse#87ss
,运行如下:
[root@mysquid squid]# printf "moonrong:$(openssl passwd -crypt SUse#87ss)\n" | sudo tee -a /etc/squid/htpasswd
Warning: truncating password to 8 characters
moonrong:eM1d7DCkceo6g
[root@mysquid squid]#
下一步是配置 Squid 去启用 HTTP 基本验证,并且使用这个文件。
打开主要配置文件,添加下面的内容:/etc/squid/squid.conf
[root@mysquid squid]# vim squid.conf
[root@mysquid squid]# cat squid.conf
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/htpasswd
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# ...
http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
前面三行我们创建了一个 ACL 名称为authenticated
,最后一行允许通过验证用户访问。
接着重启squid
服务:
[root@mysquid squid]# systemctl restart squid
[root@mysquid squid]# systemctl status squid
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2022-04-18 12:04:40 CST; 8s ago
Process: 3558 ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 3569 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 3563 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 3572 (squid)
Tasks: 3
CGroup: /system.slice/squid.service
├─3572 /usr/sbin/squid -f /etc/squid/squid.conf
├─3574 (squid-1) -f /etc/squid/squid.conf
└─3577 (logfile-daemon) /var/log/squid/access.log
4月 18 12:04:35 mysquid systemd[1]: Starting Squid caching proxy...
4月 18 12:04:40 mysquid squid[3572]: Squid Parent: will start 1 kids
4月 18 12:04:40 mysquid squid[3572]: Squid Parent: (squid-1) process 3574 started
4月 18 12:04:40 mysquid systemd[1]: Started Squid caching proxy.
[root@mysquid squid]#
8.防火墙端口放行配置
squid
服务需要打开3128
端口:
[root@mysquid /]# firewall-cmd --permanent --add-port=3128/tcp
success
[root@mysquid /]# firewall-cmd --reload
success
[root@mysquid /]#
9.客户端配置并测试
以火狐浏览器为例,设置代理服务器,进行测试。