前言
Squid代理是一种开源的网络代理软件,广泛应用于Linux系统中。 Squid代理服务器支持很多缓存协议(ICP、HTCP、CARP、WCCP),并允许代理HTTP、HTTPS、FTP等流量。 Squid 易于扩展,您可以使用它来过滤内容或限制每个用户或站点的带宽,它支持用户身份验证(包括 Active Directory LDAP 身份验证),主要用于缓存和转发网络请求,以提高网络性能和安全性。Squid代理服务器支持多种代理模式,包括传统代理、透明代理和反向代理。
- 传统代理(正向代理) :这种模式下,客户端需要手动指定代理服务器的IP地址和端口号才能通过Squid代理服务器上网。这种方式适用于互联网环境,但对客户端配置要求较高。
- 透明代理:在这种模式下,客户端无需指定代理服务器的地址和端口,而是通过默认路由或防火墙策略将Web访问重定向给代理服务器处理。这种方式对客户端配置较为友好,用户几乎无感知地使用代理服务。
- 反向代理:反向代理通常用于将内部WEB服务器的请求转发到外部WEB服务器,从而实现加速和负载均衡。反向代理可以缓存请求资源,并在缓存命中时直接返回给客户端,否则从后端服务器获取并返回结果。
环境描述
Ubuntu 作为Squid代理服务器,配备两块网卡
- 192.168.0.201/24 网关192.168.0.1 (外网)
- 192.168.0.202/24 无网关 (内网)
Windows Server 作为 客户端,仅配置IP和掩码,默认无法上互联网
- 192.168.0.250/24 无网关
安装Squid代理
使用包管理器在主机上安装 Squid 包。根据您的 Linux 版本,使用以下命令之一
Oracle、Rocky Linux、CentOS、Fedora 或 Red Hat Enterprise Linux
dnf install -y squid
SUSE Linux 企业服务器
zypper install squid -y
Kali、Ubuntu、Debian、UOS、Kylin
apt-get install squid -y
如果你想在 Squid 中实现用户身份验证,请再安装一个包
RHEL/CentOS/Fedora
dnf -y install httpd-tools
Kali/Ubuntu/Debian/UOS/Kylin
sudo apt install apache2-utils -y
使用systemd启动Squid并设置为开机启动,运行服务并检查其状态。
systemctl enable --now squid
systemctl status squid
配置Squid正向代理
主配置文件一般都在/etc/squid/squid.conf
,需要先复制一份做备份,预防修改坏了,使用指令
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
然后再进行编辑sudo vi /etc/squid/squid.conf
,我们找到配置IP地址的那行,默认是没有192.168.0.0/24的,根据实际情况添加一行,再这里我们也能找到默认端口号3128
acl localnet src 192.168.0.0/24
默认情况下,Squid 接受端口 TCP/3128 上的用户连接。您可以更改http_port中的端口号。我将squid监听端口改为63333
http_port 63333
确保防火墙允许通过Squid的端口。可以通过以下命令开放该63333端口
iptables -I INPUT -p tcp --dport 63333 -j ACCEPT
然后在编辑子配置文件sudo vi /etc/squid/conf.d/debian.conf
,将http_access allow localnet
取消注释
重启一下服务。
systemctl restart squid
配置代理服务器
将Windows Server客户端配置代理IP及端口,这里配置的也就是环境中用于内网的IP 192.168.0.202
设置好了保存,再访问网站,就已经可以正常联网了。
限制IP访问
可以通过限制固定IP来上网,需要在配置文件 /etc/squid/squid.conf
添加
acl badhost src 192.168.0.250
或者仅允许一个子网的客户端进行访问
acl localnet src 192.168.0.0/24
规定时间内禁止联网
acl worktime time MTWHF 18:00-7:00
http_access deny worktime
禁止访问指定服务器
acl baddst dst 192.168.0.100
acl baddst dst 8.8.8.8
禁止访问指定的域名
http_access deny badhost baddomain
Squid还有很多功能,这里就不一一展示了,可以自行去官网查看。