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
: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
inet 192.168.11.2/ brd 192.168.108.255 scope global noprefixroute eth1

windows客户端

只需要给客户端添加一个内网IP即可

现在可以使用仅主机模式下的windows访问外网,发现是访问不通的

Squid安装

第一步:关闭防火墙

[root@ken ~]# systemctl stop firewalld
[root@ken ~]# setenforce

第二步:下载squid服务程序

[root@ken ~]# yum install squid -y

第三步:启动squid

squid默认监听的是3128端口,安全起见,在公司内部布置的正向代理服务器建议修改监听的端口号。

[root@ken ~]# systemctl restart squid
[root@ken ~]# ss -tnl | grep
LISTEN ::: :::*

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
...
acl ken src 192.168.43.1/24 #
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access all ken
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 :-: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端查看

该时段下的上网服务会被拒绝

Squid实现正向代理及访问控制--技术流ken的更多相关文章

  1. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  2. Jenkins凭证及任务演示-pipeline(二)--技术流ken

    Jenkins前言 在上一篇博客<Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken>中已经详细介绍了jenkins的插件安装以版本更新等,本篇博客将再深入探究jenk ...

  3. 分布式系统监视zabbix讲解七之分布式监控--技术流ken

    分布式监控 概述 Zabbix通过Zabbix proxy为IT基础设施提供有效和可用的分布式监控 代理(proxy)可用于代替Zabbix server本地收集数据,然后将数据报告给服务器. Pro ...

  4. MySQL/MariaDB数据库忘掉密码解决办法--技术流ken

    前言 有些时候我们常常会忘掉一些服务的密码,比如系统密码,我们可以进入救援模式进行修改密码,可参考我之前的博客<Centos7破解密码的两种方法--技术流ken>.但有些时候我们也会忘掉数 ...

  5. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken

    前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...

  6. k8s集群监控(十一)--技术流ken

    Weave Scope   在我之前的docker监控中<Docker容器监控(十)--技术流ken>就已经提到了weave scope. Weave Scope 是 Docker 和 K ...

  7. Docker网络(五)--技术流ken

    本章内容 1.dokcer默认自带的几种网络介绍 2. 自定义网络 3. 容器间通信 4. 容器与外界交互 docker网络分为单个主机上的容器网络和多个主机上的哇网络,本文主要讲解单个主机上的容器网 ...

  8. zabbix实现QQ邮件报警通知--技术流ken

    前言 前几天搜了下网上使用zabbix邮件报警通知的文章,大多数还是使用mailx的方法,过程配置起来比较冗余繁琐,这几天想着把自己平时用到的qq邮件报警的方法分享出来供大家参考,以此减少不必要的步骤 ...

  9. zabbix实现百台服务器的自动化监控--技术流ken

    前言 最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控? 本篇博客将讲解一个我工作时做的一个实际项目,现在写出来供大家以后参考使用. 实现自动 ...

随机推荐

  1. 注入Shellcode并运行攻击

    注入Shellcode并运行攻击 一.实验步骤 1.安装execstack并修改设置 安装execstack apt-get install execstack 设置堆栈可执行 execstack - ...

  2. 重装win10+ubuntu 双系统 UEFI启动模式

    有较强的时效性!!先看一眼日期是否太古老! 任务 卸载双系统中的Ubuntu14,安装Ubuntu16 环境 操作系统: Win10 + Ubuntu14双系统 硬盘: 固态硬盘 + 机械硬盘,电脑的 ...

  3. JS中encodeURI()、decodeURI()、encodeURIComponent()和decodeURIComponent()编码与解码

    编码解码问题. 解决这个问题大家一般都使用encodeURI或者encodeURIComponent方法,在这里做一下总结: 首先看看各个方法不同浏览器的支持程度 函数 描述 FF N IE deco ...

  4. UE4物理动画使用

    Rigid Body Body的创建. 对重要骨骼创建Body,保证Body控制的是表现和变化比较大的骨骼. 需要对Root创建Body并绑定,设置为Kinematic且不启用物理.原因是UPrimi ...

  5. 【python-appium】Appium的一些坑问题错误解决 与 技巧集锦

    问题 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was ...

  6. 我的C#跨平台之旅(五):使用IoC之依赖注入实现

    引入NuGet包:Unity 实现接口:IDependencyResolver 在启动类中注入依赖的类: 注意:左框中的内容为接口或抽象类,右框中为实际要注入的类. 修改控制类,使用构造方法注入类: ...

  7. prototype 和 __proto__

    /* * 1.构造函数里有属性及方法----->其构造的实例对象直接通过new构造时获得这些属性和方法 * 2.构造函数里的原型prototype----->这个原型对象:包括1).原型对 ...

  8. 了解AOP

    Spring AOP的实现是基于JAVA的代理机制, 从JDK1.3开始就支持代理功能, 但是性能成为一个很大问题, 为了解决JDK代理性能问题, 出现了CGLIB代理机制.它可以生成字节码, 所以它 ...

  9. Centos6.5---samba文件共享服务配置(二)

    Linux-----samba服务配置(二) 需求: 某公司销售部门提出一个文件共享需求,要求部门共享目录有三个,第一个共享目录所有销售部门人员都具有可读可写权限:第二个共享目录所有销售人员只读权限, ...

  10. Openvswitch手册(1): 架构,SSL, Manager, Bridge

    Openvswitch是一个virutal swtich, 支持Open Flow协议,当然也有一些硬件Switch也支持Open Flow协议,他们都可以被统一的Controller管理,从而实现物 ...