开发者社区> 技术小阿哥> 正文

Squid做正向代理的一些应用

简介:
+关注继续查看

一、squid acl访问控制

mv squid.conf squid.conf.backup

egrep -v "^#|^$" squid.conf.backup > squid.conf

[root@squid etc]# wc -l squid.conf

44 squid.conf

1)对url进行关键字过滤

在squid.conf文件中添加如下两行:

acl qq url_regex -i ^http://.*qq.*$

http_access deny qq

在浏览器中进行访问www.baidu.com,测试结果如下(注意一定要使用代理访问):

wKioL1gDLfjQju_WAAPqg857lEw048.jpg-wh_50

然后使用命令让squid重读配置文件:

[root@squid ~]# squid -k reconfig

[root@squid ~]# lsof -i :3128

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

squid   22446 squid   15w  IPv4  43702      0t0  TCP *:squid (LISTEN)

squid   22446 squid   17u  IPv4  43646      0t0  TCP 192.168.49.135:squid->192.168.49.1:11361 (ESTABLISHED)

再次在浏览器中打开www.baidu.com,查看结果如下:

wKiom1gDLiyxQamOAAIWEhIusyM680.jpg-wh_50

已经出现"Access Denied"错误,说明配置生效。

2)对url路径中的关键字进行过滤

将上面添加的两行注释掉,再添加如下两行:

acl qq_path urlpath_regex -i \.*qq*

http_access deny qq_path

然后让squid重读配置文件:

squid -k reconfig

最后在浏览器中进行访问测试:

wKiom1gDL-SAR5AJAALq7cbmBq8790.jpg-wh_50

打开http://im.qq.com/正常。

wKioL1gDL-vBv0TPAAIjFE3EFL8981.jpg-wh_50

打开http://im.qq.com/pcqq/出现“Access Denied”错误,说明基于urlpath的acl规则生效,注意:urlpath是对http://*.*.*.*/ 后面的路径起作用的,因此http://im.qq.com/打开正常。

3)生产案例

限制使用BT和下载mp3:

acl BT urlpath_regix -i \.torrent$.

acl BT urlpath_regix -i \.torrent$ \.mp3$

http_access deny BT

限制访问某些网站:

acl sex url_regex -i ^http://.*sex.*$

http_access deny sex

二、配置web界面查看squid相关配置

1、首先安装apache

yum -y install httpd

2、配置并启动apache

[root@squid etc]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak

[root@squid etc]# vi /etc/httpd/conf/httpd.conf

[root@squid etc]# diff /etc/httpd/conf/httpd.conf.bak /etc/httpd/conf/httpd.conf

136c136

< Listen 80

---

> Listen 8001   #修改监听端口为8001,这里也可以不改,但是一般不适用80端口

1009a1010,1015

> ScriptAlias "/squid" "/usr/local/squid/libexec/cachemgr.cgi" #创建一个别名,使用cachemgr.cgi

> <Location "/squid">  #添加一个apache访问路径

>      Order deny,allow

>      Deny from all

>      Allow from all

> </Location>

[root@squid etc]# /etc/init.d/httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for squid.contoso.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]

[root@squid etc]# 

3、修改squid.conf默认配置

因为在squid的默认配置文件中有http_access deny !Safe_ports一行,所以需要把上面配置的8001端口添加到Safe_ports中,不然会出现访问拒绝错误。

acl Safe_ports port 8001 

3、在浏览器中查看

wKioL1gDOAvDLZGBAAGmzfbvlUY795.jpg-wh_50

输入访问url,http://192.168.49.135:8001/squid/,用户名密码默认为空。

wKiom1gDOBTgys2GAAOCm_sWmeU138.jpg-wh_50

打开之后,可以看到很多squid相关的信息。

wKiom1gDOCeCHFYrAAO2DQXFLN0954.jpg-wh_50

比如可以看squid缓存的对象,虽然命令行也可以进行查看,但是这里提供了一个方便的web界面。

三、使用squid做透明代理

主机名 角色 IP地址
squid.contoso.com squid代理服务器

eth0:192.168.49.135

eth1:172.16.49.135

ldapserver.contoso.com
squid客户端 eth1:172.16.49.139

1)编辑squid配置文件

主要是修改如下两点:

   a.设置http_port为透明代理模式

   b.添加相关参数如下: 

        cache_mem  90 MB  #注意90后面有一个空格,不然会有警告:WARNING: No units on 'cache_mem 90MB', assuming 90.00 bytes

        cache_swap_low  90

        cache_swap_high 95


        maximum_object_size  8192 KB

        minimum_object_size  0 KB

        maximum_object_size_in_memory  4096 KB

        memory_replacement_policy  lru

        emulate_httpd_log  on

