squid之透明代理服务器

 Squid 是一个万维网客户的高性能代理缓存服务器。它支持 FTPgopher 以及 HTTP 数据对象。与传统的缓存软件不同,Squid 只用一个非堵塞的 I/O 驱动的进程来处理所有请求。Squid 保存元数据,把特别热门的对象缓存在内存中;它还缓存 DNS 查寻,支持非堵塞 DNS 查寻,并对失败的请求实现负缓存。

Squid 由一个主服务器程序 squid,一个域名系统查寻程序 (dnsserver),一个用来检索 FTP 数据的程序 (ftpget),以及一些管理和客户工具组成。

squid之透明代理服务器

 

 

原理:在正向代理服务器中客户端不用指明网关,只要客户端在每次上网时指明代理服务的IP地址和端口号,当客户端把数据包发送到服务器上,服务器就会查找缓存,缓存中如果存在客户端需要的,就直接回复给客户端,可以提高速度,如果缓存中没有,服务器就自己去找,请求完之后放入缓存,然后再给客户端,但是每次上网都要指明代理服务器是很麻烦的,所以在这里我们就用透明代理服务器来解决上面的问题,客户端不用指明代理服务器的IP和端口号,对于代理服务器客户端是看不到的,但是代理服务器仍然是存在的,假如客户端访问www.baidu.com,在这里需要明DNS指向,DNSIP是外网,而且代理服务器又不支持DNS代理,所以DNS不能被解析,我们可以使用SNAT转换,打开代理服务器的数据包转发功能,这样就可以把DNS给解析,然后目标主机的IP地址就有(在这里我们只给DNSNAT,如果要是都做SNAT,那客户端发的数据包就不会经过代理服务了),当客户端把数据包发送到代理服务器,数据包中有目标IP,IP,TCP协议,端口号,代理服务器就会把协议的端口号改为3128进行重定向,实现上网功能,

透明代理的配置步骤 

  1.客户端  配置网关 dns指向

  2.服务器上   重定向 80---3128squid

  3.服务器上   SNAT (DNS}

  4.服务器   数据包转发   /etc/sysctl.conf  systcl -p

  5.服务器  支持透明代理    transparent

案例:完成PC1能过通过透明代理服务器上网,如下拓扑

 

常见的代理服务器有SquidVarnish(只做反向代理)、ATSNginx(既是可以做web服务器又可以做反向代理,但通常做反向代理)

按照上面的原理我们来画拓扑图

 

配置步骤:

1)挂载光盘到指定目录中,并安装squid软件包(服务器需要2块网卡,1块是(图中eth1)桥接用来连接外网,一块是(图中eth0host-only链接方式,用于和内网主机链接)

通过rpm来安装squid软件包

[root@localhost ~]# mkdir /mnt/cdrom         #新建光盘挂载点

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom  #把光盘挂载到挂载点

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server         #切换到服务软件包上

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm   #安装squid软件包

warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...                ########################################### [100%]

   1:squid                  ########################################### [100%]

 [root@localhost Server]# rpm -ql squid |less    #安装好后我们来查看文件存放路径

/etc/httpd/conf.d/squid.conf       #apache可以一起使用

/etc/logrotate.d/squid

/etc/pam.d/squid

/etc/rc.d/init.d/squid            #控制脚本

/etc/squid/squid.conf           #服务器的主要配置文件

/etc/squid/squid.conf.default     #如果配置文件不小心被删除,这个文件是配置文件模板

/usr/lib/squid                 #服务器的安装位置

/var/log/squid                 #日志存放位置

/var/spool/squid               #缓存存放

[root@localhost Server]# service squid start        #启动服务

init_cache_dir /var/spool/squid... 启动 squid.           [确定]

 #Squid的监听端口是tcp/3128    udp/3130

[root@localhost ~]# netstat -tupln |grep squid

tcp        0      0 0.0.0 .0:3128                0.0.0 .0:*                   LISTEN      4508/(squid)       

udp        0      0 0.0.0 .0:44439               0.0.0 .0:*                               4508/(squid)       

udp        0      0 0.0.0 .0:3130                0.0.0 .0:*                               4508/(squid)       

[root@localhost ~]#

2)代理服务器的IP地址配置,要添加一块网卡

 

3PC1我用的是windows server 2003虚拟机,此虚拟机用host-only连接在客户端上配置IP地址,网关,DNS指向

 

4)关于DNSSNAT转换

在服务器上我们使用下面命令

[root@localhost ~]# iptables -t nat –L      #打开iptables表格

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination    

在上面的表中有两个链是我们经常要用到的,PREROUTINGPOSTROUTING链,PREROUTING是在路由判断之前,POSTROUTING是在路由判断之后,路由判断就是指当路由收到一个数据包后,会查看目标IP与路由表进行比对,最终找到出口,把数据包放到输出队列,所以SNAT是在路由判断之后,DNAT是在路由判断之前,DNSUDP,53端口进行追加

[root@localhost ~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eth1 -j MASQUERADE

我们可以进行验证,只要能把域名解析为IP地址就可以了

 

5)在代理服务器上进行重定向,因为数据包是在网络层传输,数据包中有目标IP,IP,协议,端口号等,假如客户端访问www.baidu.com,当客户端把数据包发送到服务器后,服务器会把数据包中的端口进行重定向到代理服务器的3128上,就是不需要客户端每次上网都要指明代理服务器IP和端口,由代理服务器自己完成,改变端口重定向还是在iptables表中完成,

[root@localhost ~]# iptables -t nat –R PREROUTING 1 -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

6)在服务器上打开数据包的转发功能

[root@localhost ~]# vim /etc/sysctl.conf

# Controls IP packet forwarding

net.ipv4.ip_forward = 1            #IP地址转发功能打开

[root@localhost ~]# sysctl –p       #让修改生效

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 4294967295

kernel.shmall = 268435456

6)上面的基本做完后我们在配置控制策略

http_port 3128  transparent       #在大约920行添加transparent支持透明模式

http_access allow localhost  637

http_access allow all  #修改http_access deny allhttp_access allow all  允许用户访问

[root@localhost]#squid –k parse     #查看语法错误

[root@localhost ~]# service squid restart

停止 squid                                               [确定]

启动 squid.                                              [确定]

7)你就测试一下吧

 

 

 

 

 

 

你可能感兴趣的:(代理服务器,squid)