简介

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求
代理方式
正向代理可以让用户使用squid代理服务器进行上网,还可以基于IP地址、网站关键字、下载文件后缀等实现类似行为管控的功能
透明代理则不需要用户再浏览器输入代理服务器的ip,只需将服务器的网关设置成代理服务器的ip地址即可
反向代理可以大幅提升网站的访问速度,减轻网站后台服务器的负载压力

定制访问控制规则

#设置访问控制策略语法
acl 策略名字 src(类型,ip/port) ip/port
#注意:把拒绝策略放在允许策略前面

#自己定制原地址acl策略
acl deny_ip src 192.168.1.105
#并定制允许/拒绝此策略
http_access allow deny_ip

#定制策略文件(ip)
acl deny_group src "/etc/squid/deny_group"
http_access allow deny_group

#定制目标地址acl策略
acl deny_destination dst 192.168.29.133
http_access allow deny_destination

#定制目标网站acl策略
acl deny_web dstdomain -i www.baidu.com
http_access allow deny_web

#定制含有xxx的网站
acl deny_url url_regex -i baidu.com
http_access allow deny_url

#定制超级用户权限
acl vip arp MAC地址
http_access allow vip

#定制时间策略(SMTWHFA,日到六)
#跨越子夜用取反,跨天数要分两行
acl test1 src ip
acl test2 time MTWHF 9:00-18:00
http_access allow test1 test2

#禁止下载后缀名文件
acl test urlpath_regex -i \.mp3$
http_access allow test

前期准备

准备两台Centos7虚拟机和一台win7虚拟机,配置IP地址和hostname,关闭防火墙和selinux,同步系统时间

ip hostname
192.168.29.145,192.168.31.134 squid_server
192.168.31.129 win7
192.168.29.134 web_server

配置webserver

#从官网下载nginx官方Yum源
[root@web_server ~]# yum install nginx -y
#配置首页
[root@web_server ~]#echo "node1" > /usr/share/nginx/html/index.html
#启动服务
[root@web_server ~]# systemctl start nginx

安装squid

[root@squid_server ~]# yum install squid -y

正向代理

配置并开启服务

[root@squid_server~]# vi /etc/squid/squid.conf
http_port 3128
#设定缓存文件夹,大小,一级目录个数,二级目录个数
cache_dir ufs /var/spool/squid 100 16 256
cache_effective_user squid
cache_effective_group squid
#添加主机名
visible_hostname    localhost
cache_mem 100 MB
#开启服务
[root@squid_server~]# systemctl start squid.service 

在宿主机浏览器设置代理
Centos7部署squid代理和缓存服务器_第1张图片
浏览器访问web_server
Centos7部署squid代理和缓存服务器_第2张图片
查看web_server和squid_server日志

[root@web_server ~]# tail -f /var/log/nginx/access.log
192.168.29.145 - - [29/Jun/2020:16:06:10 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "192.168.29.1"

[root@squid_server~]# tail -f /var/log/squid/access.log
1593417955.839      2 192.168.29.1 TCP_MEM_HIT/200 355 GET http://192.168.29.134/ - HIER_NONE/- text/html

关闭nginx服务

[root@web_server ~]# systemctl stop nginx

浏览器访问web_server
Centos7部署squid代理和缓存服务器_第3张图片
查看squid_server日志

[root@squid_server~]# tail -f /var/log/squid/access.log
1593418080.136      1 192.168.29.1 TCP_REFRESH_FAIL_OLD/200 451 GET http://192.168.29.134/ - HIER_DIRECT/192.168.29.134 text/html

透明代理

修改配置文件

[root@squid_server~]# vi /etc/squid/squid.conf
http_port 192.168.31.134:3128 transparent
cache_dir ufs /var/spool/squid 100 16 256
cache_effective_user squid
cache_effective_group squid
visible_hostname    localhost
cache_mem 100 MB

重启服务

systemctl restart squid

配置DNS转发规则

[root@squid_server~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o ens33 -j MASQUERADE

开启数据包转发功能

[root@squid_server~]# vi /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@squid_server~]# sysctl -p

win7配置网关和DNS
Centos7部署squid代理和缓存服务器_第4张图片
此时ping www.baidu.com只能出现公网IP地址但ping不通
在这里插入图片描述
设置数据包转发规则

[root@squid_server~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 
[root@squid_server~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128 
[root@squid_server~]# iptables -t nat -A POSTROUTING -s 192.168.31.0/24 -o ens33 -j SNAT --to 192.168.29.145
[root@squid_server~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

此时ping通www.baidu.com
Centos7部署squid代理和缓存服务器_第5张图片
浏览器访问web_server
Centos7部署squid代理和缓存服务器_第6张图片
查看web_server和squid_server日志

[root@web_server ~]# tail -f /var/log/nginx/access.log
192.168.29.145 - - [29/Jun/2020:16:32:49 +0800] "GET / HTTP/1.1" 200 6 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "192.168.31.129"

[root@squid_server~]# tail -f /var/log/squid/access.log
1593421346.838      2 192.168.31.129 TCP_MISS/200 380 GET http://192.168.29.134/ - ORIGINAL_DST/192.168.29.134 text/html

反向代理

修改配置文件

[root@squid_server~]# vi /etc/squid/squid.conf
http_port 80 vhost
#指定真正的服务器
#类型:parent父亲
#后台web服务器的真正端口
#代理服务器之间通讯的端口
#weight权重,originserver原始服务器
cache_peer 192.168.29.133 parent 80 0 originserver

浏览器访问squid_server
Centos7部署squid代理和缓存服务器_第7张图片
查看web_server和squid_server日志

[root@squid_server~]# tail -f /var/log/squid/access.log
1593420981.170      0 192.168.29.1 TCP_MEM_HIT/200 389 GET http://192.168.29.145/ - HIER_NONE/- text/html

[root@web_server ~]# tail -f /var/log/nginx/access.log
192.168.29.145 - - [29/Jun/2020:16:56:55 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "192.168.29.1"