目录
一、Squid配置信息
软件包: squid
服务: squid
配置文件: /etc/squid/squid.conf
端口号: TCP 3128
默认访问日志文件: /var/log/squid/access.log
说明:Squid 在3.0 版本后使用C语言进行重构,效率大大提升,Centos6标配Squid 3.0 以上版本
二、正向代理
1.标准代理服务器
(1)环境准备
三台虚拟机,一台代理服务器,一台客户端(图形化),一台网页服务器
(2)配置代理
#代理服务器,添加网卡,10网段和11网段
#更改网段,ip addr 查看需要添加的网卡名,添加的新网卡里删除UUID,更改网卡名和网段。
vim /etc/sysconfig/network-scrips/ifcfg-ens33
#重启网卡
systemctl restart network
#开启路由转换
vim/etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
#配置squid代理
yum -y install squid
#文件里为可以识别的文件后缀
vim /etc/squid/mime.conf
vim /etc/squid/squid.conf
#取消注释即可
cache_dir /var/spool/squid 100 16 256
#/var/spool/squid为缓存路径,100为100MB的缓存空间
#在squid内最多创建16个一级子目录,每个一级子目录可以创建256个子目录。
#重启服务
systemctl restart squid
#客户机添加网卡,10网段
#修改网段,网关指向代理服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
(3)配置网页服务
#网页服务器,添加网卡,11网段
#修改网段为11网段,网关指向代理服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#配置网页文件
echo “hello world” >> /var/www/html/index.html
systemctl restart network httpd
systemctl enable network httpd
#监听访问日志
tailf /var/log/httpd/access_log
(4)不使用代理访问测试
a.客户机打开浏览器访问
浏览器—设置—高级网络—设置—不使用代理
浏览器访问192.168.11.120(网页服务器IP)
b.观察日志
网页服务器
查看监听日志,此时没有开启代理功能,所以IP来源为客户机
(5)使用代理访问测试
网页服务器
查看监听日志,此时开启代理功能,所以IP来源为代理服务器
(6)代理服务器查看缓存
cd /var/spool/squid/
ls
tree
2.透明代理缓冲服务器
#代理服务器执行
vim /etc/squid/squid.conf
#添加transparent,即可实现
http_port 3128 transparent
#限制用户下载大于10MB的文件
reply_body_max_size 10 MB
systemctl restart squid
#添加防火墙规则
iptables -t nat -A PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#客户端取消代理再次访问测试
三、反向代理
4台机器。
一个网关,一个外网,两台内网服务器,用来搭建网站
1.先配置两个内网的机器配置网关
安装Apache 在创建一个首页文件 并启动服务
2.代理服务器(网关)
yum -y install squid
vim /etc/squid/squid.conf
#允许客户端访问
http_access allow all
#监听的IP和端口
http_port 200.200.200.102:80 vhost
#配置后端服务器
cache_peer 192.168.14.101 parent 80 0 originserver round-robin weight=1
cache_peer 192.168.14.104 parent 80 0 originserver round-robin weight=1
systemctl restart squid
3.测试机配置网关,访问代理服务器外网网关ip,测试
错误一:若不删除测试机的环境变量,不然会出现proxy3128端口的拒绝访问报错
错误二:若从上面的实验做过来,可能会出现拒绝访问,没有到服务器的路由,原因是路由转发没了,重新写一遍路由转发或服务器网关
扩展:就是反向代理负载均衡,与Nginx功能相同,但是生产中用Nginx较多,因为处理高并发强,(当访问量特别高时,可先用硬件负载调节器,然后分给多个Nginx负载均衡,硬件处理能力最高)
Nginx配置文件中可以写worker_processes auto; 代表自动分配线程,会按照当前硬件线程数来
四、访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 squid访问控制有两个要素:ACL元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。
1.ACL元素类型
-
src:源地址(即客户机IP地址)
-
dst:目标地址(即服务器IP地址)
-
srcdomain:源域名(即客户机名称)
-
dstdomain:目标域名(即服务器名称)
-
time:一天中的时刻和一周内的一天
-
url_regex:URL规则表达式匹配
-
urlpath_regex:URL-path规则表达式匹配,省略协议和主机名
-
proxy_auth:通过外部程序进行用户验证
-
maxconn:单一IP的 大连接数
2.ACL格式
为了使用控制功能,必须先设置ACL规则并应用。ACL声明的格式如下:
别名的声明:acl命令
格式:acl {自定义别名} {匹配元素类型} {匹配对象}
案例:acl client src 192.168.10.110
访问控制:
http_access deny 声明了的别名
http_access allow 声明了的别名
案例:http_access deny client
注:
①acl_element_name 可以是任一个在ACL中定义的名称
②任何两个ACL元素不能用相同的名字
③每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;即任一ACL元素的值被匹配,则这个ACL元素即被匹配。
④并不是所有ACL元素都能使用访问列表中的全部类型
⑤不同的ACL元素写在不同行中,squid将把他们组合在一个列表中
3.访问条目
我们可以使用许多不同的访问条目。下面是我们常用的几个:
a、http_access:允许HTTP访问
b、no_cache:定义对缓存请求的响应。
访问列表的规则由一些类似'allow'或‘deny’的关键字构成,用以允许或拒绝向特定或一组ACL元素提供服务。
①一个访问列表可以由多条规则组成
②如果没有任何规则与访问请求匹配,默认动作将与列表中 后一条规则对应。
③一个访问条目中所有元素将用逻辑与运算连接
④http_access Action 声明1 AND 声明2 AND 声明 OR.
⑤http_access Action 声明3
⑥多个http_accesss声明间用或运算连接,但每个访问条目的元素间用与运算连接。
⑦列表中的规则总是遵循由上而下的顺序
⑧这些规则按照他们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配就立即结束。
4.访问控制实例
(1)允许网段10.0.0.124/24以及192.168.10.15/24内的所有客户机访问代理服务器,并且允许在 文件/etc/squid/guest列出的客户机访问代理服务器。拒绝除此之外其他所有的客户机。
acl clients src 10.0.0.124/24 192.168.10.15/24
acl guest src "/etc/squid/guest"
acl all src 0.0.0.0/0
#规则执行策略,自上而下依次执行,匹配即停止
http_access allow clients
http_access allow guest
http_access deny all
其中/etc/squid/guest的内容为
192.168.10.3/24
210.113.24.8/24
10.0.1.24/25
(2)允许域名为kernal.com、linuxlc.com的两个域名访问你本地代理服务器,其他的域名都将拒绝本地代理服务器:
acl permitted_domain src kernal.com linuxlc.com
acl all src 0.0.0.0/0
http_access allow permitted_domain
http_access deny all
(3)使用正则表达式,拒绝客户机通过代理访问包含“sexy”等关键字的网站
acl deny_url url_regex -i sexy
htttp_access deny deny_url
(4)拒绝客户机通过代理访问文件中指定IP或者域名的网站,其中文件/etc/squid/deny_ip中存放有拒绝访问的IP地址,文件/etc/squid/deny_dns中存放有拒绝访问的域名:
acl deny_ip dst "/etc/squid/deny_ip"
acl deny_dns dst "/etc/squid/deny_dns"
http_access deny deny_ip
http_access deny deny_dns
(5)允许和拒绝指定的用户访问指定的网站,其中,允许客户1访问网站http://www.sina.com.cn,而拒绝客户端2访问网站http://www.163.com
acl client1 src 192.168.0.118
acl client1_url url_regex ^http://www.sina.com.cn
acl client2 src 102.168.0.119
acl client2_url url_regex ^http://www.163.com
http_access allow client1 client1_url
http_access deny client2 client2_url
(6)允许所有的用户在规定时间内(周一至周四的8:30到20:30)访问代理服务器,只允许特定的用户(系统管理员,网段为192.168.10.0/24)在周五下午访问代理服务器,其他的在周五下午一点至六点一律拒绝访问代理服务器:
acl allclient src 0.0.0.0/0
acl administrator src 192.168.10.0/24
acl common_time time MTWH 8:30-20:30
acl manager_time time F 13:00-18:00
http_access allow allclient common_time
http_access allow administrator manager_time
http_access deny manager_time