一,Squid 代理服务器介绍
Squid 是一个高性能、开源的代理缓存服务器和 Web 缓存进程,支持 FTP、Internet Gopher、HTTPS 和 SSL 等多种协议。它通过一个非阻塞的、I/O 事件驱动的单一进程处理所有的 IPV4 或 IPV6 协议请求。
Squid 由一个主服务程序 squid,和 DNS 查询程序 dnsserver,另外还有一些可选的请求重写、执行认证程序组件,及一些管理和客户端工具构成。
Squid 提供了丰富的访问控制、认证和日志环境, 用于开发 web 代理和内容服务网站应用。
三、SQUID缓存的存放方式:
每一台Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下才放文件(Squid 把它叫object)。
四、SQUID的查询方式:
SQUID通过查询表的方式来定位某个资源的位置,所查询的表叫Hash table 和Digest table;Digest table在这里可以称之为摘要或者索引,它记录了磁盘上每个分区,每个目录里存的缓存摘要,Hash table在这里可以称之为目录或者提纲,它记录所有的Digest table表信息,SQUID接受到请求后先查询Hash table,在根据Hash table所指向的Digest table查询需要的信息。
五、SQUID服务器之间的关系:
SQUID服务器存在两种工作关系,一种为Child、Parent,当child squid server没有用户需要的数据时,就象parent server发出请求,并持续等待,直到parent server回应自己为止;另外一种为ibling,当本地SQUID server没有用户请求数据时,会向sibling server发出请求,如果sibling server没有资料则会向上级sibling或者INTERNET发送数据请求
六、SQUID运作模式
- 当Squid Server 没有资料时,会先向Sibling 的Squid Server 要资料,如果Sibling没资料,就跳过它直接向Parent 要。
- 向Parent 要资料,然後一直等,直到Parent 给它资料为止(Parent 自己有的资料或上Internet 去拿)。
- 没有Parent 时,就自己上Internet 去拿。
- 如果这三者都拿不到资料,才向用户端回报拿不到资料。
一般而言,把网路上一层的Squid Server 设成Sibling 是不错的选择(例如:一个学校将所在城市网和附近的大学设成Sibling),因为网路上一层的Squid Server 服务对象较多,其硬件功能较强,离我们比较近,速度也比较快;万一要不到资料,我们还可以自己上Internet 去拿。那什麽时候设Parent?当您的出口只有一个,或上一层Squid Server 拿不到资料,自己也一定拿不到,只好将上一层Squid Server 设为Parent。
七,实验
搭建Squid代理服务器
1、编译安装
yum -y install gcc gcc-c++ make ##安装依赖环境
cd /opt ##上传软件包squid-3.5.27. tar.gz到/opt目录下
tar xvf squid-3.5.27.tar.gz
cd squid-3.5.27/
./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/ ##改变目录属主
2.修改配置文件
vim /etc/squid.conf
56行插入
56 http_access allow all ##放在http_access deny all之前,允许任意客户机使用代理服务,控制规则自上而下匹配
57 http_access deny all
60 http_ port 3128 ##用来指定代理服务监听的地址和端口(默认的端口号为3128)
60行下面插入
61 cache_effective_user squid ##添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
62 cache_effective_group squid ##添加,指定账号基本组
68 coredumpl dir /usr/ local/ squid/var/ cache/ squid ##指定缓存文件目录
3.编写脚本
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
4.开启服务
chmod +x letc/init.dl squid
chkconfig --add squid
chkconfig squid on
service squid restart #验证脚本可以使用service 管理
八,代理操作实验
1.实验搭建
squid;192.168.35.40
web1;192.168.35.10
web2;192.168.35.20
win10;192.168.35.150
2.更改配置文件
vim /etc/squid.conf
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_ effective_ group squid
#63行插入
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
3.重启rquid服务
service squid restart
iptables -F ##修改防火墙规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许端口3128进入
- web端开启httpd服务
yum -y install httpd
netstat -antp | grep 80
echo "www.qqq.com" > /var/www/html/index.html
echo "www.www.com" > /var/www/html/index.html
5.win10配置
测试一下
九,透明代理
环境配置
Squid 服务器;ens33 :192.168.35.40
Squid 服务器;ens36 192.168.10.1(win10的网关)
web1 服务器;192.168.35.10
web2 服务器;192.168.35.20
win10;192.168.10.100 (网关为192.168.10.1)
1,Squid服务器增加网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
vim ifcfg-ens37 ##网卡ens37无须设置网关
systemctl restart network
2.修改Squid配置文件
vim /etc/squid.conf
60 http_port 192.168.10.1:3128 transparent ##增加一条
service squid restart ##重启服务
3.squid添加防火墙规则、路由
iptables -F
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许端口3128进入
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
4.web1服务器添加一条静态路由(前提是不要把网关指向squid服务器的网卡)
route add -net 192.168.10.0/24 gw 192.168.35.40
echo "www.qqq.com" > /var/www/html/index.html ##web1添加网页内容
echo "www.www.com" > /var/www/html/index.html ##web2添加网页内容
5.客户端关闭代理,修改win10地址为100网段
验证
6.访问控制
ACL访问控制
在配置文件/etc/squid.conf 中,ACL访问控制通过以下两个步骤来实现:
(1) 使用acl 配置项定义需要控制的条件;
(2) 通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制。
①定义访问控制列表
格式:
拒绝访问
acl 列表名称 列表类型 列表内容
列表名称:名称自定义,相当于给acl起个名字(也会被http_access 调用)
列表类型:必须使用squid预定义的值,对应不同类别的控制条件
列表内容:是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分隔,为“或”的关系)
vim /etc/squid.conf
8 acl host src 192.168.10.100/24 ##8行插入;地址为192.168.10.100
32 http_access deny host ##32行插入,调用地址并拒绝它访问
7.4、Squid 日志分析
安装sarg日志工具
yum install -y gd gd-devel pcre-devel ##安装图像处理软件包
mkdir /usr/local/sarg
tar zxvf sarg-2.3.7.tar.gz -C /opt/ ##将zxvf sarg-2.3.7.tar.gz压缩包上传到/opt目录下
cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \ #配置文件目录,默认是/usr/loca/etc
--eenable-xtraprotection #额外安全防护
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install
安装图像处理软件包
yum install -y gd gd-devel pcre-devel
mkdir /usr/local/sarg
2.将zxvf sarg-2.3.7.tar.gz压缩包上传到/opt目录下解压
tar zxvf sarg-2.3.7.tar.gz -C /opt/
3.编译安装
cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \ #配置文件目录,默认是/usr/loca/etc
--eenable-xtraprotection #额外安全防护
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install
4.修改配置文件
vim /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/sarg #报告输出目录
--178行--取消注释
user_ip no #使用用户名显示
--184行--取消注释,修改
topuser_sort_field connect reverse #top排序中,指定连接次数采用降序排列,升序是normal
--190行--取消注释,修改
user_sort_field connect reverse #对于用户访问记录,连接次数按降序排序
--206行--取消注释,修改
exclude_hosts /usr/local/sarg/noreport #指定不计入排序的站点列表的文件
--257行--取消注释
overwrite_report no #同名同日期的日志是否覆盖
--289行--取消注释,修改
mail_utility mailq.postfix #发送邮件报告命令
--434行--取消注释,修改
charset UTF-8 #指定字符集UTF-8
--518行--取消注释
weekdays 0-6 #top排行的星期周期
--525行--取消注释
hours 0-23 #top排行的时间周期
--633行--取消注释
www_document_root /var/www/html #指定网页根目录
5.添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport
6.创建软链接
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
7.运行
sarg #启动一次记录
8.验证
yum install httpd -y
systemctl start httpd
查看sarg报告网页。
9.优化-添加定时报告
vim /usr/local/sarg/report.sh
#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get one week 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
chmod +x /usr/local/sarg/report.sh
crontab -e
0 0 * * * /usr/local/sarg/report.sh
10.反向代理
1.部署环境
squid;192.168.35.40
web1;192.168.35.10
web2;192.168.35.20
client;192.168.35.100
2.开启防火墙、本地关闭HTTPD
systemctl start firewalld
systemctl stop httpd
iptables -F
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service squid reload
vim /etc/squid.conf
32 #http_access deny host ##注释掉不允许win10的访问
62 # http_port 192.168.10.1:3128 transparent
63 http_port 192.168.35.40:80 accel vhost vport
64 cache_peer 192.168.35.10 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
65 cache_peer 192.168.35.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
66 cache_peer_domain web1 web2 www.qqq.com
结果