首页 > 代码库 > day11-squid

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

day11-squid