Squid是一种用来缓冲Internet数据的软件。它接受来自人们须要下载的目标(object)的请求并适当地处理这些请求。也就是说,若是一我的想下载一web页面,他请求Squid为他取得这个页面。Squid随之链接到远程服务器(好比:http://squid.nlanr.net/)并向这个页面发出请求。而后,Squid显式地汇集数据到客户端机器,并且同时复制一份。当下一次有人须要同一页面时,Squid能够简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid能够处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。linux
你可能会想到一些问题:缓冲有多大的用处?何时目标(object)应该或者不该该被缓冲?例如,缓冲信用卡号码是彻底不适合的,脚本文件的执行结果在远程服务器端,站点常常更新(像www.cnn.com)或者甚至站点不容许缓冲,这些状况也都是不适合缓冲的。Squid处理各类状况是不错的(固然,这须要远程站点按标准形式工做)。可执行的cgi-bin脚本文件不被缓冲,返回正确页眉的页面是在一段限制了的时间内被缓冲,并且你能够规定特殊的规则以肯定什么是能够或不能够被缓冲的,还有缓冲的时间为多长。谈到缓冲的用处有多大,这要看Internet的容量大小,各有不一样。对于小型的缓冲区(几转磁盘空间)来讲,返回值很是高(达到25%)。这个空间缓冲常常访问的站点,如netscape,cnn和其它一些相似状况的站点。若是你增长一倍缓冲的磁盘空间,但你不会成倍增长你的命中率。这是由于你开始缓冲网络中剩余部分时,这些一般时很大的并且不多被访问。一个很是大的高速缓冲区,有20转左右,可能返回值仍小于50%,除非你对保存数据的时间长短常常改变(通常地你不要分配20转的磁盘空间,由于页面很快就会过期,应该被删除掉)。咱们在这里说的目标(object)指的是可保存的web页面或其它相似的可下载页面(ftp文件或目录内容也称为目标(object))。web
3.Squid的下载和获取正则表达式
squid在诸多unix like系统上都有软件库的提供,好比在ubuntu可使用apt install squid进行安装,也能够到squid的官网直接下载二进制的编译好的软件包, 下载地址ubuntu
也就是普通的代理服务,,必须在客户端的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,而后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。vim
提供与传统代理相同的功能和服务,其区别在于客户机不须要指定代理服务器的地址和端口,而是经过默认路由、防火墙策略将web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对于客户机来讲是“透明”的,用户甚至并不知道本身在使用代理服务,因此称为“透明代理”。windows
CentOS7虚拟机、squid-4.1.tar.gz软件包浏览器
tar zxvf squid-4.1.tar.gz -C /opt缓存
./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-pthreads --enable-storeio=ufs,aufs --enable-err-language="Simplify_Chinese" \ #错误信息的显示语言 --enable-underscore \ #容许URL中有下划线 --enable-poll \ #使用Poll()模式,提高性能 --enable-gnuregex #使用GUN正则表达式
make && make installbash
ln -s /usr/local/squid/sbin/* /usr/local/sbin/服务器
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
。。。省略 http_port 3128 cache_effective_user squid #添加 指定程序用户 cache_effective_group squid #添加 指定帐号基本组
squid -z #初始化缓存目录
squid #启动服务
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 -natp | grep squid &> /dev/null if [ $? -eq 0 ] then echo "squid is running" else echo "正在启动 squid..." $CMD fi ;; stop) $CMD -k shutdown &> /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 chmod +x /etc/init.d/squid #给与执行权限 chkconfig --add squid chkconfig --level 35 squid on #加入开机自启动而且在三、5模式下开机自启动
测试下服务启动脚本
主机 | IP地址 | 主要服务 |
---|---|---|
CentOS7-1 | 172.16.10.129 | http服务 |
CentOS7-2 | 172.16.10.128 | squid服务 |
windows7 | 172.16.10.131 | 客户机 |
vim /etc/squid.conf
# And finally deny all other access to this proxy http_access allow all #添加 容许任意客户机使用代理服务 http_access deny all # Squid normally listens to port 3128 http_port 3128 cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4 reply_body_max_size 10 MB #容许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制 maximum_object_size 4096 KB #容许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户 cache_effective_user squid #添加 指定程序用户 cache_effective_group squid #添加 指定帐号基本组 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
iptables -F #清空防火墙策略
setenforce 0 #关闭SELinux
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #容许访问3218端口的tcp数据包经过
service squid restart
systemctl stop firewalld.service
setenforce 0
systemctl start httpd #开启web服务
首先代理服务器要配置双网卡,
其中ens33为内网网关192.168.100.1;
ens36为外网网关12.0.0.1;
web服务器 12.0.0.12
client客户端 192.168.100.50
echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发 iptables -F #清空防火墙策略 iptables -t nat -F
#这边解释一下,可能有人会问不该该是3128端口么,其实不是,由于我使用squid4.1版本作的,有些东西和3.4版本可能会不一样,若是设置3128端口,squid服务会没法开启的,由于3128端口在被占用。
重启squid代理服务
service squid stop
service squid start
netstat -ntap | grep squid
tcp 0 0 192.168.100.1:3129 0.0.0.0: LISTEN 57899/(squid-1)
tcp6 0 0 :::3128 ::: LISTEN 57899/(squid-1)这里能够看到咱们设置的3129端口已经启动了
这样透明代理就完成了
#注:squid4.1和squid3.4版本配置仍是有些不一样的,但愿能帮助到各位