一、squid简介
Squid是一个缓存Internet数据的一个软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。并且,Squid可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。
Squid可以工作在很多的操作系统中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。
对于Web用户来说,Squid是一个高性能的代理缓存服务器,和一般的代理缓存软件不同、Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid由一个主要的服务程序Squid,一个DNS查询程序DNS server,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的DNS server进程,而每一个DNS server进程都可以执行单独的DNS查询,这样就大大减少了服务器等待DNS查询的时间。
二、配置ip及测试网络
1、添加双网卡
2、给两块网卡配置ip地址
[root@zyx ~]# ifconfig eth0 192.168.99.100 //内网ip地址 [root@zyx ~]# ifconfig eth1 192.168.101.50 //外网ip地址
内网网卡
外网网卡
4、重启网络服务
[root@zyx ~]# service network restart //重启网络服务,是配置的ip生效
5、查看是否配置网关
[root@zyx ~]# route –n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 192.168.101.254 0.0.0.0 UG 0 0 0 eth1 //有参数指向该网关6、编辑域名文件,使内网实现上网功能
[root@zyx ~]# vim /etc/resolv.conf
7、在内网上ping外网网关和百度,看是否能上网
[root@zyx ~]# ping 192.168.101.254 //可以ping通网关
[root@zyx ~]# ping www.baidu.com //可以ping通百度,可以上网
三、安装squid
[root@zyx ~]# mkdir /mnt/cdrom/ //建立光盘挂载点 mkdir: cannot create directory `/mnt/cdrom/': File exists
[root@zyx ~]# mount /dev/cdrom /mnt/cdrom/ //挂载光盘 mount: block device /dev/cdrom is write-protected, mounting read-only [root@zyx ~]# cd /mnt/cdrom/Server/ //切换到该目录下找到安装文件[root@zyx Server]# ll squid-2.6.STABLE21-3.el5.i386.rpm
-r--r--r-- 278 root root 1341103 Sep 23 2008 squid-2.6.STABLE21-3.el5.i386.rpm //稳定版[root@zyx Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm //安装squid
安装成功!没有依赖性,直接可以安装!
查看squid的相关文件
[root@zyx Server]# rpm -ql squid |less
/etc/rc.d/init.d/squid //独立守护进程
/etc/squid/squid.conf //配置脚本
/etc/squid/squid.conf.default //样例文件
四、相关案例
案例1 内网中实现上网
1、打开一台Windows虚拟机配置其ip地址,并添加代理服务器
2、添加代理服务器
3、编辑配置文件
[root@zyx squid]# vim /etc/squid/squid.conf
5、初始化squid
[root@zyx squid]# service squid start
init_cache_dir /var/spool/squid... Starting squid: . [ OK ] //启动squid6、查看端口是否启动
[root@zyx squid]# netstat -tupln |less //端口已启动
[root@zyx squid]# vim /etc/squid/squid.conf //编辑配置文件
7、写策略,使内网实现上网
[root@zyx squid]# service squid restart //重启服务 Stopping squid: [ OK ]
Starting squid: . [ OK ]可以在内网中访问百度及其他网页,实现上网
8、将内网ip添加到端口号中
[root@zyx squid]# vim /etc/squid/squid.conf
[root@zyx squid]# squid -k parse //检测配置语法
[root@zyx squid]# service squid restart
Stopping squid: . [ OK ] Starting squid: . [ OK ]9、查看端口情况
[root@zyx squid]# netstat -tupln |less //端口号前面不再是0,而是内网的ip
案例2 正向代理
一、基于源地址
[root@zyx squid]# vim /etc/squid/squid.conf //编辑配置文件,使某个ip(192.168.99.10)地址不能访问网络,其他ip可访问网络
[root@zyx squid]# service squid restart //重启服务 Stopping squid: . [ OK ]
Starting squid: . [ OK ]测试:
1、将用户机的ip设为192.168.99.10
2、在该用户的浏览器中访问网页
不能访问外网!
3、将用户机的ip改为192.168.99.12
4、在该用户的浏览器中访问网页
此时,可以访问外网!
root@zyx squid]# vim /etc/squid/squid.conf //编辑配置文件,使某一范围的ip地址不能访问网络
[root@zyx squid]# service squid restart //重启服务 Stopping squid: ................ [ OK ]
Starting squid: . [ OK ]5、刷新一下浏览器(注:此时用户主机ip为192.168.99.12)
不能访问外网!
6、将用户主机ip改为192.168.99.20
也不能访问外网!
7、将用户主机ip改为192.168.99.21
可以访问网络!
二,基于目的地址
1、编辑配置文件并写策略
[root@zyx squid]# vim /etc/squid/squid.conf //
[root@zyx squid]# service squid restart
Stopping squid: [ OK ] Starting squid: . [ OK ]
三、基于URL
[root@zyx squid]# vim /etc/squid/squid.conf
[root@zyx squid]# service squid restart
Stopping squid: . [ OK ] Starting squid: . [ OK ] [root@zyx squid]#
四,基于时间
[root@zyx squid]# vim /etc/squid/squid.conf
[root@zyx squid]# service squid restart
Stopping squid: . [ OK ] Starting squid: . [ OK ]
[root@zyx squid]# vim /etc/squid/squid.conf
[root@zyx squid]# service squid restart
Stopping squid: [ OK ] Starting squid: . [ OK ]
[root@zyx squid]# vim /etc/squid/squid.conf
[root@zyx squid]# service squid restart
Stopping squid: . [ OK ] Starting squid: . [ OK ]
修改一下服务器的时间
案例3 透明代理
1、设置浏览器
2、给客户机配置ip地址(注:客户机的网关及DNS均要设置)
3、编辑此文件,实现nat转换功能
[root@zyx ~]# vim /etc/sysctl.conf //将下图显示项的0改为1
[root@zyx ~]# sysctl –p //使nat转换生效
4、在squid所在的机器上,设置DNS关于NAT的转换
[root@zyx ~]# iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -p udp --dport 53 -o eth1 -j MASQUERADE //做nat解析
[root@zyx ~]# iptables -t nat -L -v –n
5、设置端口重定向
[root@zyx ~]# iptables -t nat -A PRETROUTING -p tcp --dport 80 -i eth0 -j REDIRECT --to-ports 3128 //将别的网站的80端口的请求提取到3128端口,通过nat转换提取,通过路由转发前的链实现
root@zyx ~]# iptables -t nat -L -v –n
6、编辑配置文件
[root@zyx ~]# vim /etc/squid/squid.conf //禁用以前设置的规则,以免干扰nat转换
7、将3128端口设为透明
[root@zyx ~]# service squid restart //重启服务
Stopping squid: [ OK ] Starting squid: . [ OK ]8、在客户机上访问因特网
可以成功访问网络!透明代理成功!
案例4 反向代理
[root@node1 ~]# mkdir /mnt/cdrom
mkdir: cannot create directory `/mnt/cdrom': File exists [root@node1 ~]# mount /dev/cdrom /mnt/cdrom/ mount: block device /dev/cdrom is write-protected, mounting read-only [root@node1 ~]# cd /mnt/cdrom/Server/ [root@node1 Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm Preparing... ########################################### [100%] package httpd-2.2.3-31.el5.i386 is already installed[root@node1 Server]# cd /var/www/html/
[root@node1 html]# echo "welcom to my home" >index.html [root@node1 html]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ][root@node1 html]# cd /mnt/cdrom/Server/
[root@node1 Server]# rpm -ivh lynx-2.8.5-28.1.el5_2.1.i386.rpm
Preparing... ########################################### [100%] 1:lynx ########################################### [100%][root@node1 html]# lynx http://127.0.0.1