Squid在企业中的应用
Squid是一个很好的代理软件,与NAT是不同的技术,具有很强的控制力度,是应用层的,能基于应用层参数【协议】、网络层参数【地址】、传输层参数【协议 端口号等】进行控制,唯一的缺点是支持的应用少。而NAT支持的应用比较多。如ipsec、AH等。
Windows上的代理有:wingate sygate winroute proxy等等
Linux上的代理有:squid 等。
代理服务器的原理、作用及缓存加速机制这里就不提了,不懂的可以百度一下,代理一般走的端口号是8080或者是3128,squid的就是3128,下面是具体配置
CDN 内容分发网络
1、Squid的安装与简单配置
(图一)
以上是我的局域网拓扑图 要求pc1通过squid代理服务器访问到外网
(1)、首先配置eth0和eth1网卡及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服务器
上面提到的16X256个目录在/var/spool/squid/下已建立
Squid已经启动了
(5)、在pc1上使用代理测试一下
在pc1上设置代理为,依次单击IE浏览器上的"工具">"Internet选项">"连接">选择"局域网设置"》如图:
访问一下百度看看
用上面的出错信息可以看到,别拒绝了,因为默认是拒绝所有的http_access deny all ,所以为了我们测试在squid.conf配置文件http_access deny all 前面再加上一句 http_access allow all 重启squid服务
(6)、再次测试并查看squid日志
打开了百度网页 ,好了可以上网了
其中日志中带有的 TCP_HIT 表示缓存命中,可以提高访问速度,对应TCP_MISS表示缓存丢失
下面是实例
2、Squid实现正向代理
拓扑图同图一
1、禁止ip为192.168.2.2的内网访问外网
在squid中写入下策略(在上述的基础上)
2、禁止ip在192.168.2.2---2.10的内网访问外网
3、只允许192.168.2.10的内网访问192.168.1.1进行路由管理
4、综合,禁止在上班时间08:00--18:00内访问网址中带有"qq"的网址,禁止访问域名是.sina.com.cn的所有站点,禁止浏览网站中的.jpg图片
好了,1、2、3、4后都有http_access allow all 这一项,测试我就不截图了,是没问题的。
本实验的内网网段为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为开启 0 为关闭
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 MASQUERADE
(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日志
4、squid之反向代理
上述拓扑图,某公司内网用一台web服务器,要求internet的用户通过访问本公司的合法ip即192.168.3.100的80端口即可访问内网的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测试
可以了,不懂的可以留言