1、缓存代理概述:
作为应用层的代理服务软件,Squid主要提供缓存加速和应用层过滤控制的功能
2、代理的工作机制:
(1)当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,若缓存中已有需访问页面,则直接将缓存中的页面内容反馈给客户机
(2)若缓存中没有所需页面,则代理服务器向Internet发送访问请求,当获得返回的web页面后,将网页数据保存到缓存中并发送给客户机
3、代理的基本类型:
(1)传统代理:需手动设置代理服务器的地址和端口,多见于Internet环境(2)透明代理:不需要手动指定代理服务器的地址和端口,多见于局域网环境注:代理服务器一定有预备的缓存空间,用于存储服务器反馈的数据
一、Squid代理服务器的安装及运行控制
(1)挂载并解压squid软件包
[root@localhost ~]# mount.cifs //192.168.100.1/zdh /abc
Password for root@//192.168.100.1/zdh:
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
squid-3.5.28.tar.gz
[root@localhost abc]# tar zxvf squid-3.5.28.tar.gz -C /opt
(2)到squid文件路径下执行配置文件
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
rh squid-3.5.28
[root@localhost opt]# cd squid-3.5.28/
[root@localhost squid-3.5.28]# ls
acinclude configure doc lib README tools
aclocal.m4 configure.ac errors libltdl RELEASENOTES.html
bootstrap.sh contrib helpers Makefile.am scripts
cfgaux CONTRIBUTORS icons Makefile.in SPONSORS
ChangeLog COPYING include po4a.conf src
compat CREDITS INSTALL QUICKSTART test-suite
(3)配置文件项
[root@localhost squid-3.5.28]# ./configure >--prefix=/usr/local/squid \ 安装目录
> --sysconfdir=/etc \ 单独将配置文件修改到其它目录
> --enable-arp-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 使用GUN正则表达式
[root@localhost squid-3.5.28]# systemctl stop firewalld.service
[root@localhost squid-3.5.28]# setenforce 0
[root@localhost squid-3.5.28]# yum install gcc gcc-c++ make -y 安装编译软件包
[root@localhost squid-3.5.28]#make && make install
(4)创建用户并赋予权限
[root@localhost squid-3.5.28]#ln -s /usr/local/squid/sbin/* /usr/local/sbin/ 建立软连接
[root@localhost squid-3.5.28]#useradd -M -s /sbin/nologin squid 创建用户,不创建用户家目录,不使用本地环境登录
[root@localhost squid-3.5.28]#chown -R squid.squid /usr/local/squid/var/ 赋予属主属组权限
(5)修改squid的配置文件
[root@localhost squid-3.5.28]#vim /etc/squid.conf
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid //在此行上面你添加以上两条语句
(6)Squid的运行控制
[root@localhost squid-3.5.28]#squid -k parse //检查配置文件语法[root@localhost squid-3.5.28]# squid -z //初始化缓存目录[root@localhost squid-3.5.28]# squid //启动服务
(7)使用Squid脚本服务
[root@localhost squid-3.5.28]#cd /etc/init.d
[root@localhost init.d]# vim 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" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在启动 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;restart)$0 stop &> /dev/nullecho "正在关闭 squid..."$0 start &> /dev/nullecho "正在启动 squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";;
esac[root@localhost init.d]#chmod +x squid 赋予执行权限
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on 添加开机自启
这样一来我们就可以通过Squid脚本来启动、停止、重载Squid服务器了,在执行时天机相应的start、stop、reload、restart参数。
二、构建代理服务器
接下来我从两个方面来讲解Squid的配置和使用,分别是传统代理,透明代理。
1、传统代理:
准备条件:一台squid服务器:192.168.100.129一台web服务器:192.168.100.130一台windows客户机:192.168.100.133
(1)squid代理服务器的配置
1、修改squid.conf的配置文件
[root@localhost ~]# vim /etc/squid.conf
cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
2、在防火墙添加允许策略,这里不要关闭防火墙
[root@localhost ~]# iptables -F 清空防火墙列表
[root@localhost ~]# setenforce 0 关闭网络增强性安全功能
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
3、重载squid服务,使配置文件生效
[root@localhost ~]# service squid reload
(2)web服务器的代理配置
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp |grep 80
tcp6 0 0 :::80 :::* LISTEN 87297/httpd
开启后客户机就可以访问了,但注意,在这里客户机并不是通过代理服务器访问,而是直接访问的web网站,请看!
[root@localhost squid-3.5.28]# cd /etc/httpd/
[root@localhost httpd]# cd logs/
[root@localhost logs]# vim access_log
192.168.100.133 - - [23/Jul/2018:14:33:45 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.eot? HTTP/1.1" 404 240 "http://192.168.100.130/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
"access_log" 30L, 9002C
可以看出是客户机直接访问的web服务器,并没有通过代理服务器,下面我们通过代理服务器登录
(3)客户机的代理配置
在IE浏览器中--选择‘工具’--‘intnet选项’--‘intnet选项对话框’--‘连接’--‘局域网(lan)设置’--单击‘局域网设置’按钮--弹出‘局域网设置’对话框
下面我们清空浏览器记录,重新访问几次,在web服务器查看访问日志
2、透明代理
透明代理提供的服务功能和传统代理是一致的,但其透明的实现是依赖于默认路由和防护墙的重定向策略。因此,更适用于局域网主机服务,而不适合为Internet中的客户机提供服务
准备条件:一台squid代理服务器,配置双网卡:内网ens33 192.168.100.1 外网:ens36 12.0.0.1一台web服务器:12.0.0.12一台windows客户机:192.168.100.133
作为别人的网关需要帮别人转发数据包
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
重启虚拟机后需要重新执行防火墙策略
[root@localhost ~]#iptables -F
[root@localhost ~]#iptables -t nat -F
[root@localhost ~]#setenforce 0
(1)配置squid支持透明代理
[root@localhost ~]# vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent
[root@localhost ~]#service squid reload
(2)设置iptables的重定向策略
[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 (redirect 重定向)
[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 (443 安全性的超文本传输协议)
[root@localhost ~]#iptables -I INPUT -p tcp --dport 3218 -j ACCEPT最后再次访问12.0.0.12即可发现是通过网关12.0.0.1访问,这里不再展示。
转载于:https://blog.51cto.com/13687553/2149123