[root@squid etc]# cp squid.conf squid.conf.bak$(date +%F)

[root@squid etc]# vi squid.conf

[root@squid etc]# diff squid.conf.bak2016-10-16 squid.conf

36c36

< http_port 3128

---

> http_port 3128 transparent  #设置透明代理模式

51a52,61

> cache_mem  90 MB

> cache_swap_low  90

> cache_swap_high 95

> maximum_object_size  8192 KB

> minimum_object_size  0 KB

> maximum_object_size_in_memory  4096 KB

> memory_replacement_policy  lru

> emulate_httpd_log  on

2)修改防火墙设置

添加防火墙规则:

[root@squid etc]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128

[root@squid etc]# iptables -t nat -A POSTROUTING -o eth0 -s 172.16.49.0/24 -j MASQUERADE

3)开启ipv4转发功能

[root@squid etc]# sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf 

[root@squid etc]# grep ip_forward /etc/sysctl.conf 

net.ipv4.ip_forward = 1

[root@squid etc]# sysctl -p

4)测试squid客户端网络

[root@ldapserver ~]# ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:A5:4C:68  

          inet addr:172.16.49.139  Bcast:172.16.49.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fea5:4c68/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:349 errors:0 dropped:0 overruns:0 frame:0

          TX packets:223 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:30075 (29.3 KiB)  TX bytes:24303 (23.7 KiB)

[root@ldapserver ~]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

172.16.49.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1

[root@ldapserver ~]# ping 202.96.128.86

connect: Network is unreachable

[root@ldapserver ~]# ping www.baidu.com

ping: unknown host www.baidu.com

5)重读squid配置

squid -k reconfig

6)将squid服务器的内网IP地址设置为squid客户端的默认网关

[root@ldapserver ~]# route add default gw 172.16.49.135

[root@ldapserver ~]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

172.16.49.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1

0.0.0.0         172.16.49.135   0.0.0.0         UG    0      0        0 eth1

7)测试squid透明代理

在squid服务器上:

[root@squid network-scripts]# squid -k rotate  #日志轮询

[root@squid network-scripts]# tail -f /usr/local/squid/var/logs/access.log  #观察访问日志

在squid客户端上:

[root@ldapserver ~]# ping www.baidu.com

PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.

64 bytes from 14.215.177.38: icmp_seq=1 ttl=127 time=8.00 ms

64 bytes from 14.215.177.38: icmp_seq=2 ttl=127 time=8.13 ms

64 bytes from 14.215.177.38: icmp_seq=3 ttl=127 time=7.89 ms

64 bytes from 14.215.177.38: icmp_seq=4 ttl=127 time=35.1 ms

^C

--- www.a.shifen.com ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3229ms

rtt min/avg/max/mdev = 7.890/14.790/35.124/11.740 ms

squid客户端已经可以通过squid服务器上网了。



本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1862393,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Squid缓存代理服务器
Squid缓存代理服务器
179 0
Web缓存服务——Squid代理服务器应用(中)
正向代理:代替客户端向服务端发送请求。 反向代理:代理服务端,将请求转发给多个服务端。
72 0
Web缓存服务——Squid代理服务器应用(上)
正向代理:代替客户端向服务端发送请求。 反向代理:代理服务端,将请求转发给多个服务端。
209 0
Web缓存服务——Squid代理服务器应用(下)
正向代理:代替客户端向服务端发送请求。 反向代理:代理服务端,将请求转发给多个服务端。
82 0
squid 代理服务器应用(下)
定位是缓存加速 缓存从后端的web服务器获取到的 加速是为了客户端访问的 squid 三种模式: 传统代理 需要客户端指向squid代理服务器,客户端能感知到squid代理服务器的存在 透明代理(常用) 客户端不需要配置,只要直接访问即可,服务端,借助了防火墙规则及静态路由的方式,完成透明代理 反向代理 做为类似与Nginx服务器的反向代理功能,但自身不需要一个首页,基于IP:端口,权重的方式完成反向 代理 对于Squid自身的管理/功能 : ACL:主要做的是http access (基于http协议,access访问) 的允许和拒绝管理 sarg:日志分析功能,可以以天的方式指定将ac
140 0
squid 代理服务器应用(上)
Squid 主要提供缓存加速、应用层过滤控制的功能。
101 0
+关注
技术小阿哥
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载