Squid 介绍
Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid 可以代理HTTP, FTP, GOPHER, SSL 和 WAIS 协议。
使用squid的好处:快速响应,减少网络阻塞,增强访问控制,提高安全性.可以针对特定的网站,用户,网络,数据类型实施访问控制。
squid有3种代理方式:普通代理模式,透明代理模式,反向代理模式。
客户端PC <=> Squid代理服务器 <=> Internet
正向代理服务器可满足内网仅有一台服务器可以上网,而要供内网所有机器上网的需求,也可以用于爬虫的代理访问。在实践中我将Squid作为爬虫代理服务器,实现了多IP切换的功能,将在后续文章中记录实现过程。
下载与安装
1、环境
系统:CentOS Linux release 7.9.2009 (Core)
Squid 版本: Squid 3.5.20
2、去官网下载源代码并编译安装
cd /tmp
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.20.tar.gz
tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make && make install
3、或者也可以 通过 yum 下载
yum install -y squid
配置 Squid
高匿代理配置方法
1、给同一个网卡增加多个IP
ip addr add 222.xx.xxx.3 dev ens192(网卡名)
ip addr add 222.xx.xxx.4 dev ens192(网卡名)
ip addr add 222.xx.xxx.5 dev ens192(网卡名)
ip addr
2、删除网卡上的IP:
如果一张网卡支持不了太多IP,可能需要写个python脚本进行动态添加与删除
ip addr del 222.xx.xxx.3 dev ens192(网卡名)
3、修改 squid.conf 配置文件
官网配置说明:http://www.squid-cache.org/Doc/config/
vim /etc/squid/squid.conf
# 定义本地网段
acl ezrealer1 myip 222.xx.xxx.3
# tcp_outgoing_address 配置通过多个不同的上行ip访问外部网络
# 可以让重要的客户使用高性能的连接,普通用户使用慢速的连接
tcp_outgoing_address 222.xx.xxx.3 ezrealer1
acl ezrealer2 myip 222.xx.xxx.4
tcp_outgoing_address 222.xx.xxx.4 ezrealer2
acl ezrealer3 myip 222.xx.xxx.5
tcp_outgoing_address 222.xx.xxx.5 ezrealer3
# 带 http_access deny 的都注释掉
# http_access deny
http_access allow all
# 设置代理端口,可以随便设置,不和其他端口冲突就可以
http_port 3128
# 定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量
cache_dir ufs /var/spool/squid 100 16 256
coredump_dir /var/spool/squid
# 设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
maximum_object_size 4 MB
# cache目录使用量大于95%时,开始清理旧的cache
cache_swap_high 95
# cache目录清理到90%时停止
cache_swap_low 90
# 使代理成为高匿代理
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
IP 的快捷配置
acl ezrealer src 222.xx.xxx.0/24 # 表示 222.xx.xxx.1 ~ 222.xx.xxx.254
192.168.2.0/24表示的IP范围
192.168.2.0换成32位二进制,四组,每组8位
/24 表示前24位不变,后8位由全0变化到全1的过程,也就是由“00000000”变化到“11111111”
又因为全0是子网网络地址,全1是子网广播地址,这两个地址是不分配给主机使用的。
所以有效的可分配的范围是前24位不变,后8位由“00000001”变化为“11111110”的范围
再转换回十进制就是192.168.2.1~192.168.2.254
4、设置开机自启动并运行 squid
systemctl enable squid
# 初始化
squid -z
# 检查配置文件
squid -k parse
# 启动 squid 服务
systemctl start squid
# 检查端口
netstat -ntpl
5、开启远程访问
执行完第三步后,可以在服务器上通过python 访问 httpbin 网站 查看代理是否生效,但是要在远程(非squid服务器上)使用代理,则需要配置防火墙
#清除防火墙filter表中规则
iptables -F
#关闭增强安全×××
setenforce 0
#这句策略就是允许访问3218端口的tcp数据包通过
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
service squid reload #重新加载服务配置
firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
firewall-cmd --reload # 配置立即生效
firewall-cmd --zone=public --list-ports # 列出有开放的端口
systemctl stop firewalld.service
firewall-cmd --state
netstat -lnpt # 查看监听的端口
netstat -lnpt |grep 5672 # 检查端口被哪个进程占用
ps 6832
6、测试代理是否可用
import requests
s = requests.Session()
s.proxies.update({"http": "222.xx.xxx.3:3128"})
#s.proxies.update({"http": "60.175.237.114:31928"})
resp = s.get("http://httpbin.org/ip")
print(resp.text)
动态IP配置策略
参考:https://xnathan.com/2017/03/02/squid-proxy-pool/
1、搭建思路
- 使用 ip addr 命令 对网卡上的IP进行动态的增加或删除;
- 修改 squid.conf,并使用 squid -k reconfigure 重载 squid 配置;
2、对网卡进行 动态增加或删除 ip
命令:
# 增加
ip addr add 222.xx.xxx.3 dev ens192(网卡名)
# 删除
ip addr del 222.xx.xxx.3 dev ens192(网卡名)
python脚本:
在这里插入代码片
3、对 squid.conf 进行 动态增加或删除 ip
# 检查配置文件
squid -k parse
# 重载配置文件
squid -k reconfigure
ACL 访问控制
ACL 的功能
Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。
ACL 控制步骤
ACL访问控制的步骤:
1、使用acl配置项定义需要控制的条件
2、通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制
acl 列表名称 列表类型 列表内容
列表类型可选项:
src 源地址
dst 目标地址
port 目标地址
dstdomain 目标域
time 访问时间
maxconn 最大并发连接
url_regex 目标URL地址 # 可以定义大的范围比如http://www.baidu.com
urlpath_regex 整个目标URL路径 # 可以定位到每个网站的具体目标的url,比如百度音乐的一首歌的url
使用案例
acl all src 0.0.0.0/0.0.0.0
http_access deny all
~]#vim /etc/squid.conf
acl all src 0.0.0.0/0.0.0.0 (有些版本要这么写acl all src all)
acl MYLAN src 192.168.1.0/24 192.168.4.0/24
acl WORKTIME time MTWHF 08:30-17:30 (其中MTWHF是周一到周五的英文首字母)
http_access allow MYLAN WORKTIME
http_access deny all
~]#service squid reload
#注意要先写http_access allow MYLAN WORKTIME再写http_access deny all,因为先执行前面的,后面的就不执行了
# 黑名单限制,可以在ipblock 配置多个 黑名单 ip,或者在 dmblock 配置多个 黑名单域名,比如 .qq.com
acl IPBLOCK dst "/etc/squid/ipblock.list"
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
http_access deny IPBLOCK
http_access deny DMBLOCK
参考
Squid 3.x 升级为 Squid4
1、必须使用root安装,具有sudo权限,且用sudo执行命令都不行,过程中会报各种权限不够。肯定有其他低权限安装和使用的方法,但没有时间研究了。
2、装完后必须使用/usr/local/squid/sbin/squid -z先初始化缓存空间。
3、删除3之后没有重启服务器,在运行squid的时候报错:FATAL: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (17) File exists
,去/dev/shm目录下删掉squid的shm文件即可。
squid官网:http://www.squid-cache.org/Doc/
《squid中文指南》:http://zyan.cc/book/squid/index.html
《squid中文指南》:https://www.phpfans.net/manu/Squid/
https://xnathan.com/2017/02/28/squid-proxy/
https://xnathan.com/2017/03/01/squid-anony-proxy/
https://xnathan.com/2017/03/02/squid-proxy-pool/
http://blog.chinaunix.net/uid-25266990-id-2722465.html
https://blog.51cto.com/linuxme/372960
https://www.cnblogs.com/–smile/p/11090823.html