一、Web代理的工作机制:
1、缓存网页对象,减少重复请求
二、缓存代理概述:
1、代理的基本类型:
- 传统代理:适用于Internet,需明确指定服务端
- 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
2、使用代理的好处;
- 提高Web访问速度
- 隐藏客户机的真实lP地址
三、实验代码:
实验1:传统代理
实验准备:
一台squid、一台httpd的web服务器
实验过程:
在两台服务器上:
iptables -F
iptables -t nat -F
setenforce 0
在web服务器上:
yum install httpd -y
systemctl start httpd
cat /var/log/httpd/access_log ##查看网站日志
在squid服务器上:
yum install gcc-gcc++ -y
tar zxvf squid.tar.gz
cd squid/
./configure --prefix=/usr/local/squid \ ##安装路径
--sysconfdir=/etc \ ##配置文件位置
--enable-arp-acl \ acl
--enable-linux-netfilter \ ##过滤
--enable-linux-tproxy \ ##透明代理功能模块
--enable-asysnc-io=100 \ ##吞吐量
--enable-err-language="Simplify_Chinese" \ ## 简体中文字符集
--enable-underscore \ ##支持带有下划线的字符
--enable-poll \ ##poll内模块
--enable-gnuregex ##支持正则表达式
make && make install
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid 程序性用户
chown -R squid.squid /usr/local/squid/var/ 给予权限
vim /etc/squid.conf ##59行后面添加 #####代理实质代码!!
cache_effective_user squid
cache_effective_group squid
squid -k parse
squid -z
squid ##启动服务!
netstat -ntap | grep squid ##查看服务状态!
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭 squid..."
$0 start &> /dev/null
echo "正在启动 squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法: $0{start|stop|status|reload|check|restart}"
;;
esac
chmod +x squid
chkconfig --add squid
chkconfig --level 35 squid on
service squid stop
service squid start
vim /etc/squid.conf ####代理实质代码!!
在第56行添加:
http_access allow all
在第60行后面添加:
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service squid reload
自己手动在浏览器上配置代理服务器的地址,访问web网站,在web的日志发现是代理服务器来访问的,即实验成功!!
实验2:透明代理:
实验准备:
在squid服务器上。两个仅主机模式网卡:
ip36:192.168.10.1 (NETMASK) 客户机浏览器的网关
ip33:192.168.195.128 代理器与网站之间接口
vim /etc/sysctl.conf ##添加
net.ipv4.ip_forward=1
sysctl -p
service network restart
ifconfig
vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent
squid -k parse ##验证语法
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT -- 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT -- 3128
service squid reload
四、ACL访问控制
1、ACL访问控制方式
- 根据源地址、目标URL、文件类型等定义列表
- acl列表名称 列表类型 列表内容…
- 针对已定义的acl列表进行限制
- http_access allowo或deny列表名称…
- ACL规则优先级
- —个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配。
- 所有规则都不匹配时,Squid会使用与最后一条相反的规则
2、常用的ACL列表类型:
- src →源地址
- dst →目标地址
- port→端口
- dstdomain →目标域
- time →访问时间
- maxconn →最大并发连接
- url_regex →目标URL地址
- Urlpath_regex →整个目标URL路径
实验3:ACL访问控制
在squid 服务器上
vim /etc/squid.conf
acl hostlocal src 14.0.0.100/32 ##在开头添加,拒绝目标客户端window浏览器的地址
# Deny requests to certain unsafe ports ##定位,在下面添加
http_access deny hostlocal
service squid restart
实验4:日志分析:
在squid服务器上:
yum install gd gd-devel -y sarg的开发包
mkdir /usr/local/sarg
tar zxvf sarg.tar.gz
cd sarg/
./configure --prefix=/usr/local/sarg --enable-extraprotection
make && make install
vim /etc/sarg/sarg.conf 去掉#
7#指定访问日志文件
25#网页标题
120#报告输出目录
178#用户名显示
184#topuser_sort_field connect reverse top排序中有连接次数、访问字节
190#注释掉 用户访问记录连接次数、访问字节按降序排序
206#不计入排序的站点列表
257#同名的日志是否覆盖?
289#发送邮件报告的命令
434#使用字符集
518#top排行的星期周期
525#top排行的时间周期
633#网页根目录
touch /usr/local/sarg/noreport ###添加不计入站点的文件,添加域名将不再显示排序中
ln -s /usr/local/sarg/sarg/bin/sarg /usr/local/bin/
sarg
安装httpd
在浏览器上面访问14.0.0.15/squid-reports ##即可查看
添加每日的计划性任务:每日生成日志
sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
五、反向代理概述
- 如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器
请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。 - 反向代理网站加速:
- 缓存网页对象,减少重复请求
- 将互联网请求轮训或按权重分配到内网Web服务器
- 代理用户请求,避免用户直接访问Web服务器,提高安全
实验5:squid方向代理:
在squid服务器上:
# Squid normally listens to port 3128 ##在后面添加
http_port 14.0.0.15:80 accel vhost vport ##squid服务器的地址
cache_peer 14.0.0.14 parent 80 0 no_query originserver round-robin max_conn=30 weight=1 name=web1 ##子web网站的地址
cache_peer 14.0.0.16 parent 80 0 no_query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com ##域名解析
systemctl stop httpd
service squid stop
service squid start
在两个web服务器上:
cd /var/www/html/index.html ##<h1> </h1>
systemctl start httpd
iptables -F
setenforce 0
在客户端的浏览器上:
C盘-Windows-system32-drivers-etc-hosts ##添加14.0.0.15 www.yun.com
浏览器上面的设置代理上的端口号修改为80