Squid全名Squid Cache(官网:http://www.squid-cache.org/),一个高性能的代理缓存服务器。主要支持FTP、HTTPS和HTTP协议。Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
下面我们来搭建一个代理服务器,同时完成一个多层代理的配置:
一、安装Squid3 ,在centos中,安装squid是非常简单的:
- 执行下在的命令:
yum install -y squid
- 配置文件目录:/etc/squid/squid.conf
-
启动服务
systemctl start squid.service(systemctl restart squid.service) -
配置系统防火墙规则,增加squid端口(squid默认的端口为:3128)
firewall-cmd --zone=public --add-port=3128/tcp --permanent
firewall-cmd --reload
二、验证服务器
- 打开Squid实时日志(日志目录:/var/log/squid/access.log)
tail -f /var/log/squid/access.log
- window系统使用:配置IE浏览器代理好后,访问外网网站,可看到日志文件有内容输出且页面正常打开,说明配置成功。
四、高级应用(多层代理)
在上面,我们完成了一个单代理服务器的简单配置和使用,接下来有个需求,阿里云上某台无外网服务器访问【*.baidu.com】这类请求时,需要通过公司的代理服务器访问目标服务器上的相关服务(如下图),对于其它请求则不用通过公司的代理服务器,那我们需要怎么配置?
1、首先在2台服务器上安装Squid;
2、在【代理服务-1】上完进行下配置
- 修改配置文件
vim /etc/squid/squid.conf #在http_access deny !Safe_ports 前新增下面的内容
#定义基于【目标域名】的策略
acl cnlist dstdomain .baidu.com#配置一个父代理服务器的信息
cache_peer 父代理服务器IP parent 3128 0 no-query no-digest#指定只有符合策略的请求才走父代理服务器
cache_peer_access 父代理服务器IP allow cnlist #对*.baidu.com的请求走上面配置的父代理never_direct allow cnlist #对*.baidu.com的请求不发送给源服务器,转向父代理
#指定总是要发给源服务器请求ACL策略
always_direct allow !cnlist # 对非*.baidu.com的请求不走父代理 - 重启Squid服务
systemctl restart squid.service
- 在无外网服务器上访问www.baidu.com,查看是否正常访问,是则说明配置生效
四、其它配置说明
1、 配置可访问代理服务器的IP
acl localnet src 请求电脑的IP
2、acl规则配置说明
格式:acl name type parm... #多个参数之间为OR的关系
squid有25种type,常用的类型及功能作用列举如下:
名称 | 作用 | 示例 | 备注 |
src/dst | 指定控制源或目标的IP地址列表 | acl localnet src 192.168.1.0/24 acl localnet src 172.16.10.0-172.16.19.0/24 | 地址控制勿用主机名,解析比较慢,主机对应IP变化后会失效,要使用srcdom等; |
srcdomain dstdomain | 指定源或目的的域名列表 | acl servers dstdomain .baidu.com | .作为通配符,它匹配此域的任何主机域,包括域名自身。无.则为精确匹配。 |
srcdom_regex dstdom_regex url_regex urlpath_regex ident_regex proxy_auth_regex req_mime_type | 指定按照指定的字段 进行正则表达式的匹配 | acl servers dstdom_regex -i baidu | 支持一些参数,如-i 大小写不敏感; |
ident/proxy_auth | 支持身份过滤 | acl auser ident proxy | |
port | 支持端口的过滤 | acl SafePort port 80 8080 8000 | 端口比较适合用范围来表示,通常 |
myip/myport | 指定squid服务器的地址与端口 | acl aport myport 80 acl pport myport 3128 | myip用于在系统有多个接口时指定自己的IP myport用于squid在多个端口上监听时指示不同PORT |
method | 支持HTTP请求方法的过滤 | acl Uploads method PUT POST | |
proto | 支持不同协议的过滤 HTTP/HTTS/FTP等 | acl ftpcl proto ftp | |
maxconn | 指定每个IP的最大连接数 | acl MaxCon maxconn 10 | |
arp | 检测客户端的MAC地址 | acl mybox arp 00:10:20:30:40:50 |