squid代理服务器
squid是一种用来缓存Internet数据的软件。接受来自客户机需要下载的目标的请求并适当的处理这些请求。也就是说,如果一个客户端想要打开默认网站,它请求squid为它取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
squid代理的作用
- 通过缓存方式为用户提供Web加速访问
- 对用户的Web访问请求进行过滤控制
squid的几种代理模式
1. 正向代理模式
1)标准正向代理模式
2)透明正向代理模式主要作用:
实现代理上网、隐藏用的真实访问信息以及对控制用户访问网站行为的访问控制列表(ACL)进行限制。
2. 反向代理模式
主要作用:
加快用户访问网站的速度,降低网站资源服务器的负载压力。
标准正向代理模式与透明正向代理模式的区别:
用户是否需要配置代理服务器的信息。若使用透明代理模式,则用户感知不到代理服务器的存在。
正向代理与反向代理的区别:
1. 概念
正向代理:对于原始服务器而言,就是客户端的代言人
反向代理:对于客户端而言,就像是原始服务器
2. 用途
1.正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。
2.反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
3. 安全性
1.正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
2.反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
ACL访问控制的步骤:
1.使用acl配置项定义需要控制的条件
2.通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制
ACL用法概述:
定义格式:acl 列表名称 列表类型 列表内容
常用的ACL列表类型:
src 源地址
dst 目标地址
port 目标端口
dstdomain 目标域
tmie 访问时间
maxconn 最大并发连接
url_regex 目标url地址
urlpath_regex 整个目标url地址
规则匹配原理:
没有设置任何规则时,squid服务将拒绝客户端的请求,有规则但找不到相匹配的项时,squid将采用与最后一条规则相反的权限,即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求,但是我们要尽量避免找不到规则的情况出现。
Squid主要组成部分:
- 服务名:squid
- 主程序:/usr/sbin/squid
- 配置目录:/etc/squid
- 主配置文件:/etc/squid/squid.conf
- 监听tcp端口号:3128
- 默认访问日志文件:/var/log/squid/access.log
系统环境
主机 | 操作系统 | IP地址 | 软件包 |
---|---|---|---|
squid代理服务器 | centos 7.3 | 192.168.96.10 | squid3.5.20 |
win7 客户端 | windows 7 | 192.168.96.11 | IE浏览器 |
开始部署
一、标准正向代理模式
1.安装squid软件包
yum install squid -y
默认安装无需配置即为标准正向代理模式,但是需对客户端浏览器代理服务器进行设置(IP:3128)
在windows7系统中开启浏览器步骤:打开IE浏览器---》工具---》Internet选项--》连接---》局域网设置--填写代理服务器IP与端口信息
2.开启squid服务
systemctl enable squid.service
systemctl start squid.service
3.查看启动进程信息
netstat -tunlp | grep squid
以下列举几种实例应用场景:
实例1:只允许IP为192.168.96.11的客户端使用代理上网,禁止其他客户端的代理请求
1.编辑配置文件
vim /etc/squid/squid.conf
#2.添加以下acl规则
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 clent src 192.168.96.11 //新增规则
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
2.重启squid服务
systemctl restart squid.service
客户端访问测试:
修改客户端IP地址为192.168.96.12,应该被拒绝访问
实例2:禁止所有客户端访问网址中包含“linux”关键字的网站
1.编辑配置文件
vim /etc/squid/squid.conf
//2.添加以下acl规则
acl deny_keyword url_regex -i linux
......
http_access deny deng_keyword
2.重启squid服务
systemctl restart squid.service
客户端访问测试:
实例3:禁止所有客户端访问百度域名
1.编辑配置文件
vim /etc/squid/squid.conf
//2.添加以下acl规则
acl deny_url dstdomain www.baidu.com
......
http_access deny deny_url
http_access allow all
2.重启squid服务
systemctl restart squid.service
客户端访问测试:
实例4:禁止用户下载带有某些后缀的文件
1.编辑配置文件
vim /etc/squid/squid.conf
//2.添加以下acl规则
> acl badfile urlpath_regex -i \.rar$ \.avi$
......
http_access deny badfile
http_access allow all
2.重启squid服务
systemctl restart squid.service
特别提醒:这里只是简单的禁止下载规则,迅雷等还需要专业的用具进行控制
实例4:只允许在工作时间(9:00-17:00)上网
1.编辑配置文件
vim /etc/squid/squid.conf
//2.添加以下acl规则
> acl worktime time MYWHF 12:00-17:00
......
http_access allow worktime
2.重启squid服务
systemctl restart squid.service
http_access deny all
客户端访问测试:
二、用户认证功能
1.编译squid配置文件
vim /etc/squid/squid.conf
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
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 REQUIREDhttp_access deny !auth_user
http_access allow auth_user
http_access deny all
**注释:**
第一行:选择的认证方式为basic,认证程序路径和密码文件路径。
第二行:认证程序的进程数
第三行:验证域的提醒字符串
第四行:认证有效时间
第五,六行:设置允许认证的用户访问
2.使用apache的工具htpasswd生成密码文件
yum -y install httpd httpd-devel expect
生成密码文件
htpasswd -c /etc/squid/passwd zhangsan
New password: //输入密码
Re-type new password: //再次确认密码
Adding password for user zhangsan
3.创建成功后会生成/etc/squid/passwd密码文件
cat /etc/squid/passwd
//第一列是用户名,第二列是密码
zhangsan:$apr1$L7N/jRsc$RIj4ocdXk52/pJYwdUsUu/
4.配置文件参数检查
squid -k parse
5.重启squid服务
systemctl rsstart squid.service
客户端访问测试:
三、设置内存及硬盘缓冲区大小
1.编译squid配置文件
vim /etc/squid/squid.conf
2.设置硬盘缓冲区大小
cache_mem 64M
cache_dir ufs /var/spool/squid 2000 16 256
3.重启squid服务
systemctl restart squid.service
4.初始化缓存
squid -z
四、透明正向代理模式
正常企业应用时可以配合DHCP服务器进行使用,自动分配地址(网关指向squid服务器),这样客户机打开浏览器便会自动使用代理服务了。
1.通过SNAT技术完成数据的转发,让客户机将数据交给Squid代理服务器,再由其转发到外网中
//清空防火墙规则
iptables -F
iptables -t nat -F
//开启dns服务允许通过外网口
iptables -t nat -A POSTROUTING -p udp --dport 53 -o ens32 -j MASQUERADE
//开启路由转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
//立即生效
sysctl -p
2.编辑squid配置文件
vim /etc/squid/squid.conf
http_port 3128 transparent
cache_dir ufs /var/spool/squid 100 16 256
3.检查配置文件
squid -k parse
4.初始化
squid -z
5.重启squid服务
systemctl restart squid.service
6.添加防火墙规则
//将内网用户对80端口的访问都转发到本机3128端口上
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
//
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -0 ens32 -j SNAT --to 192.168.96.170
//
service iptables save
五、反向代理服务器
1.编辑squid配置
vim /etc/squid/squid.conf
2.添加以下规则
http_port IP:80 vhost
cache_peer 网站源服务器IP parent 80 0 originserver
3.重启squid服务
systemctl restart squid
六、定制个性化错误页面
为了更友好和本地化显示公司内部规定信息
1.错误页面默认在/usr/share/squid/errors/zh-cn/目录下
2.修改logo为公司logo ,/etc/squid/errorpage.css
vim /etc/squid/errorpage.css
/* Page displayed title area */
#titles {
margin-left: 15px;
padding: 10px;
padding-left: 100px;
//ur('') 指向地址,替换为公司的logo路径地址即可
background: url('/squid-internal-static/icons/SN.png') no-repeat left;
}
......
3.修改系统管理员邮箱
vim /etc/squid/squid.conf
//主机名
visible_hostname squid.njxx.com
//管理员邮箱信息
cache_mgr [email protected]
4.重启squid服务
systemctl restart squid.service