Squid在企业中的应用

   Squid是一个很好的代理软件,与NAT是不同的技术,具有很强的控制力度,是应用层的,能基于应用层参数【协议】、网络层参数【地址】、传输层参数【协议 端口号等】进行控制,唯一的缺点是支持的应用少。而NAT支持的应用比较多。如ipsecAH等。

Windows上的代理有:wingate sygate winroute proxy等等

Linux上的代理有:squid 等。

代理服务器的原理、作用及缓存加速机制这里就不提了,不懂的可以百度一下,代理一般走的端口号是8080或者是3128squid的就是3128,下面是具体配置

CDN 内容分发网络

1Squid的安装与简单配置

Squid在企业中的应用_squid之透明代理

                         (图一)

以上是我的局域网拓扑图 要求pc1通过squid代理服务器访问到外网

1)、首先配置eth0eth1网卡及dns指向确保squid代理服务器能与外网通信

2)、 安装squid服务器

   yum -y install squid  yum 安装

   Rpm -ivh   squid-2.6.STABLE21-3.el5.i386.rpm  rpm安装

配置目录 /etc/squid/

默认访问日志文件 /lvar/log/squid/access.log

监听端口 http_port 3128

cache_mem 64M  用多少内存来进行缓存默认为64M

maxinum_object_size 4086KB 最大缓存对象4M

reply_body_max_size 10240000 allow all 最大访问的对象10M

visible_hostname  proxy.test.com 这个地方一定要配置一下,可以任意写一些内容,不配置squid服务器启动不起来,主要是在客户端访问出错时要显示的字符

cache_dir ufs /var/spool/squid 100 16 256 

Ufs  是缓存数据的存储格式

/var/spool/squid/  存放缓存存放的磁盘目录 (在第一次启动squid是初始化)

100 为缓存目录分配的磁盘空间(默认100M) 

16 缓存空间的一级子目录 (16个)

256 缓存空间的二级子目录 (265个)

由于squid.conf配置文件很大,有4千多行,可以先用如下命令看一下没用注释的行,即要配置的内容。

grep -v "^#" squid.conf |grep -v "^$" 

acl all src 0.0.0.0/0.0.0.0            acl定义某些元素名称,即策略元素 

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

acl SSL_ports port 443

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 443 # https

acl Safe_ports port 70 # gopher

acl Safe_ports port 210 # wais

acl Safe_ports port 1025-65535 # unregistered ports

acl Safe_ports port 280 # http-mgmt

acl Safe_ports port 488 # gss-http

acl Safe_ports port 591 # filemaker

acl Safe_ports port 777 # multiling http

acl CONNECT method CONNECT

http_access allow manager localhost   http_access来定义策略

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost

http_access deny all  默认拒绝全部

icp_access allow all   

http_port 3128    监听的端口,为了安全期间3128前面最好加一个地址,即eth1的地址,这样只允许内网的用户使用squid服务器。

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log squid

acl QUERY urlpath_regex cgi-bin \?

cache deny QUERY

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern . 0 20% 4320

acl apache rep_header Server ^Apache

broken_vary_encoding allow apache

coredump_dir /var/spool/squid

