简介
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
在宿主机浏览器设置代理
浏览器访问web_server
查看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
查看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
此时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
浏览器访问web_server
查看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
查看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"