Squid代理服务器(一)——大家所用的游戏代理软件到底为何物?
一、代理服务器应用场景分析
想当年大学时候宿舍控制网速,苦了我们这帮魔兽党,一到晚上工会活动我们就得和全校上万名学生抢网速,作为坦克的我总是因为网速问题导致团灭,咱也是有自尊的人,一怒之下花300元办了个游戏加速器,果然顺畅了不少,宿舍朋友看我办代理,他们也买,总之第一次接触代理就是在大学时代,如今做技术了才开始深入探究这东西了,那么我们企业应用的代理不简简单单是加快网速的作用,还有很多功能,等我慢慢给你们说……
代理服务器可以代替客户端向网站发出数据的请求,然后它会做一个缓存将得到的静态数据保存在代理服务器的缓存,缓存在它本地里面,等下一次有用户去进行请求的时候,代理服务器就会把这些数据直接交还给客户端,加快访问速度,企业要求的提升网速目的就实现了,常用的代理服务器软件有Squid、Nginx
我们知道iptables 防火墙可以对局域网起到良好的保护作用,并提供了SNAT和DNAT地址转换策略,为共享接入互联网提供了方便,但是iptables不容易实现企业对员工的上网访问实施非法站点屏蔽,限制文件下载等管理和提升企业上网速度;我们知道它是包过滤型防火墙,工作在网络层和传输层,而代理服务器呐属于工作在应用层,相当于一个应用层的防火墙。
Squid里面有ACL访问控制列表,可以自行定义哪些企业人员可以在什么时间段上网等功能,以及可以达到上网访问的数据的类别,比如我们只允许某些员工上网查资料,而不允许登录qq等操作,都可以通过Squid来精确的控制。但是有些应用程序不允许使用代理,这也算是它的一个弊端把,另外注意代理服务器不是一个网关服务器,不需要开路由转发功能,因此安全性要比iptabls好
二、代理的分类
根据实际应用方式分类:传统代理、透明代理;下面还会介绍一种反向代理,我们可以简单地这样理解,普通代理是内网访问外网时配置的,反向代理就是外网需要访问我们局域网服务器配置的
传统代理多用于Internet环境,比如说,为我们qq程序使用代理,可以隐藏本机真实的IP,为下载工具使用代理,可以避免我们服务器并发连接的限制,透明代理呐,多用于局域网环境,比如说咱们Linux网关中,启用透明代理,局域网主机就不用进行设置了,适合内部员工上网
1、传统代理
普通的代理服务,须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口、由代理服务器代替客户机去请求数据
例如访问某些国外网站,可以通过一台Internet上的代理服务器
2、透明代理
客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
3、反向代理
接受因特网的连接请求,并将请求转发给内网的服务器,获得数据后返回给因特网的客户端,类似于用iptables的DNAT策略发布服务器
三、代理的工作机制
当我们客户机对网站进行访问请求时,代理服务器首先会查看自己的缓存里有没有客户机要访问的静态数据,同时访问网站,比对静态数据的一致性,如有不同,则更新静态数据,随网站提供的动态数据一起,把动静态数据一起交给客户机。
以上过程我再拿一个例子解释一下,我们大家都在火车票代购点买过票吧,当我们需要买票时,我们先到达代购点,OK,这时就可以说我们(客户机)与代购点(代理服务器)联通了,另外,代购点的电脑(代理服务器)也肯定要与火车站售票网站(www.163.com)联通吧,Ok,我们发出买票请求,北京到南京的T888次列车,代购点肯定要查一下电脑,看一看此时我要买的火车票在此时还有没有吧,这就相当于代理服务器首先会查看自己的缓存里有没有客户机要访问的静态数据这一步,查完电脑,证明还有的话直接打印此次列车,就相当于把数据还给我们,如果查完没有票了,就会同步其他能到南京的列车,打印别的车次的火车票给我们,好了,这就是它整个的工作机制。
四、Squid安装与初始化
1 ~]#tar zxvf squid-3.4.6.tar.gz -C /usr/src/ 2 ~]#cd /usr/src/squid-3.4.6/ 3 ~]#./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 4 ~]#make && make install 5 ~]#ln -s /usr/local/squid/sbin/squid /usr/local/sbin/ 6 ~]#useradd -M -s /sbin/nologin squid (这个用户主要用来设置初始化缓存目录的) 7 ~]#chown -R squid:squid /usr/local/squid/var 8 ~]#vim /etc/squid.conf 9 其中可见 10 http_port 3128(监听端口为3128,另外通过icp_port项也能配置监听端口) 11 添加运行用户和组还有提示用配置项 12 cache_effective_user squid 13 cache_effective_group squid 14 visible_hostname 192.168.1.1(当squid出现问题时,可提示192.168.1.1) 15 ~]#squid -k parse (检查配置文件) 16 ~]#squid -z (初始化目录,清除缓存) 17 ~]#squid (运行服务) 18 ~]#netstat -anpt | grep squid 19 tcp 0 0 :::3128 :::* LISTEN 6187/(squid-1) 20 21 扩展命令如下: 22 ~]#killall -9 squid (关闭squid) 23 ~]#squid -k reconfigure (重新加载,但不中断服务,配置更改后,建议用这种方式加载)
注:我写了一个脚本来控制squid服务,大家可以参考我SHELL脚本分类里的文章http://www.cnblogs.com/mangood/p/6033044.html,把脚本放在/etc/init.d/squid下添加为系统服务,然后加执行权限chmod +x /etc/init.d/squid,再加为系统默认启动服务chkconfig --add squid并chkconfig squid on