Squid代理服务器
Squid缓存代理概述
Squid代理服务器是基于Unix的代理服务器(proxy server),它主要提供缓存加速、应用层过滤控制的功能,缓存网页对象,可以减少重复请求
缓存代理的类型
-
传统代理:适用于Internet,需明确指定服务端(用户需要手动指定代理服务器的ip)
-
透明代理:客户端不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
-
反向代理:客户端需要指定代理服务器,代理服务器定义一个后端真实服务器地址池,通过定义地址池进行反向代理
设置缓存代理服务器的好处
- 提高Web访问速度
- 隐藏客户端的真实IP地址
Squid代理服务安装部署
设备准备:一台Squid代理服务器(192.168.118.100),两台Web服务器(192.168.118.50、192.168.118.55),一台win10客户机(192.168.118.99)
- Squid代理配置:
[root@squid ~]# yum install -y gcc gcc-c++ make #部署依赖环境
[root@squid opt]# tar xvf squid-3.5.27.tar.gz
[root@squid opt]# 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正则表达式
[root@squid squid-3.5.27]# make && make install
[root@squid squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@squid squid-3.5.27]# useradd -M -s /sbin/nologin squid #创建程序用户、组
[root@squid squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/ #改变目录属主
[root@squid squid-3.5.27]# vim /etc/squid.conf #修改配置文件
[root@squid squid-3.5.27]# squid -k parse #检查配置文件
[root@squid squid-3.5.27]# squid -k rec #重新加载配置文件
[root@squid squid-3.5.27]# squid -zX #初始化缓存目录
- 编写squid的启动脚本,启动squid
[root@squid squid-3.5.27]# 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 -ntap | 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 -ntap | 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|reload|status|check|restart}"
;;
esac
[root@squid squid-3.5.27]# chmod +x /etc/init.d/squid
[root@squid squid-3.5.27]# netstat -antp | grep squid
tcp6 0 0 :::3128 :::* LISTEN 118771/(squid-1)
搭建传统代理
[root@squid squid-3.5.27]# vim /etc/squid.conf #修改配置文件,添加以下内容
[root@squid squid-3.5.27]# service squid restart
正在关闭 squid...
正在启动 squid...
##修改防火墙规则
[root@squid squid-3.5.27]# iptables -F
[root@squid squid-3.5.27]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
Web服务器配置
Web1:
[root@web1 ~]# yum install -y httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# netstat -antp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 97766/httpd
Web2:
[root@web2 ~]# yum install -y httpd
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -antp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 98921/httpd
Win10客户端配置
-
设置–高级–添加代理服务器,地址为192.168.118.100,端口3128
-
访问Web1服务器IP地址,刷新网页并实时查看访问日志,观察来访IP地址
[root@web1 ~]# tail -f /var/log/httpd/access_log
搭建透明代理
设备准备:基于上面的传统代理设置,Squid服务器增加一个网卡(VMnet1仅主机,ens36:192.168.140.100,不用设置网关,DNS),Win10的IP地址设置为192.168.140.99,网关为Squid的ens36网卡地址
- 修改Squid配置文件
[root@squid ~]# vim /etc/squid.conf
[root@squid ~]# service squid restart #重启squid服务
正在关闭 squid...
正在启动 squid...
[root@squid ~]# netstat -antp | grep squid
tcp 0 0 192.168.140.100:3128 0.0.0.0:* LISTEN 121733/(squid-1
[root@squid ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #添加路由转发
[root@squid ~]# sysctl -p
net.ipv4.ip_forward = 1
##添加防火墙规则,将来源140网段的80和443端口的流量重定向到3128端口
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.140.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.140.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #由于前面清理了规则,这里需要重新放通3128端口
- Web1上添加一条静态路由
[root@web1 ~]# route add -net 192.168.140.0/24 gw 192.168.118.100
- Win10上先关闭代理设置,再清除浏览器缓存,访问Web1IP地址会发现依然能访问,证明透明代理不需要指定Squid服务端
ACL访问控制
格式:
acl 列表名称 列表类型 列表内容
acl localhost src 192.168.140.100/24 #源地址为192.168.140.100
acl MYLAN src 192.168.140.0/24 #客户机网段
acl destinationhost dst 192.168.118.100/32 #目标地址为192.168.118.100
acl MC20 maxconn 20 #最大并发连接20
acl PORT port 21 #目标端口21
acl DMBLOCK dstdomain .qq.com #目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule:// #以rtsp://. emule://开头的URL,-i表示忽略大小写
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #以 .mp3、.mp4、.rmvb结尾的URL路径
acl WORKTIME time MTWHF 08:30-17:30 #时间为周一-至周五8:30~17:30, "MTWHF"为每个星期的英文首字母
[root@squid ~]# vim /etc/squid.conf #修改配置文件,添加一条规则
[root@squid ~]# service squid restart · #重启服务
正在关闭 squid...
正在启动 squid...
再次访问Web1,访问被拒绝
Squid日志分析
Squid日志分析我们可以安装sarg日志分析工具,它采用HTML格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等
[root@squid ~]# cd /opt
[root@squid opt]# tar xzf sarg-2.3.7.tar.gz #解压sarg包
[root@squid opt]# yum install -y gd gd-devel pcre-devel #安装依赖环境
[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
- 修改sarg配置文件,注释修改一些内容
[root@squid sarg-2.3.7]# vim /etc/sarg/sarg.conf
[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
SARG: Records in file: 3695, reading: 100.00%
SARG: Successful report generated on /var/www/html/sarg/2021Jul28-2021Jul28
[root@squid sarg-2.3.7]# yum install httpd -y
[root@squid sarg-2.3.7]# systemctl start httpd
[root@squid sarg-2.3.7]# netstat -antp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 127474/httpd
添加计划任务
[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
搭建反向代理
- 工作机制:缓存网页对象,减少重复请求,讲互联网请求轮询或按权重分配到内网Web服务器,代理用户请求,避免用户直接访问Web服务器,提高安全
squid:
[root@squid sarg-2.3.7]# iptables -F
[root@squid sarg-2.3.7]# iptables -t nat -F
[root@squid sarg-2.3.7]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid sarg-2.3.7]# vim /etc/squid.conf #修改配置文件
[root@squid sarg-2.3.7]# service squid reload #重载服务
2021/07/28 21:46:30| aclIpParseIpData: WARNING: Netmask masks away part of the specified IP in '192.168.140.100/24'
[root@squid sarg-2.3.7]# systemctl stop httpd #停止前面配置的httpd服务
- 在Win10hosts文件中添加域名及对应的IP地址,讲浏览器代理服务打开,并设置端口为80