0x00 废话前言
先说说最近为什么要搞这个玩意,那是因为长城宽带是越来越垃圾了,但是没办法啊,没钱只能用长城宽带了,因为真的是便宜,真香~便宜就是YYDS,知道昨天晚上原本想看个Apple的春季发布会的,但是这破网络竟然打不开苹果的官网,最后就想出来用代理这个方式了,但实质上代理并不是只有这种用处的,而且挂了代理之后发现访问的速度也变快了许多,现在让我们回顾一下Squid代理这个东西
0x01 Squid是啥玩意
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
你可能会想到一些问题:缓冲有多大的用处?什么时候目标(object)应该或者不应该被缓冲?例如,缓冲信用卡号码是完全不适合的,脚本文件的执行结果在远程服务器端,站点经常更新(像www.cnn.com)或者甚至站点不允许缓冲,这些情况也都是不适合缓冲的。Squid处理各种情况是不错的(当然,这需要远程站点按标准形式工作)。可执行的cgi-bin脚本文件不被缓冲,返回正确页眉的页面是在一段限制了的时间内被缓冲,而且你可以规定特殊的规则以确定什么是可以或不可以被缓冲的,还有缓冲的时间为多长。谈到缓冲的用处有多大,这要看Internet的容量大小,各有不同。对于小型的缓冲区(几转磁盘空间)来说,返回值非常高(达到25%)。这个空间缓冲经常访问的站点,如netscape,cnn和其它一些类似情况的站点。如果你增加一倍缓冲的磁盘空间,但你不会成倍增加你的命中率。这是因为你开始缓冲网络中剩余部分时,这些通常时很大的而且很少被访问。一个非常大的高速缓冲区,有20转左右,可能返回值仍小于50%,除非你对保存数据的时间长短经常改变(一般地你不要分配20转的磁盘空间,因为页面很快就会过时,应该被删除掉)。我们在这里说的目标(object)指的是可保存的web页面或其它类似的可下载页面(ftp文件或目录内容也称为目标(object))。
Squid运行在什么系统上?
Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris
0x02 食用处方
这里就不多做演示了,直接yum安装
#yum安装
[root@cn-sz ~]# yum -y install squid
#编辑配置文件
[root@cn-sz ~]# vim /etc/squid/squid.conf
http_port 3128
http_access allow all
coredump_dir /var/spool/squid
#修改好之后启动服务
[root@cn-sz ~]# systemctl start squid
squid添加用户名密码认证,不加这个人人能用,所以为了部落,为了联盟,还是搞一搞吧,squid的认证方式有好几种,但这里用的是NCSA,使用NCSA样式的用户名和密码文件,其他的还有LDAP、MSNT、MSNT、SMB、getpwam、SASL、NTLM这几种有兴趣的话可以自行百度了解一下
#确定squid是否支持authentication helper
[root@cn-sz ~]# rpm -ql squid | grep ncsa_auth
/usr/lib64/squid/basic_ncsa_auth
/usr/share/man/man8/basic_ncsa_auth.8.gz
#生成密码文件(要在在装有apache的机器上运行)
[root@cn-sz ~]# htpasswd -c /etc/squid/passwd auth_user
New password:
Re-type new password:
#编辑配置文件,追加以下内容
[root@cn-sz ~]# vim /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 15
auth_param basic credentialsttl 2 hours
auth_param basic realm Example.com's Squid proxy-caching
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
#重新加载服务
[root@cn-sz ~]# systemctl reload squid
注释:
第一行:选择的认证方式为basic,认证程序路径和密码文件路径。
第二行:认证程序的进程数
第三行:认证有效时间
第四行:认证领域内容,上面定义的web浏览需要输入用户密码
第五,六行:设置允许认证的用户访问
进阶:Squid的日志分析工具SquidAnalyzer
#先安装http服务
[root@cn-sz ~]# yum install httpd
#安装完后把默认的80端口改成8080,因为代理里也设置了这个端口作为代理端口
[root@cn-sz ~]# vim /etc/httpd/conf/httpd.conf
Listen 8080
#下载squidanalyzer文件
[root@cn-sz ~]# wget https://resource.if010.com/tmp/squidanalyzer-6.0.tar.gz
#解压squidanalyzer
[root@cn-sz ~]# tar zxvf squidanalyzer-6.0.tar.gz
[root@cn-sz ~]# cd squidanalyzer-6.0
#编辑安装的perl文件,更改squid的log默认所在目录,并更改squidanalyzer的分析生成文件html目录如下
[root@cn-sz ~]# vim Makefile.PL
my $default_log = '/var/log/squid/access.log';
my $HTMLDIR = $ENV{HTMLDIR} || '/var/www/html/squidreport';
#更改完后,Makefile.PL直接安装
[root@cn-sz ~]# perl Makefile.PL
#若在安装时提示出错,可能是少了perl的模块,直接使用yum安装
[root@cn-sz ~]# yum -y install make automake gcc gcc-c++ gcc-g77 perl-ExtUtils-MakeMaker
#安装成功后使用以下命令直接启动squid-analyzer
[root@cn-sz ~]# /usr/local/bin/squid-analyzer
#添加定时任务为每天0点0分使用squidanalyzer进行日志分析
[root@cn-sz ~]# crontab -e root
0 0 * * * /usr/local/bin/squid-analyzer > /dev/null 2>&1
访问时直接输入IP加刚才修改的端口号加squidreport访问http://localhost:8080/squidreport