Squid做正向代理的一些应用-阿里云开发者社区

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

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,如需转载请自行联系原作者

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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10053 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26780 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
11597 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13867 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9156 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4497 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7359 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载