man.linuxde.net
1、squid是Linux系统中的代理缓存服务,通常用作WEB网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。
2、squid服务特点:配置简单、效率高、功能丰富
3、代理缓存服务有正向代理与反向代理之分。正向代理又粪污标准正向代理和透明正向代理
所谓正向代理指让用户通过squid服务获取到网站页面等资源,以及通过访问控制列表(ACL)限制用户访问网站的行为。标准正向代理与透明正向代理的区别是标准代理模式需要用户在浏览器等软件里手动指定代理服务器IP地址与端口号,透明代理模式则不需要。
反向代理模式是指多台节点主机反向缓存网站数据,从而加快用户访问速度。
16.2 配置Squid服务程序
实验准备。squid服务器内网IP 192.168.10.10 外网网卡桥接模式
客户端IP192.168.10.20
安装squid服务
[root@localhost ~]# yum install squid -y
[root@localhost ~]# systemctl start squid
[root@localhost ~]# systemctl enable squid
ln -s '/usr/lib/systemd/system/squid.service' '/etc/systemd/system/multi-user.target.wants/squid.service'
一:标准正向代理模式
默认为标准正向代理,只需在客户端浏览器指定代理服务器IP及端口号即可实现代理上网功能。
出现一点小问题:
有可能是服务器防火墙策略规则禁止了代理服务
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
再试下就成功了。
四:透明正向代理
透明正向代理与标准正向代理区别是用户不需要指定代理服务器IP与端口,几乎感觉不到代理服务的存在。
降低了用户使用代理服务的门槛,同事更加隐秘的监督与员工的网络连接
在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了
由于当前没有配置SNAT服务,所以客户端无法通外网
想要访问外网,首先要获取到DNS域名解析服务的数据。使用iptables命令实现DNS域名解析服务53号端口的数据转发功能,并允许squid服务转发Ipv4数据包,sysctl -p 使转发参数立即生效
[root@localhost ~]# iptables -t nat -A POSTROUTING -p udp --dport -o eno33554992 -j MASQUERADE
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward =
返回客户端,重新ping外网,发现虽然还是无妨Ping通,但已经能够获取到外网DNS服务的域名解析数据
与配置SNAT与DNS技术相比,squid服务程序的透明代理模式的配置就要显得简单多了,只需要在主配置文件的监听端口号IP后面加上 transparent(透明的)参数,并将62行硬盘缓冲区大小前的注释符号去掉,保存并退出。使用squid -k parse 命令检测主配置文件是否有错误,squid -z 命令对squid服务的透明代理模式进行初始化。
[root@linuxprobe ~]# vim /etc/squid/squid.conf
………………省略部分输出信息………………
# Squid normally listens to port
http_port transparent # Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid ………………省略部分输出信息………………
[root@linuxprobe ~]# squid -k parse
// ::| Startup: Initializing Authentication Schemes ...
// ::| Startup: Initialized Authentication Scheme 'basic'
// ::| Startup: Initialized Authentication Scheme 'digest'
// ::| Startup: Initialized Authentication Scheme 'negotiate'
// ::| Startup: Initialized Authentication Scheme 'ntlm'
// ::| Startup: Initialized Authentication.
………………省略部分输出信息………………
[root@linuxprobe ~]# squid -z
// :: kid1| Creating missing swap directories
// :: kid1| /var/spool/squid exists
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/
// :: kid1| Making directories in /var/spool/squid/0A
// :: kid1| Making directories in /var/spool/squid/0B
// :: kid1| Making directories in /var/spool/squid/0C
// :: kid1| Making directories in /var/spool/squid/0D
// :: kid1| Making directories in /var/spool/squid/0E
// :: kid1| Making directories in /var/spool/squid/0F
[root@linuxprobe ~]# systemctl restart squid
在配置妥当重启squid没有报错后,接下来就可以配置SNAT转发功能了,通过iptables将所有客户端主机对网站80端口的请求转发到squid服务器本地的3128端口上。
命令: iptable -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptable -t nat -A POSTROUTING -s 192.168.10.0/24 -o 桥接网卡名 -j SNAT --to 桥接的IP地址
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport -j REDIRECT --to-ports
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/ -o eno33554992 -j SNAT -to 192.168.1.140
Bad argument `192.168.1.140'
Try `iptables -h' or 'iptables --help' for more information.
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/ -o eno33554992 -j SNAT --to 192.168.1.140
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
客户端刷新浏览器,发现此时可以上网了
三:ACL访问控制
实验1:只允许IP地址为192.168.10.20的客户端使用服务器上的Squid服务程序提供的代理服务,禁止其余所有的主机代理请求。
[root@localhost ~]# vim /etc/squid/squid.conf
acl client src 192.168.10.30
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access allow client
http_access deny all
http_access deny !Safe_ports [root@localhost ~]# systemctl restart squid
实验2:禁止所有客户端访问网址中包含linux关键词的网站。
[root@localhost ~]# vim /etc/squid/squid.conf
acl deny_keyword url_regex -i linux
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny deny_keyword
http_access deny !Safe_ports [root@localhost ~]# systemctl restart squid
实验3:禁止所有客户端访问某个特定的网站。www.linuxcool.com
[root@localhost ~]# vim /etc/squid/squid.conf
acl deny_url url_regex http://www.linuxcool.com
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny deny_url
http_access deny !Safe_ports [root@localhost ~]# systemctl restart squid
实验4:禁止员工在企业网内部下载带有某些后缀的文件。(不可在安全超文本传输协议HTTPS中进行限制)
[root@localhost ~]# vim /etc/squid/squid.conf
acl badfile urlpath_regex -i \.rar$ \.mp3$
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny badfile
http_access deny !Safe_ports [root@localhost ~]# systemctl restart squid
实验3:反向代理
实验前为避免冲突,回滚快照,并将主机网卡设置为一块桥接网卡
反向代理是Squid服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。但是这种技术的弊端也很明显,如果有心怀不轨之徒将自己的域名和服务器反向代理到某个知名的网站上面,从理论上来讲,当用户访问到这个域名时,也会看到与那个知名网站一样的内容(有些诈骗网站就是这样骗取用户信任的)。因此,当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为。
http://58.247.138.211/
使用Squid服务程序来配置反向代理服务非常简单。首先找到一个网站源服务器的IP地址,然后编辑Squid服务程序的主配置文件,把端口号3128修改为网站源服务器的地址和端口号,此时正向解析服务会被暂停(它不能与反向代理服务同时使用)。然后按照下面的参数形式写入需要反向代理的网站源服务器的IP地址信息,保存退出后重启Squid服务程序。
58 # Squid normally listens to port 3128
59 http_port 您的桥接网卡IP地址:80 vhost
60 cache_peer 网站源服务器IP地址 parent 80 0 originserver
http_port 192.168.0.145: vhost
cache_peer 58.247.138.211 parent originserver
此时访问本地主机IP 。会看到反向代理的网页页面信息