squid缓存代理相关配置
缓存代理概述
web代理工作机
制缓存网页对象,减少重复请求(作用)
当客户机的请求在Squid代理服务器缓存中存在时,Squid代理服务器返回数据;当请求Squid代理服务器缓存中没有时,Squid代理服务器才将请求发送给Web节点服务器,由Web节点进行数据回应,之后通过Squid服务器发送给客户机,同时Squid服务器也将发送的数据存入自己的缓存中,在下一次同样请求时直接回应请求,不需要请求到Web节点服务器
代理的基本类型
传统代理:适用于internet,需要明确指定服务器
端透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由,防火墙策略将web访问重定向给代理服务器处理
使用代理的好处
提高web访问速度
隐藏客户机的真实IP地址
安装squid
解压软件包
tar zxvf squid-3.5.23.tar.gz /opt
编译安装
cd /opt/squid-3.5.23
./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
--prefix=/usr/local/squid #安装路径
--sysconfdir=/etc #配置文件根路径
--enable-arp--acl #允许arp的acl
--enable-linux-netfilter # Linux内核通过netfilter模块实现网络访问控制功能
--enable-linux-tproxy #实现透明代理功能
--enable-async-io=100 #异步传输输入输出数量
--enable-err-language="Simplify Chinese" #用中文报错
--enable-underscore #允许下划线
--enable-poll #协调读写设备额个数或读写设备顺序的函数
--enable-gnuregex #c/c++常用的正则表达式
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/
修改配置文件
vi /etc/squid.conf
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #设置数据缓存的目录
squid -k parse #检查配置文件语法
没有error报错信息即可
squid -z #初始化缓存目录
squid #启动服务
netstat -anpt | grep squid #查看服务启动情况
创建程序管理脚本
vim /etc/init.d/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
;;
reload)
$CMD -k reconfigure
;;
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 "正在关闭"
$0 start &> /dev/null
echo "正在启动"
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0{start|stop|status|restart|reload|check}"
esac
chmod +x /etc/init.d/squid #赋予执行权限
chkconfig --add /etc/init.d/squid
chkconfig --list #检查
systemctl start squidsystemctl status squid #查看状态
传统代理服务器
准备
web1服务器:20.0.0.20
web2服务器:20.0.0.30
squid服务器:20.0.0.10
客户机:20.0.0.40
配置
squid服务器
vi /etc/squid.conf
http_access allow all
http_access deny all #允许所有(按顺序执行,先允许后拒绝)
http_port 3128
cache_mem 64MB #指定缓存功能所使用的内存空间大小,便于保持访问频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位,默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保持到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
squid -k parse #检查语法
systemctl restart squid #重启服务
在另两台主机安装web节点
安装httpd
yum -y install httpd
关闭所有主机防火墙
systemctl stop firewalld
setenforce 0
2号节点:echo "<h1>web1</h1>" > /var/www/html/index.html
3号节点:echo "<h1>web2</h1>" > /var/www/html/index.html
systemctl start httpd
在4号客户机上访问测试网页,并查看效果
在2,3上查看日志,是来自4号主机的访问
tail -f /var/log/httpd/access_log
在4号客户机的浏览器上设置代理服务器
打开浏览器–设置页面–首选项–高级–网络–连接设置
手动配置代理–http代理20.0.0.10端口3128
在浏览器中访问2,3号主机网页查看后日志,是来自代理服务器的访问
透明代理
准备
systemctl stop squid #关闭服务
拓扑图
实现同网段互通后
在squid上开启路由
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
在web节点上加路由
route add -net 192.168.110.0/24 gw 192.168.100.10
route -n #查看路由
客户机上指定网关为squid服务器ens37的ip:192.168.110.10
route -n #查看路由
实现全网互通
配置
vi /etc/squid.conf
http_port 192.168.110.10:3128 transparent
systemctl start squid #启动服务
在squid服务器上配置iptables策(重定向)
iptables -F #清空策略
iptables -t nat -I PREROUTING -i ens37 -s 192.168.110.0/24 -p tcp --dport=80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.110.0/24 -p tcp --dport=443 -j REDIRECT --to 3128
【iptables -I INPUT -p tcp --dport 3128 -j ACCEPT】
#将来自ens33网卡192.168.110.0/24网段的包重定向到3128端口
在客户机上访问服务器后查看日志
查看网页节点日志
查看squid服务器服务日志
acl访问控制
常用的acl列表类型
src–源地址
dst–目标地址
port–端口号
destdomain–目标域
time–访问时间
maxconn–最大并发连接数
url_regex–目标url地址
urlpath_regex–整个目标url路径
使用规则:先定义,再调用
squid定义acl
acl 列表名称 类型 控制的对象
acl localhost src #IP地址
acl MYLAN src #网段
acl destionhost dst #目标地址
acl MC20 maxconn 20 #设定最大连接数
acl BURL url_regex -i ^rtsp:// ^emule:// #设定以rtsp、rtsp开头的访问,支持正则表达式,rtsp传输音频视频的协议,emule下载协议
acl PURL urlpath_regex -i \.mp3$ .\mp4$ .\rmvb$ #设定以mp3,mp4,rmvb结尾的访问
acl work time MTWHFAC 08:00-17:00 #设定工作时间
也可以先定义一个包含要定义的目标的文件
mkdir /etc/squid #启用对象列表管理
vi dest.list
192.168.1.2 #目标web
vi /etc/squid.conf
acl destionhost dst "/etc/squid/dest.list" #定义acl
http_access deny destionhost #调用acl
squid调用
aclhttp_access allow/deny 列表名称
比如vi /etc/squid.conf
acl client src 192.168.110.40/32
http_access deny client
systemctl restart squid
重启后再被禁止登录的ip上访问
查看squid日志
squid日志分析
通过日志分析软件sarg实现
yum -y install gd gd-devel #图像处理(若yam源中没有gd-devel,可通过阿里云或是网易云的yum仓库)
mkdir /usr/local/sarg #创建安装路径
tar zxvf sarg-2.3.7.tar.gz /optcd /opt/sarg-2.3.7/
./configure
--prefix=/usr/local/sarg #安装路径
--sysconfdir=/etc/sarg #系统配置文件
--enable-extraprotection #开启额外的安全防护
make && make install
vi /etc/sarg/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/noreportl #不计入排序的站点列表文件
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-6l #top排行的星期周期
525/ hours 0-23l #top排行的时间周期
633/ www_document_root /var/www/html #网页根目录
touch /usr/local/sarg/noreport #创建一个不记排名的文件
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ #命令链接
sarg
因为生成的网页日志报告,所以要安装apache,安装后启动
yum -y install httpd
systemctl start httpd
在浏览器中访问该目录的网页http://192.168.100.10/squid-reports/
周期性计划任务执行每天生成报告crontab
crontab -e
* 2 * * * /usr/lcoalbin/sarg -l /usr/local/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%Y-%m-%d)-$(date +%Y-%m-%d)
反向代理
概述
如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用
工作机制(目的)
缓存网页对象,减少重复请求
将互联网请求轮询或按权重分配到内网尾部服务器
让用户请求,避免用户直接访问web服务器,提高安全性(类似于调度器)
配置
因为在squid反向代理中会用到80端口,所以要停止http服务
systemctl stop httpd
vi /etc/squid.conf
http_port 192.168.100.10:80 accel vhost vport
cache_peer 192.168.100.20 parent 80 0 no_query originserver round-robin max-conn=100 weight=1 name=web1
cache_peer 192.168.100.30 parent 80 0 no_query originserver round-robin max-conn=100 weight=1 name=web2
【ache peer_domain web1 web2 www.ph.com】#需要用域名访问时设置
systemctl restart squid
在客户机上访问后,查看squid日志
ip访问
域名访问,需要在客户机上多好域名绑定
squid日志