Squid是一个缓存Internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,减少了向Internet提交重复的Web请求的过程,提高了用户下载网页的速度,隐藏了客户机的真实IP
传统代理:适用于Internet,需明确指定服务端
透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
百度网盘链接:https://pan.baidu.com/s/1ahZsS5looHk1iBp6DGoXjA
提取码:j0ly
#更改主机名
[root@squid ~]#hostnamectl set-hostname squid
#上传软件包squid-3.5.23.tar到/opt目录下
[root@squid ~]#mkdir /abc
[root@squid ~]#mount.cifs //192.168.100.1/bao /abc
[root@squid ~]#cd /abc/Y2C7
[root@squid ~]#tar zxvf squid-3.5.23.tar.gz -C /opt
[root@squid ~]# cd /opt
[root@localhost opt]# cd squid-3.5.23/
[root@localhost squid-3.5.23]# yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel //安装编译器
#编译安装
[root@squid squid-3.5.23]# ./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优化。异步I/O,提升储存性能,值可修改
--enable-err-language="Simplify_Chinese" //错误信息的显示语言,简体中文
--enable-underscore //允许URL中有下划线
--enable-poll //使用Poll()模式,提升性能
--enable-gnuregex //使用GNU正则表达式
[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/ //改变目录属主,赋权限
===========
如果编译安装出现这个问题:make: *** 没有指明目标并且找不到 makefile。 停止。(此报错centos最小化安装容易出现)
解决方案如下:
上传ncurses-5.6.tar.gz到/opt目录下
[root@squid ~]# cd /opt
[root@squidt opt]# tar zxvf ncurses-5.6.tar.gz
[root@squid opt]# cd ncurses-5.6/
[root@squid ncurses-5.6]# ./configure -prefix=/usr/local -with-shared-without-debug[root@squid ncurses-5.6]#make && make install
#修改Squid的配置文件
[root@squid ~] vim /etc/squid.conf
[root@squid ~] squid -k parse //检查配置文件
[root@squid ~] squid –k rec //重新加载配置文件
[root@squid ~] squid -z //初始化缓存目录
[root@squid ~]# squid //启动squid服务
[root@squid ~]# netstat -anpt | grep squid //确认squid服务处于正常监听状态
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
#编写Squid服务脚本
[root@squid ~]# 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
#添加权限并启动测试
[root@squid ~]#chmod +x /etc/init.d/squid
[root@squid ~]#chkconfig --add squid
[root@squid ~]#chkconfig squid on
[root@localhost squid-3.5.23]# service squid restart ##测试正常
正在关闭Squid...
正在启动Squid...
案例:构建squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存
cache_mem 64 MB //指定缓存功能所使用的内存空间大小,便于保持访问较频繁的web对象,容量最好为4的倍数,单位为MB
reply_body_max_size 10 MB //允许用户下载的最大文件大小,以字节为单位。默认位置0表示不进行限制
maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接发往用户端
#设置防火墙规则
[root@squid ~]iptables -F //清空规则
[root@squid ~]iptables -t nat -F
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许squid流量通过
[root@squid ~]# service squid reload //重载squid服务
[root@squid ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 49797/(squid-1)
[root@web ~]# yum -y install httpd
[root@web ~]# echo "welcome to kgc" > /var/www/html/index.html
[root@web ~]# systemctl start httpd
#添加文件,便于后面测试
[root@web html]# cd /var/www/html/
[root@web html]# dd if=/dev/zero of=test1.tgz bs=1M count=11
[root@web html]# dd if=/dev/zero of=test2.tgz bs=1M count=2
①代理验证
也是可以访问的,但是我们可以到web服务器查看日志
[root@web html]# cd /var/log/httpd/
[root@web httpd]# ll
总用量 8
-rw-r--r--. 1 root root 876 3月 17 17:17 access_log
-rw-r--r--. 1 root root 817 3月 17 17:07 error_log
[root@web httpd]# cat access_log
看到日志中,是192.168.17.154访问的,也就是我们的win10客户机
#代理设置完成后,记得清空浏览器缓存,然后再次访问
#然后我们再到web服务器查看日志
可以看到访问者变成了squid服务器(192.168.17.170)
②缓存服务验证
客户端访问网站
访问http://192.168.17.129/能打开
访问http://192.168.17.129/test1.tgz 不能打开下载
访问http://192.168.17.129/test2.tgz 能下载
首先squid服务器先添加网卡,两个网口分别对应客户端及web服务器端
#开启路由转发功能
[root@squid ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward
[root@squid ~]# sysctl -p //加载
#测试web服务器ping squid的两个端口
数据讲究有来有回,所以我们这里需要创建一条静态路由(或者把web服务器的网关改成squid的外网口地址),这里我们采用配置静态路由
[root@web ~]# route add -net 192.168.10.0/24 gw 192.168.17.170
#安装squid时已经添加了支持透明模式的功能,所以直接在配置文件中修改网文入口 并设透明模式
[root@squid ~]# vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent
#修改代理服务器防火墙策略----
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
#我们到客户端(192.168.10.10)进行访问验证
#这时我们浏览器以及win10系统网络设置中并没有设置代理,我们去web服务器查看下日志
所以客户端直接访问外网服务器地址,squid代理服务器会去代为请求
客户端访问网站
访问http://192.168.17.129/ 能打开
访问http://192.168.17.129/test1.tgz 不能访问下载
访问http://192.168.17.129/test2.tgz 能访问下载
注意:
1、编译安装squid 需要安装编译器 gcc gcc-c++
2、防火墙的问题
3、squid服务器网络不要配置网关,否则路由表有问题(route -n 看路由表)
4、最小化安装缺少工具,使用yum install -y net-tools,安装net-tools