squid代理
优势:
1.提高客户端访问速度;
2.隐蔽内部主机的ip地址;
3.部署简单,可以实现访问控制;
作用
——代理上网(正向代理,透明代理)
——网站静态页面缓存加速(反向代理)
主机名称 | IP地址 | 角色 |
---|---|---|
client | 192.168.40.24 | 客户端 |
squid | 192.168.40.23 10.10.10.11 | squid服务器 |
web | 10.10.10.12 | web服务器 |
一、传统模式
客户端必须在自己的浏览器里指定代理服务器的ip地址和代理服务监听的端口号,才能通过squid代理服务器上网。
前提条件两张网卡能够两两ping通
[root@client ~]# ping 192.168.40.23
PING 192.168.40.23 (192.168.40.23) 56(84) bytes of data.
64 bytes from 192.168.40.23: icmp_seq=1 ttl=64 time=0.260 ms
64 bytes from 192.168.40.23: icmp_seq=2 ttl=64 time=0.335 ms
^C
--- 192.168.40.23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.260/0.297/0.335/0.041 ms
[root@squid ~]# ping 10.10.10.12
PING 10.10.10.12 (10.10.10.12) 56(84) bytes of data.
64 bytes from 10.10.10.12: icmp_seq=1 ttl=64 time=0.163 ms
64 bytes from 10.10.10.12: icmp_seq=2 ttl=64 time=0.860 ms
64 bytes from 10.10.10.12: icmp_seq=3 ttl=64 time=0.339 ms
^C
--- 10.10.10.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.163/0.454/0.860/0.295 ms
[root@squid ~]#
将客户端的网关指向squid服务器
[root@client ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
ONBOOT=yes
DNS1=192.168.40.2
IPADDR=192.168.40.24
PREFIX=24
GATEWAY=192.168.40.23
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
[root@client ~]#
开启路由转发功能
[root@squid ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
[root@squid ~]# sysctl -p
[root@squid ~]# yum install -y squid
[root@squid ~]# systemctl start httpd
[root@squid ~]# systemctl enable httpd
测试访问
[root@client ~]# curl 10.10.10.12
^C
[root@client ~]# curl -x sockers5://192.168.40.23:3128 10.10.10.12
bbs.jw.com-1
关闭web服务器测试
[root@web ~]# systemctl stop httpd
[root@web ~]#
[root@client ~]# curl -x sockers5://192.168.40.23:3128 10.10.10.12
bbs.jw.com-1
结论:客户端访问得到的结果是使用的squid的缓存的数据并非web服务器的数据,在大型的网站当中可以使用这种缓存的方式减少web服务器的压力
二、透明模式
透明代理,本质作用是和普通代理是一样的,但是透明代理,客户端不需要在自己的浏览器里指定代理服务器的ip地址和代理服务监听的端口号,给客户端的感觉自己是直接和公网通信,但是必须把网关地址指向代理服务器的内网接口ip地址。
修改配置信息
[root@squid ~]# vim /etc/squid/squid.conf
# Squid normally listens to port 3128
http_port 192.168.40.23 3128 transparent
[root@squid ~]# systemctl reload squid
[root@squid ~]# iptables -t nat -A PREROUTING -i eno16777736 -s 192.168.40.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
访问测试
[root@client ~]# curl 10.10.10.12
bbs.jw.com-1
[root@client ~]#
限制访问文件的大小
正常情况下
[root@web html]# dd if=/dev/zero of=s count=1M bs=1024
[root@client ~]# wget 10.10.10.12/size.html
--2020-09-10 04:16:38-- http://10.10.10.12/s
Connecting to 10.10.10.12:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1.0G) [text/html]
Saving to: ‘size.html’
30% [===========> ] 328,439,473 87.1MB/s eta 10s ^C
添加访问策略
[root@squid ~]# grep "500" /etc/squid/squid.conf
reply_body_max_size 500 MB
[root@squid ~]# systemctl restart squid
总结:传统模式与透明模式的主要区别就是访问的时候不用手动添加代理和端口对用户的体验更加的友好
三、反向代理
实验拓扑图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jf4hTr4g-1599749777253)(squid.assets/1599732191580.png)]
主机名称 | IP地址 | 角色 |
---|---|---|
client | 192.168.40.24 | 客户端 |
squid | 192.168.40.23 10.10.10.11 | squid服务器 |
web-1 | 10.10.10.12 | web服务器 |
web-2 | 10.10.10.13 | web服务器 |
传统模式和透明是为客户端服务的,借助squid加快访问web服务的速度,或者是公司内部对员工上网行为做限制使用的,而反向代理模式下的squid的服务对象是web服务器,通过squid来隐藏真实web服务器IP,加快客户的访问速度,还有负载均衡的功能。
将两台web服务器的网关指向squid服务器
[root@web-1 html]# grep -i "gateway" /etc/sysconfig/network-scripts/ifcfg-eno16777728
GATEWAY=10.10.10.11
[root@web2 ~]# grep -i "gateway" /etc/sysconfig/network-scripts/ifcfg-eno16777736
GATEWAY=10.10.10.11
web服务端测试
[root@squid ~]# curl 10.10.10.12
web-1
[root@squid ~]# curl 10.10.10.13
web-2
[root@squid ~]#
squid配置
[root@squid ~]# grep -A 2 "^http_port" /etc/squid/squid.conf
http_port 80 vhost
cache_peer 10.10.10.12 parent 80 0 originserver no-query originserver round-robin name=apache1
cache_peer 10.10.10.13 parent 80 0 originserver no-query originserver round-robin name=apache2
[root@squid ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@squid ~]# sysctl -p
[root@squid ~]# systemctl restart squid
squid做反向代理缓存静态页面内容
[root@web-1 ~]# systemctl stop httpd
停止其中的一台机器无论怎么刷新访问都是web-2
要是两台机器都停止了就会出现访问最后访问的页面
四、ACL配置
之所以我们没有做ACL访问策略就能访问是因为在默认的配置文件当中就是包含了这些网段的内容
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
初识ACL规则
我们将其中的 acl localnet src 192.168.0.0/16给注释掉重启服务就会发现访问被拒绝
由两部分组成
1、acl 列表名称 列表类型 列表内容
2、http access allow或者deny列表名称
内容 | 字段说明 |
---|---|
src | 源地址 |
dst | 目标地址 |
port | 目标端口 |
dstdomain | 目标域 |
time | 访问时间 |
maxconn | 最大连接 |
url_regex | 目标URL地址 |
urlpath_regex | 整个目标URL地址 |
备注:要是只是写了acl没有写http access默认是拒绝。