目录
一、缓存代理概述
Web代理的工作机制
作用:缓存网页对象,减少重复请求
代理的基本类型
- 传统代理:适用于Internet,需明确指定服务端
- 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
使用代理的好处
提高Web访问的速度
隐藏客户机的真实IP
二、部署缓存代理
主机 | IP地址 | 主要软件 |
---|---|---|
squid代理服务器 | 192.168.0.10 | squid-3.5.27.tar.gz |
WEB服务器 | 192.168.0.20 | Apache |
客户机 | 192.168.0.80 | 浏览器 |
1.编译安装Squid服务
[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf squid-3.4.6.tar.gz -C /opt/
[root@localhost opt]# cd squid-3.4.6
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid \ ##定义安装路径
--sysconfdir=/etc \ ##将配置文件修改到/etc目录下
--enable-arp-acl \ ##可在ACL中设置通过MAC地址进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter \ ##linux内核通过netfilter模块实现网络访问控制功能
--enable-linux-tproxy \ ##实现透明代理功能
--enable-async-io=100 \ ##异步I/O提升存储性能,可修改数值
--enable-err-language="Simplify_Chinese" \ ##用中文报错
--enable-undersote \ ##允许下划线
--enable-poll \ ##协调读写设备个数或读写设备顺序的函数
--enable-gnuregex ##c/c++常用的正则表达式
[root@localhost squid-3.4.6]# make && make install
[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost ~]# useradd -M -s /sbin/nologin squid
[root@localhost ~]# chown -R squid.squid /usr/local/squid/var/
[root@localhost ~]# vim /etc/squid.conf
cache_effective_user squid ##添加 指定程序用户
cache_effective_group squid ##添加 指定账户基本组
[root@localhost ~]# squid -k parse ##检查配置文件语法
[root@localhost ~]# squid –k rec #重新加载配置文件
[root@localhost ~]# squid -z ##初始化缓存目录
[root@localhost ~]# squid ##启动服务
[root@localhost ~]# netstat -ntap | grep 3128 #查看服务是否启动
2.将Squid服务添加到系统服务,写脚本
[root@localhost ~]# cd /etc/init.d
[root@localhost init.d]# vi squid
#!/bin/bash
# chkconfig: 35 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 -napt | 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 -napt | 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
[root@localhost init.d]# chmod +x /etc/init.d/squid
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on
[root@localhost init.d]# service squid start
[root@localhost init.d]# netstat -ntap | grep 3128
三、Squid服务传统代理
1.修改配置文件
vi /etc/squid.conf
http_access allow all ##允许http访问
#http_access deny all ##拒绝http访问,添加#
http_port 3128 ##squid服务端口号
cache_mem 64 MB ##指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB ##允许用户下载的最大文件大小,以字节为单位
maximum_object_size 4096 KB ##允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
2.设置防火墙规则
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
3.重新加载squid
[root@localhost ~]# service squid reload
4.测试效果
先用客户机正常访问web页面,再使用tail -10 /var/log/httpd/access_log命令在web服务器查看访问日志
可以看到第一次访问的是客户机,第二次访问的是缓存代理服务器
四、透明代理
squid服务器
需配置两张网卡,分别内网和外网
内网网卡地址:192.168.0.10
外网网卡地址:192.168.100.10
主机 | IP地址 | 主要软件 |
---|---|---|
squid代理服务器 | ens33:192.168.0.10 ens37:192.168.100.10 | squid-3.5.27.tar.gz |
WEB服务器 | 192.168.0.20 | Apach |
客户机 | 192.168.100.80 | 浏览器 |
1.配置squid配置文件
[root@localhost ~]# vi /etc/squid.conf
http_port 192.168.100.10:3128 transparent
[root@localhost ~]# systemctl restart squid
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
##防火墙策略
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #允许3128端口通过
2.客户机
地址:192.168.100.100 (外网)
设置网关
vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.10
3.测试效果
先用客户机正常访问web页面,再使用tail -10 /var/log/httpd/access_log命令在web服务器查看访问日志
可以看到第一次访问的是客户机,第二次访问的是缓存代理服务器
五、ACL控制
Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。
使用 acl 配置项定义需要控制的条件
定义格式:acl 列表名称 列表类型 列表内容 …
通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制
1.在配置文件中修改
vim /etc/squid.conf
acl localhost src 192.168.1.60/32
http_access deny localhost
重启服务
systemctl restart squid
其他的一些限制
vi /etc/squid.conf
acl localhost src 192.168.10.60/32 #针对固定源IP地址
acl MYLAN src 192.168.10.0/24 #针对某一网段
acl destionhost dst 192.168.10.30/32 #针对具体的目标IP地址
acl MC20 maxconn 20 #访问的最大并发连接数量
acl BURL url_regex -i ^rtsp:// ^emule:// #正则表达式的访问协议
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #访问的文件资源末尾
acl work time MTWHFAC 08:30-17:30 #访问时间
MTWHF:周一到周五
MTWHFAS:周一到周日
http_access deny destionhost #拒绝列表(注意置顶)
启用对象列表管理
mkdir /etc/squid #启用对象列表管理
vim dest.list
192.168.10.20
192.168.10.30
192.168.10.40 #目标web
vim /etc/squid.conf
acl destionhost dst "/etc/squid/dest.list"
http_access deny destionhost #拒绝列表(注意置顶)
六、squid日志分析
sarg软件用来分析squid服务的日志
在上篇博客的基础上做squid反向代理实验,安装squid的具体步骤见上篇博客链接:squid代理介绍----传统代理、squid代理-----透明代理模式
1.编译安装sarg软件
[root@server1 ~]# yum install -y gd gd-devel //图像处理
mkdir /usr/local/sarg
tar zxvf sarg-2.3.7.tar.gz -C /opt/ //解压安装包
cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \
--enable-extraprotection #额外安全防护
make && make install
2.修改配置文件
cd /etc/sarg/
vim sarg.conf
7/ access_log /usr/local/squid/var/logs/access.log //指定访问日志文件
25/ title "Squid User Access Reports" //网页标题
120/ output_dir /var/www/html/squid-reports //报告输出目录
178/ user_ip no //使用用户名显示
206/ exclude_hosts /usr/local/sarg/noreport //不计入排序的站点列表文件
184/ topuser_sort_field connect reverse //top排序中有连接次数、访问字节、降序排列 升序是normal
(注释掉)190/ user_sort_field reverse //用户访问记录 连接次数、访问字节按降序排序
257/ overwrite_report no //同名日志是否覆盖
289/ mail_utility mailq.postfix //发送邮件报告命令
434/ charset UTF-8 //使用字符集
518/ weekdays 0-6 //top排行的星期周期
525/ hours 0-23 //top排行的时间周期
633/ www_document_root /var/www/html //网页根目录
3.修改测试
#添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@localhost sarg]# sarg
SARG: 纪录在文件: 242, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2018Jul21-2018Jul21
yum install httpd -y
systemctl start httpd
systemctl stop firewalld
http://192.168.0.10/squid-reports
周期性计划
crontab -e
*/1 * * * * /usr/local/bin/sarg 每分钟生成一次,用于测试
#周期性计划任务执行每天生成报告crontab
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)
然后用客户机访问http://192.168.10.10/squid-reports
七、squid反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
1.介绍
传统和透明是为客户端服务的,借助squid加快访问web服务的速度,或者是公司内部对员工上网行为做限制使用的。反向代理模式下的squid的服务对象是web服务器,通过squid来隐藏真实web服务器IP,加快客户的访问速度,还有负载均衡的功能。
反向代理的设置,需要通过三个步骤来完成:
DNS解析
SQUID配置
端口转发
主机 | IP地址 | 主要软件 |
---|---|---|
squid代理服务器 | 192.168.0.10 | squid-3.5.27.tar.gz |
WEB服务器 1 | 192.168.0.20 | Apach |
WEB服务器 2 | 192.168.0.20 | Apach |
客户机 | 192.168.0.80 | 浏览器 |
web服务器部署
//安装httpd
yum install httpd -y
//设置网页内容
echo "this is web2!!!" > /var/www/html/index.html #web2换一下数字
route add -net 192.168.100.0/24 gw 192.168.158.10 #静态路由
//开启web服务
systemctl start httpd
squid反向代理配置
//设置防火墙规则
systemctl start firewalld
iptables -L #查看防火墙规则
iptables -F
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
vim /etc/squid.conf
#去掉透明代理设置反向代理
http_port 192.168.0.10:80 accel vhost vport
#节点服务器1最大访问30,权重1,别名web1
cache_peer 192.168.0.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
#节点服务器2最大访问30,权重1,别名web2
cache_peer 192.168.0.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
#访问yun.com匹配web1,web2节点
cache_peer_domain web1 web2 www.aa.com
service squid restart
测试
通过访问http://192.168.0.10/可以轮询访问到web2和web3网页