(3)、编辑squid.conf配置文件(/et/c/squid/squid.conf

 添加如下二行

visible_hostname 192.168.2.100

http_port 192.168.2.100:3128

(4)、启动squid服务器

重启之前先检查一下语法 squid -k parseSquid在企业中的应用_squid实现反向代理_02

上面提到的16X256个目录在/var/spool/squid/下已建立  Squid在企业中的应用_squid实现反向代理_03

Squid已经启动了

(5)、在pc1上使用代理测试一下

pc1上设置代理为,依次单击IE浏览器上的"工具">"Internet选项">"连接">选择"局域网设置"》如图:Squid在企业中的应用_squid实现正向代理_04

访问一下百度看看

 

Squid在企业中的应用_Squid在企业中的应用_05

用上面的出错信息可以看到,别拒绝了,因为默认是拒绝所有的http_access deny all ,所以为了我们测试在squid.conf配置文件http_access deny all 前面再加上一句 http_access allow all    重启squid服务

(6)、再次测试并查看squid日志

打开了百度网页 ,好了可以上网了

其中日志中带有的 TCP_HIT 表示缓存命中,可以提高访问速度,对应TCP_MISS表示缓存丢失

下面是实例

2Squid实现正向代理

拓扑图同图一

1、禁止ip192.168.2.2的内网访问外网

squid中写入下策略(在上述的基础上)

Squid在企业中的应用_squid之透明代理_06

重启squid服务并测试和查看日志Squid在企业中的应用_squid实现正向代理_07

2、禁止ip192.168.2.2---2.10的内网访问外网Squid在企业中的应用_squid实现正向代理_08

重启squid服务并测试和查看日志如下:(时刻要观察日志)Squid在企业中的应用_squid之透明代理_09

3、只允许192.168.2.10的内网访问192.168.1.1进行路由管理Squid在企业中的应用_squid实现反向代理_10

4、综合,禁止在上班时间08:00--18:00内访问网址中带有"qq"的网址,禁止访问域名是.sina.com.cn的所有站点,禁止浏览网站中的.jpg图片

Squid在企业中的应用_Squid在企业中的应用_11

 好了,1234后都有http_access allow all 这一项,测试我就不截图了,是没问题的。

3squid的透明代理Squid在企业中的应用_Squid在企业中的应用_12

本实验的内网网段为192.168.2.0/24 代理服务器的eth0网卡的ip地址为192.168.2.20 用于模拟连接内网   eht1的网卡ip地址为192.168.3.1用于模拟连接外网,内网用户不需要配置使用代理的设置,就可以通过squid代理访问外网,即透明代理,,

内网的测试机的ip地址为192.168.2.10,外网web服务器及DNS服务器的ip地址都为192.168.3.100 

按照以上拓扑图,要求pc1通外网的DNS解析访问外网的web页面

试验配置如下:

1)首先你必须先确保能启动squid,如何启动请看上面的配置

2)打开数据包转发功能

vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1  1为开启 为关闭

sysctl -p  加载系统

3)实现DNS解析通过

如果是静态IP用下条命令

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p udp --dport 53 -j SNAT --to 192.168.3.1

如果是动态的IP用下面的命令

iptables -t nat -R POSTROUTING 1 -s 192.168.2.0/24 -p udp --dport 53 -j MASQUERADESquid在企业中的应用_Squid在企业中的应用_13

Squid在企业中的应用_squid实现反向代理_14

  (4)设置端口重定向

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

  (5)编辑squid.conf

 http_port 192.168.2.20:3128 transparent   

 http_access allow all 

5、测试结果及squid日志

 

Squid在企业中的应用_Squid在企业中的应用_15

Squid在企业中的应用_squid实现正向代理_16

Squid在企业中的应用_Squid在企业中的应用_17

4squid之反向代理

Squid在企业中的应用_squid之透明代理_18

上述拓扑图,某公司内网用一台web服务器,要求internet的用户通过访问本公司的合法ip192.168.3.10080端口即可访问内网的web服务器。

我们用squid缓存服务器的反向代理来实现

配置如下:

1)首先你必须先确保能启动squid,如何启动请看上面的配置

2)修改squid.conf配置文件 如下:

http_port 192.168.3.100:80 vhost 

cache_peer  192.168.2.10         parent     80    0    originserver

http_access allow all 

上面的一句话的意思是指明web服务器的地址,在squid没用查到用户请求的数据后,会向自己的父级即内网web服务器,去帮客户去查询。。

 (3)重启squid ,在pc上访问192.168.3.100测试

Squid在企业中的应用_squid实现反向代理_19

可以了,不懂的可以留言