第十六章 正向代理

  • 内容
  • 评论
  • 相关

标准正向代理

我们简单设置下我们的squid服务器,在最后一行加入下服务器的用户名

[root@rhel7 ~]# vim /etc/squid/squid.conf

Squid服务程序软件包在正确安装并启动后,默认就已经可以为用户提供标准正向代理模式服务了,而不再需要单独修改配置文件或者进行其他操作。

[root@rhel7 ~]# systemctl restart squid

[root@rhel7 ~]# systemctl enable squid

打开另一台客户端的机器,我客户端的机器也是centos7的没办法穷,拿笔记本做实验一共就8G内存,开windows当虚拟机太奢侈了,反正一样的,firefox打开设置下代理。

好了这台不能上网的机器也能上网了。

如此公开而没有密码验证的代理服务终归让人觉得不放心,万一有人也来”蹭网”该怎么办呢?Squid服务程序默认使用3128、3401与4827等端口号,因此可以把默认使用的端口号修改为其他值,以便起到一定的保护作用。现在大家应该都知道,在Linux系统配置服务程序其实就是修改该服务的配置文件,因此直接在/etc目录下的Squid服务程序同名目录中找到配置文件,把http_port参数后面原有的3128修改为10000,即把Squid服务程序的代理服务端口修改成了新值。最后一定不要忘记重启服务程序。

[root@rhel7 ~]# vim /etc/squid/squid.conf

[root@rhel7 ~]# systemctl restart squid

[root@rhel7 ~]# systemctl enable squid

当然这样还不行,因为有个恶心的selinux,默认selinux的端口是不是10000,所以要包括进去。

[root@rhel7 ~]# semanage port -l | grep squid_port_t

[root@rhel7 ~]# semanage port -a -t squid_port_t -p tcp 10000

ACL访问控制

我们企业里面需要控制员工的上网行为,比如不许看黄色网站,不能看淘宝,所以需要acl访问列表。

Squid服务程序的ACL是由多个策略规则组成的,它可以根据指定的策略规则来允许或限制访问请求,而且策略规则的匹配顺序与防火墙策略规则一样都是由上至下;在一旦形成匹配之后,则立即执行相应操作并结束匹配过程。为了避免ACL将所有流量全部禁止或全部放行,起不到预期的访问控制效果,运维人员通常会在ACL的最下面写上deny all或者allow all语句,以避免安全隐患。

下面来做4个实验。

实验1只允许IP地址为192.168.15.130的客户端使用服务器上的Squid服务程序提供的代理服务,禁止其余所有的主机代理请求。

下面的配置文件依然是Squid服务程序的配置文件,但是需要留心配置参数的填写位置。如果写的太靠前,则有些Squid服务程序自身的语句都没有加载完,也会导致策略无效。当然也不用太靠后,大约在26~32行的位置就可以,而且采用分行填写的方式也便于日后的修改。

acl client src 192.168.15.130

http_access allow client

http_access deny all

[root@rhel7 ~]# systemctl restart squid

好了我们用其他ip,马上打不开网页了

实验2:禁止所有客户端访问网址中包含linux关键词的网站。

Squid服务程序的这种ACL功能模式是比较粗犷暴力的,客户端访问的任何网址中只要包含了某个关键词就会被立即禁止访问,但是这并不影响访问其他网站。

acl deny_keyword url_regex -i linux

http_access deny deny_keyword

[root@rhel7 ~]# systemctl restart squid

我们在访问个带linux的域名不能访问,但是访问个不带linux的域名没问题。

实验3:禁止所有客户端访问某个特定的网站。

在实验2中,由于我们禁止所有客户端访问网址中包含linux关键词的网站,这将造成一大批网站被误封,从而影响同事们的正常工作。其实通过禁止客户端访问某个特定的网址,也就避免了误封的行为。

[root@rhel7 ~]# vim /etc/squid/squid.conf

acl deny_url url_regex http://www.linuxcool.com

http_access deny deny_url

[root@rhel7 ~]# systemctl restart squid

实验4:禁止员工在企业网内部下载带有某些后缀的文件。

在企业网络中,总会有一小部分人利用企业网络的高速带宽私自下载资源(比如游戏安装文件、电影文件等),从而对其他同事的工作效率造成影响。通过禁止所有用户访问.rar或.avi等后缀文件的请求,可以防止他们继续下载资源,让他们知难而退。

如果这些员工是使用迅雷等P2P下载软件来下载资源的话,就只能使用专业级的应用防火墙来禁止了。

[root@rhel7 ~]# vim /etc/squid/squid.conf

acl badfile urlpath_regex -i \.mp3$ \.rar$

http_access deny badfile

[root@rhel7 ~]# systemctl restart squid

透明正向代理

“透明”二字指的是让用户在没有感知的情况下使用代理服务,这样的好处是一方面不需要用户手动配置代理服务器的信息,进而降低了代理服务的使用门槛;另一方面也可以更隐秘地监督员工的上网行为。

在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。如果大家此时并没有配置DHCP服务器,就先按照下面设置下,注意网关。

为了避免实验之间互相影响,更好地体验透明代理技术的效果,我们需要把客户端浏览器的代理信息删除,然后再刷新页面,就会看到访问任何网站都失败了

要做透明转发就要用snat技术,我们讲防火墙的时候用过的。

我们用iptables命令实现dns服务53端口转发,并允许squid服务器转发IPv4数据包。sysctl -p命令的作用是让转发参数立即生效

[root@rhel7 ~]# iptables -F

下面要转发的网卡是转发到那块可以上网的网卡上

[root@rhel7 ~]# iptables -t nat -A POSTROUTING -p udp –dport 53 -o eno16777736 -j MASQUERADE

[root@rhel7 ~]# echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf

[root@rhel7 ~]# sysctl -p

net.ipv4.ip_forward = 1

现在回到客户端主机,再次ping某个外网地址。此时可以发现,虽然不能连通网站,但是此时已经能够获取到外网DNS服务的域名解析数据。这个步骤非常重要,为接下来的SNAT技术打下了扎实的基础。

与配置DNS和SNAT技术转发相比,Squid服务程序透明代理模式的配置过程就十分简单了,只需要在主配置文件中服务器端口号后面追加上transparent单词(意思为”透明的”),然后把第62行的井号(#)注释符删除,设置缓存的保存路径就可以了。保存主配置文件并退出后再使用squid -k parse命令检查主配置文件是否有错误,以及使用squid -z命令对Squid服务程序的透明代理技术进行初始化。

http_port 3128 transparent

[root@rhel7 ~]# squid -k parse

[root@rhel7 ~]# squid -z

[root@rhel7 ~]# systemctl restart squid

在配置妥当并重启Squid服务程序且系统没有提示报错信息后,接下来就可以完成SNAT数据转发功能了。它的原理其实很简单,就是使用iptables防火墙管理命令把所有客户端主机对网站80端口的请求转发至Squid服务器本地的3128端口上。SNAT数据转发功能的具体配置参数如下。

[root@rhel7 ~]# iptables -t nat -A PREROUTING -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128

[root@rhel7 ~]# iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o eno16777736 -j SNAT –to 192.168.38.10

[root@rhel7 ~]# service iptables save

这时客户端主机再刷新一下浏览器,就又能访问网络了