Squid实现正向代理及访问控制--技术流ken

Squid及正向代理简介 Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。--摘自360百科 本篇博客将详细演示如何使用squid实现正向代理以及浏览内容过滤。 所谓正向代理模式,是指让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为标准代理模式与透明代理模式。标准正向代理模式是把网站数据缓存到服务器本地,提高数据资源被再次访问时的效率,但是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号信息,否则默认不使用代理服务。 Squid正向代理访问流程 使用Squid服务程序提供正向代理服务的拓扑如下图所示。局域网内的主机如果想要访问外网,则必须要通过Squid服务器提供的代理才行,这样当Squid服务器接收到用户的指令后会向外部发出请求,然后将接收到的数据交还给发出指令的那个用户,从而实现了用户的代理上网需求。另外,从拓扑图中也不难看出,企业中的主机要想上网,就必须要经过公司的网关服务器,既然这是一条流量的必经之路,因此企业一般还会把Squid服务程序部署到公司服务器位置,并通过CL(访问控制列表)功能对企业内员工进行上网审计及限制。 Squid安装环境准备 这里我准备了两台虚拟机,鉴于工作中大部分都是Windows使用代理,所以我就使用windows来演示了。一台安装linux,另外一台安装windows,无论是windows还是linux都是一样的! 服务器端需要准备两块网卡,一块网卡负责对内通信,另外一张网卡负责对外通信。 服务器端linux: 外网IP: 172.20.10.2 内网IP: 192.168.11.2 客户端windows:内网IP: 192.168.11.137 linux服务器 第一步:代理服务器添加网卡 一个连接外网,一个连接内网 第二步:生成网卡配置文件 复制代码 [root@ken network-scripts]# cp ifcfg-eth0 ifcfg-eth1 [root@ken network-scripts]# vim ifcfg-eth1 NAME="eth1" DEVICE="eth1" ONBOOT=yes NETBOOT=yes BOOTPROTO=static TYPE=Ethernet IPADDR=192.168.11.2 NETMASK=255.255.255.0 复制代码 第三步:重启网络 至此linux网卡配置完成 复制代码 [root@ken network-scripts]# ip a | grep eth1 3: eth1: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 inet 192.168.11.2/24 brd 192.168.108.255 scope global noprefixroute eth1 复制代码 windows客户端 只需要给客户端添加一个内网IP即可 现在可以使用仅主机模式下的windows访问外网,发现是访问不通的 Squid安装 第一步:关闭防火墙 复制代码 [root@ken ~]# systemctl stop firewalld [root@ken ~]# setenforce 0 复制代码 第二步:下载squid服务程序 [root@ken ~]# yum install squid -y 第三步:启动squid squid默认监听的是3128端口,安全起见,在公司内部布置的正向代理服务器建议修改监听的端口号。 复制代码 [root@ken ~]# systemctl restart squid [root@ken ~]# ss -tnl | grep 3128 LISTEN 0 1024 :::3128 :::* 复制代码 Squid实现正向代理 其实下载并启动完成之后,我们就可以使用squid代理服务了。 第一步:打开你的浏览器工具>Internet选项,看到如下界面 第二步:点击连接>局域网设置 可以看到如下的界面 第三步:填写服务器端内网IP及squid的端口号,点击确定即可。 填写的是内网代理端的内网IP,可以和客户端通信的IP网段 第四步:浏览器测试 刷新浏览器即可发现仅主机模式下的windows也可以上网了 Squid常用的访问控制列表 url_regex与urlpath_regex的区别 1. url_regex url_regex ACL用于匹配请求URL的任何部分,包括传输协议和原始服务器主机名。例如,如下ACL匹配从FTP服务器的MP3文件请求: acl FTPMP3 url_regex -i ^ftp://.*\.mp3$ 2. urlpath_regex urlpath_regex与url_regex非常相似,不过传输协议和主机名不包含在匹配条件里。这让某些类型的检测非常容易。例如,假设你必须拒绝URL里的"sex",但仍允许在主机名里含有"sex"的请求,那么这样做: acl Sex urlpath_regex sex 另一个例子,假如你想特殊处理cgi-bin请求,你能这样捕获它们: acl CGI1 urlpath_regex ^/cgi-bin 当然,CGI程序并非总在/cgi-bin/目录下,这样你应该编写其他的ACL来捕获它们。 总结 1. url_regex匹配整个URL部分,包含传输协议和主机名 2. urlpath_regex不包含传输协议和主机名 3. 可以单独使用url_regex完成百分之90以上的工作 4. url_regex和urlpath_regex都支持正则 5. URL中的.需要使用\进行转义 Squid正向代理之ACL访问控制 演示一:只允许192.168.43.1主机使用代理服务 第一步:修改配置文件 acl ken src 192.168.43.1/24 :定义了一个别名ken http_access all ken :定义了允许来自ken的访问 http_access deny all :拒绝其他任何主机的访问 复制代码 [root@ken ~]# vim /etc/squid/squid.conf ... 27 acl ken src 192.168.43.1/24 28 29 # 30 # Recommended minimum Access Permission configuration: 31 # 32 # Deny requests to certain unsafe ports 33 http_access all ken 34 http_access deny all ... 复制代码 第二步:重启squid服务 [root@ken ~]# systemctl restart squid 第三步:window端刷新界面 发现已经上不去网了 演示二:禁止访问www.baidu.com网站 在做一个演示的时候把之前定义的规则都删掉 第一步:修改配置文件 复制代码 acl ken url_regex www.baidu.com #定义url_regex规则 acl kenken src 192.168.11.137 #定义客户端地址 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken #拒接url http_access allow kenken #接受客户端地址的访问 复制代码 第二步:重启服务 [root@ken ~]# systemctl restart squid 第三步:window端查看 现在我的博客又能访问了 现在访问下百度网站试试 现在访问被拒绝了,说明我们配置是生效的 演示三:禁止网址中包含redis的网站 第一步:修改配置文件 添加如下内容 .*表示任意长度的任意内容 复制代码 acl ken url_regex .*redis.* acl kenken src 192.168.11.137 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken http_access allow kenken 复制代码 第二步:重启服务 [root@ken ~]# systemctl restart squid 第三步:windows端查看 现在我的博客还是能访问的 浏览一下redisdoc网站 可以发现只要带有redis的网站都会被拒绝访问 演示四:禁止访问网址中以mp3为结尾的网站 这个我就不演示了无非就是添加一条 acl ken url_regex .*mp3$ acl写来写去还是考验大家的正则表达式 大家有兴趣的可以找一个这样的网站来测试一下 演示五:基于时间段20:00-8:00 第一步:修改配置文件 定义一个时间段 拒绝该时间段的访问 复制代码 acl ken time 20:00-23:50 acl kenken src 192.168.11.137 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken http_access allow kenken 复制代码 第二步:重启服务 [root@ken ~]# systemctl restart squid 第三步:windows端查看 该时段下的上网服务会被拒绝 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。https://www.cnblogs.com/kenken2018/p/9994370.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信