squid代理服务器
squid代理服务器
squid简介
# 定义:
# 一款缓存服务的守护进程
# 主程序:/usr/sbin/squid
# 主配置文件: /etc/squid/squid.conf
# 默认监听端口: TCP 3128
# 默认访问日志:/var/log/squid/access.log
squid 原理
# 用户访问squid代理服务器,代理服务器查询自己的缓存,如果有则返回数据给用户;如果没有,则代理服务器向后端真实服务器请求,后端真实服务器返回数据后,将数据发送给用户并记录缓存中,当有下次访问数据时,提供给用户;此过程是两个tcp连接的过程。
squid工作类型
代理服务器基本类型:
传统代理:适用于Internet,需明确指定服务端,
针对内网用户提供缓存,简单需要用户在客户端进行配置
透明代理:适用于共享上网网关,不需指定服务端
通过防火墙规则,使用户无需配置客户端
反向代理:位于网站前端,代理web接受客户端的请求
支持RR算法
支持同类型服务器的相互数据转换
squid简介
软件包:squid-3.xxxx
系统服务:squid
主程序:/usr/sbin/squid
主配置文件:/etc/squid/squid.conf
默认监听端口:TCP 3128
默认访问日志:/var/log/squid/access.log
5
2 4 5 6 3
1s
hash tables #相当于目录
digest tables #相当于对目录的介绍
#两个目录便于寻找数据在哪个目录下,反馈给用户
常见参数:
http_port 3128 #指定端口
access_log /var/log/squid/access.log squid #访问日志
cache_mem 64 MB #当前进程使用的内存大小
cache_dir ufs /var/spool/squid 100 16 256
#当前的缓存目录 采用的文件系统 放在、、目录下 当前目录最大使用的存储空间
默认MB 一级目录的个数是16个,二级目录的个数是256个
visible_hostname proxy.benet.com #指定当前可用主机名
dns_testnames www.google.com www.163.com #探测自己网络连通性
maximum_object_size 4096 KB # 最大缓存对象的大小
reply_body_max_size 10 MB # 请求当前的最大大小
ACL( Access Control List ,访问控制列表):
根据源地址、目标URL、文件类型等定义列表
acl 列表名称 列表类型 列表内容 ...
针对已定义的acl列表进行限制
http_access allow或deny 列表名称 ...
[root@localhost ~]# vi /etc/squid/squid.conf
……
acl a1 src 0.0.0.0/0.0.0.0
http_access deny a1
[root@localhost ~]# service squid reload
支持列表类型
src 源地址
dst 目标地址
port 目标端口
dstdomain 目标域
time 访问时间
maxconn 最大并发连接
url_regex 目标URL地址
www.baidu.com
Urlpath_regex 整个目标URL路径
http://www.baidu.com/1.jpeg
squid实验的构建
传统代理方式
实验环境
三台虚拟机(自定义模式)
内网用户端:192.168.66.11
squid:内网:192.168.66.12
公网:10.10.10.12
公网端: 10.10.10.13
外网机器配置
yum -y install httpd
service httpd start
chkconfig httpd on
echo "www.hongfu.com" >> /var/www/html/index.html
#抓包命令
tcpdump -nA port 80
squid 网关机器
vim /etc/sysctl.conf #开启路由转发
net.ipv4.ip_forward = 1
sysctl -p
yum -y install squid
vim /etc/squid/squid.conf
http_port 3128
visible_hostname www.hongfu.com #加主机名
cache_dir ufs /var/spool/squid 100 16 256 #取消注释初始化缓存目录
service squid start
servuce squid reload
内网机器
echo "GATEWAY=192.168.190.112" >> /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
route -n
测试
#windows浏览器测试
浏览器——编辑——首选项——高级——链接——设置——手动代理——网关内网IP——3128
#11机器操作字符界面访问方式
vim /etc/profile
HTTP_PROXY=HTTP://192.168.66.12:3128
export HTTP_PROXY
source /etc/profile
echo $HTTP_PROXY #查看变量
yum -y install elinks
elinks 10.10.10.13
透明代理方式
实验环境
三台虚拟机(自定义模式)
内网:192.168.190.111
squid网关:内:192.168.190.112
外:10.10.10.12
外网:10.10.10.13
两台内网机器
# router add default gw 192.168.190.112
echo "GATEWAY=192.168.190.112" >> /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
route -n
网关服务器
yum -y install squid
vim /etc/squid/squid.conf
http_port 192.168.190.112:3128 transparent
visible_hostname www.hongfu.com
cache_dir ufs /var/spool/squid 100 16 256 #取消注释初始化缓存目录
service squid start
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
#添加防火墙规则
iptables -t nat -A PREROUTING -i eth0(内网网卡) -s 192.168.190.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -L #查看nat地址表
service iptables save
chkconfig iptables on
外网服务器
yum -y install httpd
service httpd start
echo "www" >> /var/www/html/index.html
curl localhost
测试或下载限速测试
#内网机测试
curl 10.10.10.13
#关闭httpd再次查看,有说明存在缓存
#透明模式解决了客户端需要配置的问题
#外网服务器配置
dd if=/dev/zero of=1.txt bs=1M count=15
wget 10.10.10.13/1.txt
#squid服务器配置
vim /etc/squid/squid.conf
reply_body_max_size 10 MB #限制10 MB一下
/etc/init.d/squid reload
#内网客户端下载测试
wget 10.10.10.13/1.txt
反向代理
实验环境
四台虚拟机:(轮训)
内网服务器:1:192.168.190.111
2:192.168.190.112
squid网关服务器:
192.168.190.113
10.10.10.13
公网客户端:10.10.10.14
两台内网服务器
#router add default gw 192.168.1.1
#两台内网服务器分别做一下操作
echo "GATEWAY=192.168.190.113" >> /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
route -n
yum -y install httpd
service httpd start
chkconfig httpd on
cd /var/www/html/
echo "www1.html-11" >> index1.htm
echo "www2.html-11" >> index2.html
curl localhost
#第二台httpd服务器
cd /var/www/html/
echo "www1.html-12" >> index1.html
echo "www2.html-12" >> index2.html
网关服务器
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
yum -y install squid
vim /etc/squid/squid.conf
http_access allow all
http_port 10.10.10.13:80 vhost
visible_hostname www.hongfu.com
cache_dir ufs /var/spool/squid 100 16 256 #取消注释初始化缓存目录
cache_peer 192.168.190.111 parent 80 0 originserver round-robin
cache_peer 192.168.190.112 parent 80 0 originserver round-robin
/etc/init.d/squid start
/etc/init.d/squid reload
公网客户端
#测试,是否访问到
curl 10.10.10.13/index1.html
curl 10.10.10.13/index2.html
#关闭httpd服务,测试缓存
curl 10.10.10.13/index1.html
curl 10.10.10.13/index2.html
ACL访问控制
环境准备
在3配置好的反向代理模式下,并修改一下内容
将14机器的ip改为30.30.30.14
vim /etc/squid/squid.conf
http_port 30.30.30.14:80 vhos
/etc/init.d/squid restart
#用浏览器测试结果,不能访问到访问被拒绝。
#想要30网段也能够正常访问,做下面操作
修改配置文件
vim /etc/squid/squid.conf
#根据源地址、目标URL、文件类型等定义列表
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src 30.0.0.0/8 #添加公网网段,使其能够访问
# acl 列表名称 列表类型 列表内容
#列表类型
src 源地址
dst 目标地址
port 目标端口
dstdomain 目标域
time 访问时间
maxconn 最大并发连接
url_regex 目标URL地址 www.baidu.com
Urlpath_regex 整个目标URL路径
http://www.baidu.com/1.jpeg
#针对已定义的acl列表进行限制
http_access allow manager localhost
http_access deny manager
http_access allow localnet
http_access allow localhost
# http_access allow或deny 列表名称 ...
/etc/init.d/squid reload
#添加并重载后即可访问。
ACL规则
#如果之定义acl范围不做http_access动作,那么默认放行
acl test src 30.30.30/24 # RFC1918 possible internal network
#(浏览器测试)
30.30.30.14、index.html
#如果之定义acl范围不做http_access动作,并且关闭了http_access deny all,那么
#当前acl范围会根据当前配置文件中的最后一行http_access做反向操作
http_access deny all #注释掉
#(浏览器测试)
30.30.30.14、index.html
注:本文为博主查阅多方资料整理而成,如有侵权请留言联系博主删除。
学习新东西,不要忘记复习旧知识,这样你才能更好!