squid代理介绍
一、Squid代理服务器
Squid主要提供缓存加速、应用层过滤控制的功能。
1、代理的工作机制
代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。
将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。
2、代理的类型
① 传统代理:适用于Internet,需在客户机指定代理服务器的地址和端口。
② 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器
处理。
③ 反向代理:如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存(静态)在本地,供下一个请求者使用。
(是否确认缓存在本地还得通过配置文件来定义)
squid代理的安装
#安装squid
[root@www ~]# yum -y install gcc gcc-c++ make
[root@www ~]# tar xvf squid-3.5.27.tar.gz -C /opt
[root@www ~]# cd /opt/squid-3.5.27/
[root@www squid-3.5.27]# ./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \ #指定配置文件位置
--enable-arp-acl \ #开启acl摄制,可以通过设置acl防止ip欺诈
--enable-linux-netfilter \ #开启内核过滤
--enable-linux-tproxy \ #支持透明模式
--enable-async-io=100 \ #异步i/o,提升存储性能
--enable-err-language="Simplify_Chinese" \ #错误信息以中文显示
--enable-underscore \ #允许url有下划线
--enable-poll \ #使用poll模式,提升性能
--enable-gunregex #可以使用正则表达式
[root@www squid-3.5.27]# make && make install
[root@www squid-3.5.27]# useradd -M -s /sbin/nologin squid #创建squid用户
[root@www squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/ #将/usr/local/squid/var/目录的属主属组更改为squid
[root@www squid-3.5.27]# vim /etc/squid.conf
#在56行deny all前插入一行,acl规则匹配到一条后就结束匹配
http_access allow all
#在61行添加
cache_effective_user squid #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid #添加,指定账号基本组
配置squid服务脚本
[root@localhost ~]# vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | grep squid
else
echo "Squid is not running"
fi
;;
restart)
$0 stop &>/dev/null
echo "正在关闭Squid..."
$0 start &>/dev/null
echo "正在启动Squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:{start | stop | restart | reload | check | status}"
esac
[root@www squid-3.5.27]# chmod +x /etc/init.d/squid #给服务脚本可执行权限
[root@www squid-3.5.27]# chkconfig --add squid #让service识别squid
[root@www squid-3.5.27]# chkconfig squid on
[root@www squid-3.5.27]# service squid start #开启squid
squid代理模式配置
传统模式
传统模式需要在浏览器上手动指定代理服务器,通过这个代理服务器访问后端服务器
配置环境:
squid代理服务器 ens33:192.168.60.215
web服务器1 ens33:192.168.60.11
客户机 ens33:192.168.60.20
squid服务器的设置
[root@www squid-3.5.27]# iptables -F #清空防火墙规则
#插入一条规则,对通过tcp的3218端口进来的ip放通
[root@www squid-3.5.27]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
web服务器的设置
yum -y install httpd
systemctl start httpd
vim /var/www/html/index.html
this is first! #在主页文件中写入内容
在谷歌浏览器中点击这个,然后找到设置
选择高级——》系统——》打开计算机的代理
手动配置代理服务器
然后访问web服务器,并在web服务器上查看访问日志,观察访问web服务器的是什么ip地址
tail -f /var/log/httpd/access_log查看web服务器的访问日志,发现是代理服务器的访问ip
如果尝试访问代理服务器则会出现下面的画面
透明代理模式
透明代理不需要在系统中指定代理服务器,当客户机访问后端服务器时,会经过代理服务器,然后代理服务器去向后端服务器进行请求,获取信息后返回给客户机,整个过程中用户对代理服务器无感知。
配置环境:
squid代理服务器 ens33:192.168.60.215 ens36:192.168.214.215
web服务器 ens33:192.168.60.11
客户机 192.168.214.214
[root@www ~]# vim /etc/squid.conf
对57行进行修改,将其注释掉
#http_access deny all
对60行进行修改,添加以透明代理的方式提供内网服务的ip
http_port 192.168.214.215:3128 transparent
开启路由转发
[root@www ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@www ~]# sysctl -p #刷新一下配置
[root@www ~]# iptables -F
[root@www ~]# iptables -t nat -F
[root@www ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.214.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #当192.168.214.0网段通过ens36网口访问时,将80端口修改为3128端口
通过客户机访问192.168.60.11
再观察访问日志
反向代理模式
反向代理同样不需要指定代理服务器,当客户机访问一个域名时,反向代理会将请求以轮询的形式转发给后端服务器。
[root@www ~]# iptables -F
[root@www ~]# iptables -t nat -F
[root@www ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #请求进入squid服务器时,修改端口为3128
[root@www ~]# vim /etc/squid.conf
#修改60行,并添加下面的内容
http_port 192.168.60.215:80 accel vhost vport #指定地址池,访问时使用虚拟ip,虚拟端口
cache_peer 192.168.60.11 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 #以轮询的方式反向代理给后端服务器 max_conn 最大连接数 weight 权重
cache_peer 192.168.60.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.game.com #设置web1,web2服务器的域名
[root@www ~]# systemctl restart squid
客户机上进入/etc/hosts添加域名映射
[root@master ~]# vim /etc/hosts
192.168.60.215 www.game.com
客户机访问www.game.com网页,可以发现以轮询的方式访问