day11-squid
运行&维护 operation&maintance
squid代理服务器
功能:代理、缓存、ACL(访问控制)
角色:正向代理、透明代理(网关)、反向代理)
传统代理(正向代理)
客户程序(如浏览器)需指定代理服务器的地址、端口
透明代理
客户端需要设置特定的网关
反向代理
负载均衡
优势
通过缓存增加访问速度
提高网络的安全性
Squid历史悠久,技术积淀深厚,开源
缺点
性能不足,借助于windows、linux等通用性操作系统才能实现上网加速等功能
#yum install squid –y
主程序:/usr/sbin/squid
主配置文件:/etc/squid/squid.conf
默认访问日志:/var/log/squid/access.log
默认监听端口:TCP 3128
配置文件选项:
http_port 3128 //端口
access_log /var/log/squid/access.log //日志文件
squidcache_mem 64 MB //内存缓存大小
cache_diir ufs /var/spool/squid 100 16 256 //本地硬盘缓存
ufs代表文件类型,(若其他需要插件)
/var/spool/squid:实际存放缓存文件的路径
100:代表100M(缓存容量)
16:缓存目录下一级目录个数
256:二级子目录
常用配置
visible_hostname a //设置主机名
maximum_object_size 4096 KB //最大缓存文件的容量
reply_body_max_size 10240000 allow all //可以给用户返回的资源最好大容量
实验1:传统代理 客户端配置代理IP及端口访问WEB服务
A为squid服务器、B为HTTP服务器、C为客户端
A主机设置
[root@a squid]# /etc/init.d/squid start
[root@a squid]# netstat -anpt |grep "squid"
tcp 0 0 :::3128 :::* LISTEN 9833/(squid)
B主机设置
echo "this is test b"> /var/www/html/index.html
[root@b html]# /etc/init.d/httpd start
C主机访问WEB服务的IP或域名
验证结果
A主机查看
[root@a squid]# cat /var/log/squid/access.log
1474094876.954 5 192.168.100.1 TCP_MISS/304 236 GET http://192.168.100.101/ - DIRECT/192.168.100.101
B主机查看
[root@b ~]# tail -f /var/log/httpd/access_log
192.168.100.100 - - [17/Sep/2016:14:47:57 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
C主机
当文件大于10MB时就报错
注意
# And finally deny all other access to this proxy
http_access deny all 这条规则是只允许除本机或机网段,若需所有网络访问修改为http_access allow all
透明代理
工作机制
linux网关提供透明代理服务,客户端无需配置
局域网通过代理访问公网中的网站
需要设置防火墙策略,将客户机的WEB访问数据转发给代理服务程序处理
实验2:透明代理 客户端配置网关,代理服务器完成转发功能
CàAàB
A主机代理服务器
修改配置文件
http_access allow all
http_port 3128 transparent
开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
网关设置转发
iptables 语法格式
iptables –t 表名 –I 链 条件 –J 结果
[root@a ~]# iptables -tnat -I PREROUTING -ieth0 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[root@a ~]# iptables -tnat -I PREROUTING -ieth0 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128
防火墙3个表,5个链
filter(过滤表)
INPUT(入站),OUTPUT(出站),FORWARD(转发)
nat(地址转换表)
mangle(管理表)
PREROUTING 路由前
POSTROUTING 路由后
源地址转换路由后
目标地址转换路由前
-A 插入一条规则
-I eth0 指定数据包从哪个网卡进来(input)
-s 指定源地址
-p 指定协议
--dport 指定目标端口
B主机为WEB——IP为192.168.101.101
C主机客户端配置
网关指向代理服务器主机
验证
A主机
1474113478.315 9 192.168.100.102 TCP_MISS/200 429 GET http://192.168.101.101/ - DIRECT/192.168.101.101 text/html
B主机
192.168.101.100 - - [17/Sep/2016:19:57:58 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
反向代理——与传统代理的方向相扳
代替公网用户访问组织内部的web服务器
部署基于地区的CND服务器
实验3:反向代理 代理服务器相当于WEB服务器,但不是真的
parent 父级 真实的服务器上取数据
sibling 兄弟级 代理服务器上取数据
A
http_port 80 vhost
cache_peer 192.168.101.101 parent 80 0 originserver
若是1台服务器多个虚拟主机
http_port 80 vhost
cache_peer 192.168.101.101 parent 80 0 originserver name=www
cache_peer 192.168.101.101 parent 80 0 originserver name=bbs
cache_peer_domain www www.b.com
cache_peer_domain bbs bbs.b.com
B主机
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html/web1
ServerName www.a.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/web2
ServerName bbs.a.com
</VirtualHost>
C主机
[root@c ~]# curl http://192.168.100.100
this is test b
C客户机验证
192.168.100.100 b www.b.com bbs.b.com
[root@c ~]# curl www.b.com
this is test web1
[root@c ~]# curl bbs.b.com
this is test web2
Squid缓存
缓存管理机制
refresh_pattern语法格式
refresh_pattern [-i] regexp min percent max [options]
-i 忽略大小写
regexp 正则表达式
min 是过时响应的最低时间限制 最小缓存时间
max参数是存活响应的最高时间限制 最大缓存时间
中间的百分比为最好后修改系数
最后修改系数=响应时间/资源时间
如果定义为20%的话,则:
20%=响应时间/资源时间
percent根据最好后为何会那天系数LM-factor计算过期时间
LM-factor=(response age)/(ressource age)
resource age =对象进入cache的时间-对象的last_modified
response age =当前时间-对象进入cache的时间
清理缓存
方法一:
grep -r 资源 缓存路径
grep -r a.html /var/spool/squid/
rf -rf xxx
grep -r $1 /var/spool/squid/ 或 for i in `cat a.txt` do grep -r $i /var/spool/squid/|awk '{print $2}' done
方法二:
vim /etc/squid/squid.conf
acl purge method PURGE
http_access allow purge locathost
squidclient -h 代理IP -p 端口 -m PURGE http://www.b.com
squidclient -h 127.0.0.1 -p 80 -m PURGE
可以HTTPD服务配置文件里加
cachedisable /var/www/html/web1/index.html
禁止缓存这个页面
Squid 访问控制
注意:先定义ACL,给ACL取个名字,在允许或拒绝该ACL
定义ACL格式:
ACL ACL名称 列表类型 列表内容
调用ACL
http_access allow acl名称
http_access deny acl名称
常用的acl列表类型
src 源地址
dst 目标地址
port 目标端口
dstdomain 目标域
time 访问时间
maxconn 最大并发连接
url_regex 目标URL地址 url=http://www.b.com/a.html
uurlpath_regex 整个目标URL路径 urlpath=/a.html
ACL规则顺序:
未设置任何规则时,拒绝所有访问请求
已设置规则时,集资进行检查,找到匹配即停止,否则采用与最好后一条规则相反的权限
ACL WORK time MTWHF 09:00-18:00 定义一个WORK的ACL时间为早上9点到下午18点
http_access allow MYNET WORK 启用WORK规则
http_access deny all 拒绝所有
定义多个的IP和域名
acl ipaddress dst "/etc/squid/ip.list"
acl domainname dstdomain "/etc/squid/domainname.list"
拒绝规则
http_access ipaddress deny all
htt_domainname deny all
限制源——网段
acl lan1 src 192.168.1.0/24
限制源——单IP
acl pc1 src 192.168.1.100/24
限制目标区域——域名
acl blk_domain dstdoamin .qq.com .baidu.com
限制并发——10个人同时连接代理
acl max10_conn maxconn 10
限制URL——地址栏开始是XXX
acl blk_url url_regex -i ^rtsp:// ^mms://
限制URL路径
acl blk_words urlpath_regex -i sex adult
acl fiile urlpath_regex -i \.rmvb$ \.mp4$ \.mp3$
限制MAC地址
acl aclname arp mac-address
限制端口
acl aclname port 80 0-1024...
定义从百度链接转到XXX.COM
acl aclname referer_regex -i baidu.com
拒绝百度链接转换
http_access deny aclname