首页 > 代码库 > 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