文章目录
一、Squid安装介绍
1.1 缓存代理概述
-
Web代理的工作机制
- 缓存网页对象,减少重复请求
- 缓存网页对象,减少重复请求
-
它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求
-
也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求
-
然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
squid服务器:CDN
squid与源站服务器之间的协议:BGP
1.2 代理的基本类型
- 传统代理:适用于Internet,需明确指定服务端
- 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向给代理服务器处理
1.3 使用代理的好处
- 提高web访问速度
- 隐藏客户机的真实IP地址
二、Squid代理服务器实验
环境
【6】 squid代理服务器 14.0.0.66
【7】 web服务器 14.0.0.77
【2】 客户端 传统代理需要在浏览器设置代理(透明代理不需要设置)
安装squid服务
【6】
##编译安装Squid 3.4.6
tar zxvf squid-3.4.6.tar.gz
cd /squid-3.4.6
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
make && make install
##Squid文件调整
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
http_port 3128 #端口号下面添加内容
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
##Squid初始化
squid -k parse #检查配置文件语法
squid -z #初始化缓存目录
squid #启动服务
netstat -natp | grep 3128 #查看端口状态
cd /etc/init.d/
vim squid
#!/bin/bash
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid" ###定义三个变量:pid文件,保存squid运行的进程号
CONF="/etc/squid.conf" ###主配置文件
CMD="/usr/local/squid/sbin/squid" ###启动的命令
case "$1" in
start)
netstat -natp | grep squid &> /dev/null ###查看3128端口是否已经开启
if [ $? -eq 0 ]
then
echo "squid is runnig"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
ststus)
[ -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 ###加入到service管理列表,可以用service squid start
chkconfig --level 35 squid on ###开机自启动
搭建传统代理服务器
【6】
vim /etc/squid.conf
http_access allow all #允许所有终端进行访问源web服务器
http_access deny all ###下面这条可以注释也可以不注释,读到上一行就不会读这一行
...
http_port 3128
cache_mem 64 MB ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数
reply_body_max_size 10 MB ###允许用户下载的最大文件大小,以字节为单位。默设置0表示不进行限制
maximum_object_size 4096 KB ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被保存
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service squid reload
【7】 web服务器
iptables -F
setenforce 0
yum install httpd -y
systemctl start httpd.service
在Windows系统中开启浏览器
设置----》高级----》打开代理设置----》点击开启----》地址:squid服务器ip地址 端口:3128
点击保存
地址栏输入Web服务器地址,
查看Web服务器访问日志accrss.log 是代理服务器地址访问
cd /var/log/httpd/
cat access_log
......
14.0.0.66 - - [26/Aug/2020:23:31:16 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://14.0.0.77/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"
搭建透明代理服务器
【6】
squid代理服务器设置为双网卡,都改为仅主机模式
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens36
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0
###开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p ###生效
service network restart
vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent
squid -k parse ###验证语法
###防火墙做端口映射(http\https)
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service squid reload
【7】
##### Web服务器加一条静态路由 ####
route add -net 192.168.10.0/24 gw 14.0.0.66
###客户端
###浏览器中之前开启的代理服务一定要先关掉!
三、Squid中ACL的使用
3.1 ACL访问控制
3.1.1 ACL访问控制方式
- 根据源地址、目标URL、文件类型等定义列表
acl 列表名称 列表类型 列表内容
- 针对已定义的acl列表进行限制
http_access allow或deny 列表名称
3.1.2 ACL规则优先级
- 一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
- 所有规则都不匹配时,Squid会使用与最后一条相反的规则
3.2 常用的ACl列表类型
src ===> 源地址
dst ===> 目标地址
port ===> 端口
dstdomain ===> 目标域
time ===> 访问时间
maxconn ===> 最大并发连接
url_regex ===> 目标URL地址
Urlpath_regex ===> 整个目标URL路径
3.3 ACL列表的应用
3.3.1 最简单的ACL控制
禁止任何客户机使用此代理服务
[root@localhost ~]# vim /et/squid.conf
...
acl test src 20.0.0.100/32
...
http_access deny test
3.3.2 ACL综合应用
- 允许多个局域网在工作时间上网
[root@localhost ~]# vim /etc/squid.conf
...
acl test src 20.0.0.200/32
acl MYLAN src 192.168.6.0/24 192.168.1.0/24
acl WORKTIME time MTWHFAC 08:30-17:30
...
http_access allow MYLAN WORKTIME
http_access deny test
MTWHFAC 周一到周日
分隔符为空格
- 通过黑名单限制目标网站
//创建地址列表文件//
[root@localhost ~]# vim /etc/squid/ipblock.list
20.0.0.200
20.0.0.190
[root@localhost ~]# vim /etc/squid/dmblock.list
.qq.com
.msn.com
[root@localhost ~]# vim /etc/squid.conf
...
acl IPBLOCK dst "/etc/squid/ipblock.list"
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
...
http_access deny IPBLOCK
http_access deny DMBLOCK
实验
实验环境
【1】14.0.0.11 squid-3.4.6.tar.gz
【3】14.0.0.33 httpd
安装squid服务
【1】
tar zxvf squid-3.4.6.tar.gz
cd /squid-3.4.6
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-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
http_port 3128 #端口号下面添加内容
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
squid -k parse #检查配置文件语法
squid -z #初始化缓存目录
squid #启动服务
netstat -natp | grep 3128 #查看端口状态
cd /etc/init.d/
vim squid
#!/bin/bash
#!/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 runnig"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
ststus)
[ -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 ###加入到service管理列表,可以用service squid start
chkconfig --level 35 squid on ###开机自启动
传统代理服务器
vim /etc/squid.conf
http_access allow all #允许所有终端进行访问源web服务器
http_access deny all ###下面这条可以注释也可以不注释,读到上一行就不会读这一行
...
http_port 3128
cache_mem 64 MB ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数
reply_body_max_size 10 MB ###允许用户下载的最大文件大小,以字节为单位。默设置0表示不进行限制
maximum_object_size 4096 KB ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被保存
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service squid reload
在Windows系统中开启浏览器
设置----》高级----》打开代理设置----》点击开启----》地址:squid服务器ip地址 端口:3128
点击保存
地址栏输入Web服务器(要安装httpd)地址,
查看Web服务器访问日志/var/log/httpd/accrss.log 是代理服务器地址访问:14.0.0.11
ACL访问控制
最简单的ACL控制
vim /etc/squid.conf
acl hostlocal src 14.0.0.120/32 ##第8行,hostlocal为名称14.0.0.120为客户端win 10的IP地址
...
http_access deny hostlocal ##第32行,拒绝列表(注意置顶)
service squid reload
在win 10客户端中刷新网页:
访问被拒绝
通过黑名单限制目标网段
vim /etc/squid.conf
acl hostlocal src "/etc/squid/src.list" ##第8行
...
http_access deny hostlocal ##第32行,拒绝列表(注意置顶)
mkdir /etc/squid
cd /etc/squid
vim src.list
14.0.0.120 ##目标web
14.0.0.130
14.0.0.140
service squid reload
四、Squid日志分析工具Sarg
###拖入软件包sarg-2.3.7.tar.gz
tar zxvf sarg-2.3.7.tar.gz
yum install -y gd gd-devel ##图像处理
mkdir /usr/local/sarg
cd sarg-2.3.7/
./configure \
--prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \
--enable-extraprotection
make && make install
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 #使用用户名显示
184 topuser_sort_field connect reverse #top排序中有连续次数、访问字节、降序排列 升序是normal
206 exclude_hosts /usr/local/sarg/noreport #不计入排序的站点列表文件
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 #网页根目录
###添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ #命令建一个软链接
[root@localhost sarg]# sarg
SARG: 纪录在文件: 462, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Sep07-2020Sep08
[root@localhost sarg]# ls /var/www/html/squid-reports/
2020Sep07-2020Sep08 images index.html
yum install httpd -y
systemctl start httpd.service
systemctl stop firewalld
客户端访问14.0.0.11/squid-reports
生成日志记录报告:
点进去看:
##周期性计划任务执行每天生成报告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)
客户端换一个IP地址14.0.0.100,
输入周期性计划任务执行每天生成报告crontab
重新刷新网页
五、Squid反向代理
5.1反向代理概述
- 反向代理
- 如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用
- 如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用
5.2 反向代理网站加速
- 工作机制
- 缓存网页对象,减少重复请求
- 将互联网请求轮询或按权重分配到内网Web服务器
- 代理用户请求,避免用户直接访问Web服务器,提高安全
实验
###【3】web01 14.0.0.33
cd /var/www/html/
<h1>this is web01</h1>
###【5】web02 14.0.0.55
iptables -F
setenforce 0
yum install -y httpd
cd /var/www/html/
vim index.html
<h1>this is web02</h1>
vim /etc/squid.conf
#http_port 3128 ###注释掉
http_port 14.0.0.11:80 accel vhost vport
cache_peer 14.0.0.33 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 14.0.0.55 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com
因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
systemctl stop httpd
service squid stop
service squid start
[root@localhost sarg]# netstat -ntap |grep squid
tcp 0 0 14.0.0.11:80 0.0.0.0:* LISTEN 20708/(squid-1)
代理服务器端口也要改为80
这是通过域名访问,不需要配置DNS:
右击打开方式选择记事本,添加一条记录
访问www.yun.com