目录
一.squid概述
Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org
- 代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
- 可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
- 可以用在局域网中,使局域网用户通过代理上网。
- 可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
- Squid支持SSL,支持ACL访问控制。
二.代理的基本类型
-
传统代理:适用于Internet,需明确指定服务端
-
透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
三.使用代理的好处
- 提高Web访问速度
- 隐藏客户机的真实IP地址
四.案例
1.squid代理配置(传统代理)
[root@squid ~]# yum -y install gcc gcc-c++ make
[root@squid ~]# tar xf squid-3.5.23.tar.gz -C /opt/
[root@squid ~]# cd /opt/squid-3.5.23/
[root@squid squid-3.5.23]# ./configure --prefix=/usr/local/squid \
> --sysconfdir=/etc \ ##指定配置文件位置
> --enable-arp-acl \ ##支持acl访问控制列表
> --enable-linux-netfilter \ ##打开网络筛选
> --enable-linux-tproxy \ ##支持透明代理
> --enable-async-io=100 \ ##io优化
> --enable-err-language="Simplify_Chinese" \ ##报错显示简体中文
> --enable-underscore \ ##支持下划线
> --enable-poll \ ##默认使用poll模式,开启epoll模式时提升性能
> --enable-gnuregex ##支持正则表达式
[root@squid squid-3.5.23]# make && make install
优化路径
[root@squid squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@squid squid-3.5.23]# useradd -M -s /sbin/nologin squid
[root@squid squid-3.5.23]# chown -R squid.squid /usr/local/squid/var/
修改配置文件
[root@squid ~]# vi /etc/squid.conf
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
[root@squid ~]# squid -k parse #检查配置文件语法
[root@squid ~]# squid -z #初始化缓存目录
[root@squid ~]# squid #启动服务
[root@squid ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 47447/(squid-1)
添加服务到service管理
[root@squid ~]# vi /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 -natp | 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 -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
[root@squid ~]# chmod +x /etc/init.d/squid
[root@squid ~]# chkconfig --add squid
[root@squid ~]# chkconfig --level 35 squid on
[root@squid ~]# systemctl start squid
[root@squid ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 47447/(squid-1)
配置传统代理
[root@Squid ~]# vi /etc/squid.conf
http_access allow all
http_access deny all #在这行上面添加如上配置 allow all
http_port 3128 #squid的工作端口
cache_mem 64 MB ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB ###允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
[root@squid ~]# iptables -F
[root@squid ~]# setenforce 0
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# systemctl restart squid.service
2.Web服务器配置
安装httpd,并设置默认网页内容
[root@web ~]# systemctl stop firewalld.service
[root@web ~]# setenforce 0
[root@web ~]# yum -y install httpd
[root@web ~]# echo "web1" > /var/www/html/index.html
3.客户机测试
查看日志文件,看访问的IP
在网页上进行代理配置并测试
在访问网页查看ip
透明代理
在传统代理的基础上修改下网络配置:客户机的网关设置为squid的VMnet1地址;给squid添加一张网卡VMnet8;修改web的网卡为VMnet8,各IP如上图;关闭客户机刚刚开启的手动代理。
Squid服务器配置
[root@squid ~]# vi /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1 //开启路由转发功能
[root@squid ~]# sysctl -p
net.ipv4.ip_forward = 1
修改配置文件
[root@squid ~]# vi /etc/squid.conf
http_port 192.168.100.11:3128 transparent 添加squid地址,开启透明代理
[root@squid ~]# systemctl restart squid.service
[root@web ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 //给web添加一条指向客户机的默认路由,实现两个不同网段的互通
设置防火墙规则
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[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
客户机测试
查看日志文件,看访问的IP
acl访问控制
修改squid配置文件
[root@squid ~]# vi /etc/squid.conf
acl host src 192.168.100.12/32 #添加
http_access deny host
[root@squid ~]# systemctl restart squid.service
Squid日志分析
安装环境
[root@squid ~]# yum -y install gd gd-devel httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base:
软件包 gd-2.0.35-26.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@squid ~]# mkdir /usr/local/sarg
[root@squid ~]# tar xf sarg-2.3.7.tar.gz -C /opt
[root@squid ~]# cd /opt/sarg-2.3.7/
[root@squid sarg-2.3.7]# ./configure \
> --prefix=/usr/local/sarg \
> --enable-extraprotection
[root@squid sarg-2.3.7]# make && make install
修改配置文件
[root@squid ~]# 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/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 //网页根目录
添加不计入站点文件,添加的域名将不被显示在排序中
[root@Squid ~]# touch /usr/local/sarg/noreport
优化启动项并启动服务 做周期性计划任务crontab使其每天生成报告
[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@squid sarg-2.3.7]# sarg
SARG: 纪录在文件: 6, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Nov11-2020Nov11
[root@squid ~]# 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)
[root@squid ~]# cd /var/www/html/squid-reports/
[root@squid squid-reports]# ll
总用量 8
drwxr-xr-x. 3 root root 180 11月 11 19:06 2020Nov10-2020Nov11
drwxr-xr-x. 3 root root 180 11月 11 19:02 2020Nov11-2020Nov11
drwxr-xr-x. 2 root root 92 11月 11 19:02 images
-rw-r--r--. 1 root root 4680 11月 11 19:06 index.html
[root@squid ~]# crontab -e
30 22 * * * 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)
~
Squid反向代理
在透明模式的基础上进行反向代理
因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
web1配置
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "<h1>this is web1</h1>" > /var/www/html/index.html
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 50552/httpd
[root@web1 ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 ###添加静态路由
web2配置
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo "<h1>this is web2</h1>" > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 50552/httpd
[root@web2 ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 ###添加静态路由
squid配置
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# vi /etc/squid.conf
# Squid normally listens to port 3128
# 关闭透明代理
#http_port 192.168.100.11:3128 transparent #透明代理
http_port 192.168.174.51:80 accel vhost vport #squid外网口IP,用作反向代理服务
cache_peer 192.168.174.52 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 #web服务器主机名
cache_peer 192.168.174.53 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com #域名绑定
[root@squid ~]# systemctl restart squid
测试