squid代理服务器概述:
Squid是Linux系统中最常用的一款开元代理服务软件(官方网站:http://www.squid-cache.org) ,可以很好的实现HTTP、FTP、DNS查询,以及SSL等应用的缓存原理,功能十分强大。
squid代理的作用:
1.作为应用层的代理服务软件,通过缓存方式为用户提供Web加速访问。 2. 对用户的Web访问请求具备进行过滤控制的功能。
squid代理服务器的缓存机制图解:
squid的两种代理模式:
** 一、正向代理模式有两种类型:** 1.传统正向代理 作用:多见于Internet环境,实现代理上网、可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。 2.透明代理 作用:多见于局域网环境,如在Linux网关中启用透明代理后,对控制用户访问网站行为的访问控制列表(ACL)进行限制。局域网主机无需进行额外的设置就可以享受更好的上网速度。 二、反向代理模式: 作用:加快用户访问网站的速度,降低网站资源服务器的负载压力 ** 三、传统正向代理模式与透明正向代理模式的区别:** 传统正向代理模式用户需要配置代理服务器的信息。若使用透明代理模式,则用户感知不到代理服务器的存在。 四、正向代理和反向代理的概念理解: 正向代理:代理服务器 代理客户端访问后端web服务器。 **应用场景:**为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。 安全性:正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。 **反向代理:**代理服务器 代表后端web服务器响应客户端的访问请求。 **应用场景:**反向代理还可以为后端的多台服务器提供负载平衡,为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。 **安全性:**反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
ACL访问控制:
Squid提供了强大的代理控制机制,通过合理设置ACL并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。 在配置文件squid.conf中,ACL访问控制通过两个步骤来实现: 1.使用acl配置项定义需要控制的条件 2.通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制**** ** ACL访问控制列表定义格式:acl 列表名称 列表类型 列表内容** ** 常用的ACL访问控制列表类型:**
** 注:没有设置任何规则时,squid服务将拒绝客户端的请求,有规则但找不到相匹配的项时,squid将采用与最后一条规则相反的权限,即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求,我们要尽量避免找不到规则的情况出现。**
Squid日志分析:
**概述:**Sarg的全名是Squid Analysis Report Generator,是一款Squid日志分析工具,采用HTML格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数和访问量等。
部署 Squid以上所讲的代理服务实验:
实验环境准备:
| 主机 | 操作系统|IP地址 |软件版本 | -------- | -------- | -------- | | Win7客户端 | Windows7 | 192.168.138.131 |系统自带浏览器| |squid代理服务器 | centos 7.5 |192.168.138.132 |squid3.5.20| |web服务器|centos 7.5|192.168.138.128|httpd-2.4.6|
> Squid主要组成部分:
主程序:/usr/sbin/squid 配置目录:/etc/squid 主配置文件:/etc/squid/squid.conf 监听tcp端口号:3128 默认访问日志文件:/var/log/squid/access.log
实验过程:
yum install -y squid #yum在线安装squid
systemctl enable squid.service systemctl start squid.service #开启squid服务 netstat -tunlp | grep squid #查看监听状态
注:yum安装完成后无需配置即为标准正向代理模式。
在客户端Windows7系统上对IE浏览器进行代理服务器设置:
![]()
接下来在另外一台centos 7.5 系统上搭建Apache服务,并在win7客户端测试访问,确保实验顺利进行: yum install -y httpd #直接用yum安装 :
在客户端进行访问测试(需先关闭之前设置的代理服务器配置):
> 在客户端浏览器上恢复代理服务器的设置,接下来在传统正向代理模式下列举几种应用场景进行实验:
1.只允许IP为192.168.138.131的客户端使用代理上网,禁止其他主机的代理请求: vim /etc/squid/squid.conf #编辑配置文件 1 # 2 # Recommended minimum configuration: 3 # 4 5 # Example rule allowing access from your local networks. 6 # Adapt to list your (internal) IP networks from where browsing 7 # should be allowed 8 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network 9 acl localnet src 172.16.0.0/12 # RFC1918 possible internal network 10 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network 11 acl localnet src fc00::/7 # RFC 4193 local private network range 12 acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines 13 14 acl SSL_ports port 443 15 acl Safe_ports port 80 # http 16 acl Safe_ports port 21 # ftp 17 acl Safe_ports port 443 # https 18 acl Safe_ports port 70 # gopher 19 acl Safe_ports port 210 # wais 20 acl Safe_ports port 1025-65535 # unregistered ports 21 acl Safe_ports port 280 # http-mgmt 22 acl Safe_ports port 488 # gss-http 23 acl Safe_ports port 591 # filemaker 24 acl Safe_ports port 777 # multiling http 25 acl CONNECT method CONNECT 26 acl client src 192.168.138.131 #新增规则 27 # 28 # Recommended minimum Access Permission configuration: 29 # 30 # Deny requests to certain unsafe ports 31 http_access all client # 允许client的规则 32 http_access deny all #拒绝其他所有规则 33 http_access deny !Safe_ports 34 35 # Deny CONNECT to other than secure SSL ports 36 http_access deny CONNECT !SSL_ports 37 38 # Only allow cachemgr access from localhost 39 http_access allow localhost manager 40 http_access deny manager 41 42 # We strongly recommend the following be uncommented to protect innocent 43 # web applications running on the proxy server who think the only 44 # one who can access services on "localhost" is a local user 45 #http_access deny to_localhost 46 47 # 48 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS 49 #
iptables -F #清空防火墙规则 setenforce 0 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
在ip为192.168.138.131的客户端验证:新开一台客户端进行验证:
验证已成功,仅限192.168.138.131客户机访问,其他客户端访问不了。
ACL访问控制还有如下可修改参数:
vim /etc/squid.conf acl localhost src 192.168.100.1/32 ---(src:针对源一个IP地址访问控制) acl MYLAN src 192.168.100.0/24 --(针对一个网段访问控制) acl destionhost dst 192.168.172.130.32--(针对目标地址进行控制) acl MC20 maxconn 20 ---(最大链接数量,也就是并发数) acl BURL url_regex -i ^rtsp:// ^emule:// (基于正则表达式,对访问路径比如:以 http:// 开头的) acl PURL urlpath_regex -i .mp3$ .mp4$ .rmv$ (以MP3 为结尾的路径控制) ** mkdir /etc/squid #启用对象列表管理
vim /etc/squid/dest.list
192.168.138.50
192.168.138.60
192.168.138.70 #目标web
对很多网络的ip进行打包管理
vim /etc/squid.conf acl destionhostdst "/etc/squid/dest.list"
http_access deny destionhost #拒绝列表(注意事项)
systemctl restart squid.service
> 2.用户认证功能:
** vim /etc/squid/squid.conf #编辑配置文件** auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd #选择的认证方式为basic,认证程序路径和密码文件路径。 auth_param basic children 5 #认证程序的进程数 auth_param basic realm this is squid server #验证域的提醒字符串 auth_param basic credentialsttl 2 hours #认证有效时间 auth_param basic casesensitive off
acl auth_user proxy_auth REQUIRED #设置允许认证的用户访问
http_access deny !auth_user http_access allow auth_user http_access deny all ** 每次修改完配置文件后记得重启服务。**
** 接下来yum -y install httpd httpd-devel expect 使用apache的工具htpasswd生成密码文件**:
生成密码文件:htpasswd -c /etc/squid/passwd yang: New password: #输入密码 Re-type new password: #再次确认密码 Adding password for user yang
创建成功后会生成/etc/squid/passwd密码文件: cat /etc/squid/passwd #查看
squid -k parse #检查一下文件参数
记得重启服务systemctl restart squid.service ;然后在客户端进行访问测试。(需要登录用户密码才能访问)
![]()
设置内存及硬盘缓冲区大小: cache_mem 64M cache_dir ufs /var/spool/squid 2000 16 256
systemctl restart squid.service #重启服务 squid -z #初始化缓存
透明正向代理模式:
将各个主机网卡改为仅主机模式,设置成100段落的ip地址:
主机 | ip地址 |
---|---|
squid代理服务器 | ens33:192.168.100.1 |
ens36:12.0.0.1 | |
web服务器 | 12.0.0.12 |
Windows客户端 | 192.168.100.12 |
通过SNAT技术完成数据的转发,让客户端将数据发给Squid代理服务器,再由其转发到外网 //在squid上开启路由转发 echo "1" > /proc/sys/net/ipv4/ip_forward
//清空防火墙策略 iptables -F iptables -t nat -F setenforce 0
//修改著配置文件 vim /etc/squid.conf
//修改监听地址,因为是内网需要访问外网,所以监听的是内网 transparent:意思就是透明模式 http_port 192.168.100.1:3128 transparent
//定义防火墙策略: iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
如果要再Linux客户机的命令行界面中使用代理服务器(比如:elinks 网页浏览器、wget 下载工具),必须通过环境变量来指定代理服务器的地址、端口等信息。 [root@localhost ~]# vim /etc/profile #添加如下内容到环境变量中 添加如下内容: HTTP_PROXY=http:192.168.100.50:3128 #为使用HTTP协议指定代理 HTTPS_PROXY=http:192.168.100.50:3128 #为使用HTTPS协议指定代理 FTP_PROXY=http:192.168.100.50:3128 #为使用FTP协议指定代理 NO_RPOXY=192.168.20.,192.168.30. #对两个局域网段不使用代理 export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY
[root@localhost ~]# source /etc/profile #重新加载