一、squid代理服务器应用
缓存代理概述
代理的基本类型
●传统代理:适用于Internet,需明确指定服务端,用户需要手动输入一个代理服务器的IP:PORT
●透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理,用户不需要指定代理服务器的IP:PORT,同时用户对于是否使用了代理服务器时无感知的
透明代理的实现策略:使用路由、防火墙规则进行重定向给代理服务器处理原理
代理的优点
提升web访问速度
隐藏客户机的真实IP地址
搭建squid
准备虚拟机
服务器 | IP |
---|---|
squid服务器 | 192.168.59.129 |
web1 | 192.168.59.128 |
web2 | 192.168.59.130 |
cllent | 192.168.59.22 |
1、安装依赖包
yum -y install gcc gcc-c++ make
2、解压squid安装包
[root@squid opt]# tar xf squid-3.5.27.tar.gz
3、编译安装
cd squid-3.5.27/
[root@squid squid-3.5.27]# ./configure --prefix=/usr/local/squid
> --sysconfdir=/etc #将配置文件修改到/etc目录下
> --enable-arp-acl #可在ACL中设置通过MAC地址进行管理,防止IP欺骗
> --enable-linux-netfilter #使用内核过滤
> --enable-linux-tproxy #支持透明模式
> --enable-async-io=100 #异步i/o,提升存储性能
> --enable-err-language="Simplify_Chinese" #错误信息的显示语音
> --enable-underscore #允许URL中有下划线
> --enable-poll #使用Poll模式,提升性能
> --enable-gnuregex #使用GNU正则表达式
make && make install
4、优化管理
ln -s /usr/local/squid/sbin/* /usr/local/sbin //创建链接文件,优化路径
useradd -M -s /sbin/nologin squid //创建程序用户
chown -R squid:squid /usr/local/squid/var/ //改变目录属主
5、修改squid配置
vim /etc/squid.conf
6、编写squid启动脚本
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac
chmod +x /etc/init.d/squid //赋予执行权限
chkconfig --add squid //加入系统服务
chkconfig squid on //指定squid在各等级为on
netstat -antp | grep squid 查看squid有没有开启
一、搭建传统代理
1、修改配置文件
vim /etc/squid.conf
2、设置防火墙
iptables -F //清空规则
systemctl restart firewalld.service //重启防火墙
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许来自tcp3128的流量进入
3、配置web服务器
安装启动httpd
yum -y install httpd
systemctl start httpd
4、到win虚拟机测试
设置代理
访问看看
看看日志
可以看到他其实是从squid服务器上代理过去
二、搭建透明代理
1、设置双网卡
在squid添加一块vmnet1网卡 与 client端vmnet1相连
[root@squid squid-3.5.27]# cd /etc/sysconfig/network-scripts/
[root@squid network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@squid network-scripts]# vim ifcfg-ens37
2、修改squid配置
vim /etc/squid.conf
3、添加防火墙规则
[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# systemctl restart squid //重启squid
[root@squid ~]# netstat -antp | grep squid
4、在web服务器上添加静态路由
route add -net 192.168.100.0/24 gw 192.168.59.129
5、访问看看
先关闭win10上刚刚传统代理开启的代理,清楚缓存
依然能够访问,证明了透明代理不需要指定squid
三、ACL控制访问
在配置文件/etc/squid.conf 中,ACL访问控制通过以下两个步骤来实现:
① 使用acl 配置项定义需要控制的条件;
② 通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制。
格式:
acl 列表名称 列表类型 列表内容
列表名称:名称自定义,相当于给acl起个名字(也会被http_access 调用)
列表类型:必须使用squid预定义的值,对应不同类别的控制条件
列表内容:是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分隔,为“或”的关系)
1、修改配置试试
vim /etc/squid.conf
保存并开启squid
2、到client上访问看看
四、sarg日志分析工具
1、安装依赖包
yum install -y gd gd-devel pcre-devel
2、解压安装包
tar xzf sarg-2.3.7.tar.gz
3、编译安装
[root@squid opt]# cd sarg-2.3.7/
[root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \
> --sysconfdir=/etc/sarg \ #设置配置文件目录,
> --enable-extraprotection #额外安全防护
[root@squid sarg-2.3.7]# make && make install
4、修改sarg配置文件
vim /etc/sarg/sarg.conf
5、启动sarg
[root@squid sarg-2.3.7]# touch /usr/local/sarg/noreport
[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@squid sarg-2.3.7]# sarg
6、安装httpd
yum -y install httpd
systemctl start httpd
7、测试看看
添加计划任务
[root@squid sarg-2.3.7]# vim /usr/local/sarg/report.sh
#!/bin/bash
#Get current date #获取准确时间
TODAY=$(date +%d/%m/%Y)
#Get one yesterday ago today #获取前一天
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
[root@squid sarg-2.3.7]# chmod +x /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -e
0 0 * * * /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -l
0 0 * * * /usr/local/sarg/report.sh
五、搭建反向代理
1、关闭防火墙
systemctl stop firewalld.service
2、更新配置
[root@squid sarg-2.3.7]# vim /etc/squid.conf
60 #http_port 192.168.100.128:3128 transparent
61 http_port 192.168.59.129:80 accel vhost vport #accel :反向代理加速模式 vhost:支持域名或主机名来表示代理节点 vport :支持IP和端口来表示代理节点
62 cache_peer 192.168.59.128 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 #parent :代表为父节点,上下关系,非平级关系 #80:代理内部web服务器的80端口 #0 :没有使用icp,表示就一台squid服务器 #no-query :不做查询操作,直接获取数据 originserver :指定是源服务器 round-robin :指定squid 通过轮询方式将请求分发到其中一台父节点 max_conn :指定最大连接数 weight :指定 权重 name :设置别名
63 cache_peer 192.168.59.130 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
64 cache_peer_domain web1 web2 www.dyf.com
3、配置web网页文件
[root@web1 ~]# echo 'hello' > /var/www/html/index.html
[root@web2 ~]# echo 'dyf' > /var/www/html/index.html
4、配置客户端
访问结果