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

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

squid正向代理服务器

 

原理:正向代理就是通常所说的代理,是某台电脑通过一台服务器来上Internet网的这种方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是通常所说的代理服务器。在这种方式中,你是主动的,网站是被动的,网站那里不能得到你的真实ip地址。(通俗讲法)正向代理服务器。它只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器(一般在IE-Internet选项-连接-局域网设置),并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

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

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

squid正向代理服务器_正向

 

实现正向代理服务器的过程

1先在正向代理服务器安装squid组件,(服务器需要2块网卡,1块是(图中eth1)接用来连接外网,一块是(图中eth0host-only链接方式,用于和内网主机链接)

 

通过rpm来安装squid软件包

 [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               #缓存存放

安装好后这时我们来启动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 ~]#

安装完成后squid默认配置是作为正向代理,向内网用户提供链接外网服务,可以配置squid.conf来限制内网用户上网时间,访问网址限制,访问外网文件格式和图片限制等

2)我们进行配置

vim配置squid.conf文件 (别忘记配置前先复制备份)

squid的配置文件共有4519

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

1.# Squid normally listens to port 3128  #920

http_port 192.168.1.254:3128    # squid监听eth0对应ip3128端口

2. # cache_mem 8 MB

cache_mem 80 MB      #1576行添加squid可以使用的内存大小

3.# TAG: visible_hostname  #1995添加一行visible_hostname 自行解析容易出错

visible_hostname  192.168.1.254  我使用的是主机的网关

4. 查找cache_dir     # 此是设置缓存目录

#  TAG: cache_dir     1638

cache_dir ufs /var/spool/squid 100 16 256   #在安装squid软件包后,缓存就存放在该目录,100表示缓存大小100M,一般为内存的1/416表示16个一级子目录,256个二级子目录

5. 查找http_access  

http_access allow localhost  637

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

上述操作仅仅是设置完内网可以通过squid访问外网,并没有对访问进行限制

启动squid服务

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

[root@localhost ~]# service squid restart

停止 squid                                               [确定]

启动 squid.                                               [确定]

(3)

  PC1的设置

PC1我用的是windows server 2003虚拟机,此虚拟机用host-only连接,而且PC1不用配置网关地址,代理服务器在PC上的配置在IE浏览器→属性→连接

squid正向代理服务器_squid_02

squid正向代理服务器_正向_03

 

4)通过编辑主配置文件的acl实现正向代理的访问控制

acl   列表名称   列表类型  列表内容 

1.acl aclname src      ip-address/netmask ... (clients IP address)

#基于客户端来源IP地址控制

例:1.acl MYNETWORKS src 192.168.1.100/32     

http_access allow MYNETWORKS   #允许上面的IP通过squid正向代理访问网络    

http_access deny all                   #除了上面允许的访问控制之外全部拒绝访问   

2.acl aclname src      addr1-addr2/netmask ... (range of addresses)

#基于客户端来源IP地址范围的控制

3.acl aclname dst      ip-address/netmask ... (URL host's IP address)

#基于目标主机IP地址控制

4.acl aclname myip     ip-address/netmask ... (local socket IP address)

#基于本主机IP地址控制

5.acl aclname arp      mac-address ... (xx:xx:xx:xx:xx:xx notation)

#基于MAC地址控制

6.acl aclname srcdomain   .foo.com ...    # reverse lookup, client IP

#基于来源域的控制此方法先解析ip再对ip禁止访问,格式如.abc.com

7.acl aclname dstdomain   .foo.com ...    # Destination server from URL

#基于目标URL控制

8.acl aclname srcdom_regex [-i] xxx ...   # regex matching client name

9.acl aclname dstdom_regex [-i] xxx ...   # regex matching server

10.acl aclname time     [day-abbrevs]  [h1:m1-h2:m2]

 day-abbrevs:

             S - Sunday

             M - Monday

             T - Tuesday

             W - Wednesday

             H - Thursday

             F - Friday

             A - Saturday

          h1:m1 must be less than h2:m2

#基于时间的控制

acl worktime time 08:00-12:00 14:00-18:00    #在这个时间段不能上网

http_access deny worktime 

11.acl aclname url_regex [-i] ^http:// ... # url_regex -i 跟完整路径-i忽略大小写

12.acl aclname urlpath_regex [-i] \.gif$ ...  #urlpath_regex 部分路径,图片格式控制   

13.acl aclname port     80 70 21 ...  #port端口访问控制

14.acl aclname port     0-1024 ...    # ranges allowed(端口范围)

15.acl aclname myport   3128 ...     # (local socket TCP port)

16.acl aclname proto    HTTP FTP ...  #proto定义协议

17.acl aclname method   GET POST ... #方法

18.acl aclname browser  [-i] regexp ... # browser 浏览器访问控制

当然上面列的都是常用控制,我们这个实验是允许局域网内192.168.1.0/24网段通过代理服务器上网,可以用IP范围,也可以用网段,其他控制就要看你需求了。

1. acl ip src  192.168.1.0/24

http_access allow all ip

2.acl ip src  192.168.1.1 -192.168.1.243 255.255.255.255

http_access allow all ip