简介
Squid 是 Linux 系统中最常用的一款开源代理服务软件,是一个广泛使用的开源代理服务器和Web缓存加速器。它支持多种协议,可以很好地实现 HTTP 和 FTP,以及 DNS 查询、SSL 等应用的缓存代理。常用于提高网络性能、节省带宽、提供访问控制以及实现内容过滤,功能十分强大。
官方网站为: http://www.squid-cache.org
作为应用层的代理服务软件,Squid 主要提供缓存加速、应用层过滤控制的功能。
核心特点
- 缓存和加速:
Squid
可以缓存请求的网页、图片和其他文件,这样当同一个资源再次被请求时,它可以快速从本地缓存提供,而不是每次都从原始服务器下载。 - 控制访问:
Squid
可以用来控制哪些内容可以被用户访问。它支持强大的访问控制列表(ACLs
),允许管理员根据源地址、目的地、使用的协议等标准过滤内容。 - 提供安全性:
Squid
可以作为一个透明代理来提高网络安全,可以用来拦截恶意流量和提供SSL/TLS
加密的代理服务。 - 减少带宽使用:通过缓存频繁访问的内容,
Squid
可以显著减少带宽需求,特别是在网络连接有限或昂贵的环境中非常有用。 - 提高响应时间:由于从近距离缓存提供内容,
Squid
能够减少数据的往返时间,从而提高响应速度。 - 支持多种协议:
Squid
支持HTTP
、HTTPS
、FTP
等多种网络协议。
应用场景
- 企业网关:在企业环境中,
Squid
通常用作网关代理,来管理和监控员工的互联网使用。 - ISP缓存解决方案:互联网服务提供商(
ISP
)使用Squid
来减少带宽使用,加快用户访问互联网资源的速度。 - 内容分发网络:
Squid
可以用作内容分发网络(CDN
)的一部分,来提供地理分布式的缓存服务。 - 反向代理和负载均衡:
Squid
还可以配置为反向代理,用于负载均衡和为后端服务器提供缓存服务。 - 安全和匿名浏览:
Squid
还可用于提高浏览的安全性和匿名性,尤其是当结合VPN
或Tor
使用时。
Squid但是和VPN还是有区别的:
Squid
主要用于缓存和控制HTTP/HTTPS
流量,而VPN
用于保护整个网络连接的安全和隐私。Squid
在隐私保护方面不如VPN
,因为它不会对所有流量进行加密,也不会隐藏用户的真实IP
地址。Squid
的配置可能比VPN
复杂,尤其是在进行高级过滤和控制时。
安装方式
-
源码编译安装(需要依赖操作系统的 gcc 等编译库)。
-
直接运行 docker 容器(有容器运行环境的情况下,最简单)。
安装
原生编译方式安装
下载squid源码包,解压缩并使用系统 gcc 库编译安装。
安装和配置
1、首先关闭防火墙和 SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、前往官网下载 squid 安装包
mkdir /opt/squid
cd /opt/squid
# 本例下载squid-6.10 版本
curl -o squid-6.10.tar.gz http://www.squid-cache.org/Versions/v6/squid-6.10.tar.gz
3、检查或安装编译环境
yum -y install gcc gcc-c++ make
4、解压缩安装包
tar zxvf squid-6.10.tar.gz
5、配置 squid
# 先进入解压缩的源代码目录后,然后执行configure进行配置
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_ Chinese" \
--enable-underscore \
--disable-poll \
--enable-epoll \
--enable-gnuregex
配置命令中的参数说明如表:
参数 | 说明 |
---|---|
–prefix=/usr/local/squid | 指定安装目录路径 |
–sysconfdir=/etc | 指定配置文件路径 |
–enable-arp-acl | MAC地址管控,防止客户端使用IP欺骗 |
–enable-linux-netfilter | 使用内核过滤 |
–enable-linux-tproxy | 支持透明模式 |
–enable-async-io=100 | 异步IO,提升存储性能 |
–enable-err-language=“Simplify_ Chinese” | 错误信息的显示语言 |
–enable-underscore | 允许URL中有下划线 |
–disable-poll | 关闭默认使用poll模式 |
–enable-epoll | 开启epoll模式提升性能 |
–enable-gnuregex | 使用GNU正则表达式 |
6、编译和安装
make && make install
7、创建软连接、创建用户并为缓存目录授权
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
#此目录用于存放缓存文件
chown -R squid:squid /usr/local/squid/var/
8、修改Squid的配置文件 /etc/squid.conf
......
-----56行左右的位置--插入(不同版本行数可能有差异)------
http_access allow all #放在http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128 #用来指定代理服务监听的地址和端口(默认的端口号为3128)
-----61行左右的位置--插入(不同版本行数可能有差异)------
cache_effective_user squid #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid #添加,指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #指定缓存文件目录
......
编辑内容如下图所示:
验证和启动Squid
# 检查配置文件语法是否正确
squid -k parse
# 启动Squid, 第一次启动Squid服务时,会自动初始化缓存目录
squid -z #-z选项用来初始化缓存目录
squid #启动squid 服务
# 查看 squid 进程
netstat -anpt | grep "squid"
配置为系统服务开机自启动
1、创建 Squid 服务脚本,文件 /etc/init.d/squid
内容如下
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭 squid..."
$0 start &> /dev/null
echo "正在启动 squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0{start|stop|status|reload|check|restart}"
;;
esac
2345是默认自启动级别,如是 - 代表任何级别都不自启动; 90是启动优先级,25是停止优先级,优先级范围是0一100,数字越大,优先级越低。
2、将服务添加到系统服务中并设置为开机自启动
# 添加到系统服务
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on
# 设置为开机自启动
systemctl enable squid
# 启动服务
systemctl start squid
Docker容器方式安装
1、准备配置文件 squid.conf
。位置例如:/usr/local/squid/squid.conf
(内容略,可以不挂载配置直接启动容器,然后进入容器后将默认配置文件 /etc/squid/squid.conf
拷贝到宿主机后修改)
2、启动docker容器
docker run --name squid -d --restart=always --publish 3128:3128 --volume /usr/local/squid:/etc/squid/ ubuntu/squid:latest
高级配置
HTTPS代理
要配置HTTPS代理,需要启用SSL支持,并生成SSL证书。以下是一个简单的配置示例:
# 生成自签名证书(仅供测试)
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/squid/squid.key -out /etc/squid/squid.crt
# 配置SSL
https_port 3129 cert=/etc/squid/squid.crt key=/etc/squid/squid.key
身份验证
Squid支持多种身份验证方式,包括基本身份验证和NTLM。以下是启用基本身份验证的示例:
# 安装Apache身份验证模块
sudo apt install apache2-utils
# 创建用户
sudo htpasswd -c /etc/squid/passwords username
# 配置身份验证(修改配置文件)
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
性能优化
为了提高Squid的性能,可以考虑以下优化措施:
- 调整缓存大小:根据网络流量情况调整
cache_dir
的大小。 - 使用内存缓存:通过配置
cache_mem
指令使用更多的内存进行缓存。 - 优化日志记录:定期清理和压缩日志文件,减少磁盘I/O。
常见问题
- Squid无法启动:检查配置文件的语法是否正确,可以使用命令
sudo squid -k parse
来验证。 - 访问被拒绝:确保ACL配置正确,特别是
http_access
指令的顺序,Squid会按顺序检查访问规则。
(END)