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

posted @ 2016-09-17 21:39  Final233  阅读(203)  评论(0编辑  收藏  举报