Squid服务程序会接收用户的请求,然后自动去下载指定数据(如网页)并存储在服务器内,当以后的用户再来请求相同数据时,则直接将刚刚储存在服务器本地的数据交给用户,节省网络带宽,减少了用户的等待时间。
环境:
squid:192.168.200.100(外网)
192.168.100.254(内网)
client 192.168.100.10 #无需网关和DNS
Squid代理服务配置:
- 安装squid软件包
yum install -y squid
2. 启用IP路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
3. 修改squid配置文件
vim /etc/squid/squid.conf
http_port 192.168.100.254:3128 #监听内网192.168.100.1:3128
cache_dir ufs /var/spool/squid 1024 16 256 #硬盘缓存1G,目录/var/spool/squid 一级子目录16个,二级子目录256个
cache_mem 128 MB #内存缓存大小128MB
cache_swap_low 90
cache_swap_high 95 #超过95%删除旧缓存,直到90%
maximum_object_size 5 MB #单个缓存文件大小限制
cache_access_log /var/log/squid/access.log #访问日志
cache_log /var/log/squid/cache.log #缓存日志
cache_store_log /var/log/squid/store.log #网页缓存日志
dns_nameservers 119.29.29.29 114.114.114.114 #DNS
cache_mgr admin@domain.com #管理员邮箱
visible_hostname 192.168.100.254 #代理服务器地址
cache_effective_user squid #squid进程所有者
cache_effective_group squid #squid进程所属组
4. 初始化squid服务,创建Squid使用硬盘缓冲区的目录结构
squid -z
5. 检测squid语法
squid -k parse
6. 启动squid服务
systemctl restart squid
systemctl enable squid
ss -ntlu | grep 3128
tcp LISTEN 0 128 192.168.1.1:3128 *:*
浏览器代理设置:
7. ACL访问控制应用
1、禁止IP地址为192.168.2.11的客户机上网。
vim /etc/squid/squid.conf
acl banhostnet src 192.168.2.11/32
http_banhostnet deny badclientip1
systemctl restart squid
2、禁止用户访问IP地址为60.174.243.162的网站。
acl bansiteip dst 60.174.243.162
http_access deny bansiteip
3、禁止用户访问域名为www.qq.com的网站。
acl bansite1 dstdomain -i www.qq.com
http_access deny bansite1
4、禁止用户访问域名包含有qq.com的网站。
acl banqqcom url_regex -i .qq.com
http_access deny banqqcom
5、禁止用户访问域名包含有qq关键字的网站。
acl bandomainqq url_regex -i qq
http_access deny bandomainqq
6、限制IP地址为192.168.100.10的客户机并发最大连接数为5。
acl clientip1 src 192.168.100.10
acl conn1 maxconn 5
http_access deny clientip1 conn1
7、限制192.168.2.0子网所有客户机仅在周一到周五的9:00-17:00上网。
acl intranet src 192.168.2.0/24
acl worktime1 time MTWHF 9:00-12:00 13:00-17:00
http_access deny intranet !worktime1
8、禁止客户机下载*.mp3,*.exe,*.rar和*.zip类型的文件。
acl badfile1 urlpath_regex -i \.mp3$ \.exe$ \.rar$ \.zip$
http_access deny badfile1
透明代理。
所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。可以用firewalld直接将对Web端口80的请求直接转发到Squid端口3128,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。
1、修改squid主配置文件。
vim /etc/squid/squid.conf
http_port 192.168.100.254:3128 transparent
systemctl restart squid.service
2、配置firewalld。
yum install -y firewalld
systemctl restart firewalld.service
systemctl enable firewalld.service
firewall-cmd --zone=internal --change-interface=ens35
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone=internal --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=192.168.100.254
firewall-cmd --zone=internal --add-port=3128/tcp
firewall-cmd --zone=public --list-all
firewall-cmd --zone=internal --list-all
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
3、代理客户端配置。
IP:192.168.100.10
网关:192.168.100.254
dns:114.114.114.114
删除internet选项中的局域网代理服务器选项