举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > 16.3.3 透明正向代理

16.3.3 透明正向代理

2023-05-06 09:18 Linux就该这么学

 16.3.3 透明正向代理

正向代理服务一般是针对企业内部的所有员工设置的,鉴于每位员工所掌握的计算机知识不尽相同,如果您所在的公司不是IT行业的公司,想教会大家如何使用代理服务也不是一件容易的事情。再者,无论是什么行业的公司,公司领导都希望能采取某些措施限制员工在公司内的上网行为,这时就需要用到透明的正向代理模式了。

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

在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。如果大家此时并没有配置DHCP服务器,可以像如图16-12所示来手动配置客户端主机的网卡参数。

图16-12 配置Windows客户端的网络信息

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

图16-13 停止使用代理服务后无法成功访问网站

有些时候会因为Windows系统的缓存原因导致依然能看到网页内容,这时可以换个网站尝试一下访问效果。

既然要让用户在无需过多配置系统的情况下就能使用代理服务,作为运维人员就必须提前将网络配置信息与数据转发功能配置好。前面已经配置好的网络参数,接下来要使用8.3.2节介绍的SNAT技术完成数据的转发,让客户端主机将数据交给Squid代理服务器,再由后者转发到外网中。简单来说,就是让Squid服务器作为一个中间人,实现内网客户端主机与外部网络之间的数据传输。

由于当前还没有部署SNAT功能,因此当前内网中的客户端主机是不能访问外网的:

    C:Userslinuxprobe>ping www.linuxprobe.com
    Ping 请求找不到主机 www.linuxprobe.com。请检查该名称,然后重试。

第8章已经介绍了iptables与firewalld防火墙理论知识以及策略规则的配置方法,大家可以任选其中一款完成接下来的实验。刘遄老师觉得firewalld防火墙实在太简单了,因此决定使用纯命令行的iptables防火墙管理工具来演示部署方法。

要想让内网中的客户端主机能够访问外网,客户端主机首先要能获取到DNS地址解析服务的数据,这样才能在互联网中找到对应网站的IP地址。下面通过iptables命令实现DNS地址解析服务53端口的数据转发功能,并且允许Squid服务器转发IPv4数据包。sysctl -p命令的作用是让转发参数立即生效:

    [root@linuxprobe ~]# iptables -F
    [root@linuxprobe ~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE
    [root@linuxprobe ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    [root@linuxprobe ~]# sysctl -p 
    net.ipv4.ip_forward = 1

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

    C:Userslinuxprobe>ping www.linuxprobe.com
    正在 Ping www.linuxprobe.com [116.31.127.233] 具有 32 字节的数据:
    请求超时。
    请求超时。
    请求超时。
    请求超时。
    116.31.127.233 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

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

    [root@linuxprobe ~]# vim /etc/squid/squid.conf
    ………………省略部分输出信息………………
    58 # Squid normally listens to port 3128
    59 http_port 3128 transparent
    60
    61 # Uncomment and adjust the following to add a disk cache directory.
    62 cache_dir ufs /var/spool/squid 100 16 256
    63 
    ………………省略部分输出信息………………
    [root@linuxprobe ~]# squid -k parse
    2017/04/13 06:40:44| Startup: Initializing Authentication Schemes ...
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme "basic"
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme "digest"
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme "negotiate"
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme "ntlm"
    2017/04/13 06:40:44| Startup: Initialized Authentication.
    ………………省略部分输出信息………………
    [root@linuxprobe ~]# squid -z
    2017/04/13 06:41:26 kid1| Creating missing swap directories
    2017/04/13 06:41:26 kid1| /var/spool/squid exists
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/00
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/01
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/02
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/03
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/04
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/05
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/06
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/07
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/08
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/09
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0A
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0B
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0C
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0D
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0E
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0F
    [root@linuxprobe ~]# systemctl restart squid

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

    [root@linuxprobe ~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    [root@linuxprobe ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno33554968 -j SNAT --to 您的桥接网卡IP地址
    [root@linuxprobe ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

这时客户端主机再刷新一下浏览器,就又能访问网络了,如图16-14所示。

图16-14 客户端主机借助于透明代理技术成功访问网络

现在肯定有读者在想,如果开启了SNAT功能,数据不就直接被转发到外网了么?内网中的客户端主机是否还依然使用Squid服务程序提供的代理服务呢?其实,只要仔细看一下iptables防火墙命令就会发现,刘遄老师刚才并不是单纯地开启了SNAT功能,而是通过把客户端主机访问外网80端口的请求转发到Squid服务器的3128端口号上,从而还是强制客户端主机必须通过Squid服务程序来上网。为了验证这个说法,我们编辑Squid服务程序的配置文件,单独禁止本书的配套站点(https://www.linuxprobe.com/),然后再次刷新客户端主机的浏览器,发现网页又被禁止显示了,如图16-15所示。

图16-15 客户端主机再次无法访问网络

阅读全文
以上是编程学为你收集整理的 16.3.3 透明正向代理全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部