squid 代理服务器
保护后端服务器的安全,为后端web服务器提供代理请求
百度公司使用的是全squid的架构
代理服务器
大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
代理功能可以突破自身IP访问限制,访问国外站点。教育网、169网等网络用户可以通过代理访问国外网站。提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
Squid是一种用来缓冲Internet数据的软件。安装Squid服务实现代理缓存服务器功能
代理服务器分类:(正向,反向)
正向代理:
1.squid代理客户端,客户端向squid发送一个请求并指定web服务器IP地址,如果请求的web资源已经存在,则直接返回给客户端。如果没有,squid则向web服务器转交请求并将获得的内容返回给客户端,并记录在本地。
2.正向代理作为客户端的代理,将从互联网上获取的资源返回给一个或多个的客户端。
3.客户端正常访问web服务器,但是在web服务器上记录的请求头部IP信息,为正向代理的IP地址
正向代理分类:
传统代理:需要客户端手动设置代理服务器,对于客户端,代理服务器端是不透明的,可知的
透明代理:代理服务器对客户端透明,不需要终端用户进行特殊设置,相当于网关。对于linux操作 系统来说,透明代理使用 Iptables
正向传统代理:
环境:一台真实机、两台虚拟机
client: 192.168.90.1真实机
squid: 192.168.90.3 squid代理服务器
httpd: 192.168.90.4 提供页面
1.httpd简单部署
[root@localhost /]# yum -y install httpd
[root@localhost /]# echo 'squid -httpd 192.168.90.4' > /var/www/html/index.html
[root@localhost /]# systemctl restart httpd
[root@localhost /]# curl 192.168.90.4
squid -httpd 192.168.90.4
2.squid代理服务器
1.安装squid
####squid代理安装###
【编译安装Squid】
安装依赖环境
yum -y install gcc gcc-c++ make
上传软件包squid-3.5.27.tar到/opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xvf squid-3.5.27.tar.gz
[root@localhost opt]# cd /
[root@localhost squid-3.5.27]#
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
[root@localhost squid-3.5.27]# make && make install
####上述脚本解释###
./configure --prefix=/usr/local/squid ##安装目录
--sysconfdir=/etc/ ##单独将配置文件修改到/etc目录下
--enable-arp-acl ##可在ACL中设置通过MAC地址进行管理,防止arp欺骗
--enable-linux-netfilter ##使用内核过滤
--enable-linux-tproxy ##支持透明模式
--enable-async-io=100 ##异步I/O,提升储存性能,值可修改
--enable-err-language="Simplify_Chinese" ##错误信息的显示语言
--enable-underscore ##允许URL中有下划线
--enable-poll ##使用Poll()模式,提升性能
--enable-gnuregex ##使用GNU正则表达式
2.完善squid安装
[root@localhost squid-3.5.27]# make && make install
[root@localhost squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin ##创建链接文件,优化路径
[root@localhost squid-3.5.27]# useradd -M -s /sbin/nologin squid ###创建程序用户、组
[root@localhost squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/ ##改变目录属主
3.修改主配置文件
vim /etc/squid.conf
......
-----56行--插入------
http_access allow all #放在http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128 #用来指定代理服务监听的地址和端口(默认的端口号为3128)
-----61行--插入------
cache_effective_user squid #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid #添加,指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #指定缓存文件目录
squid启动文件
[root@localhost ~]# vi /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@localhost ~]#chmod +x /etc/init.d/squid
[root@localhost ~]#chkconfig --add squid
[root@localhost ~]#chkconfig squid on
[root@localhost squid-3.5.27]# service squid restart ##测试正常
正在关闭Squid...
正在启动Squid...
4.客户端验证
打开火狐浏览器 — 选项(设置) — 网络设置(设置)
透明代理
squid代理服务器充当客户端与web服务的网关,需要两块网卡
环境,全网互通:
client虚拟机,采用VM1网卡
squid虚拟机,采用VM1网卡连接真实机,VM3网卡连接web服务器
httpd虚拟机,才用VM3网卡连接squid服务器
1、squid配置
#######################透明代理############
1、Squid服务器配置
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
systemctl restart network
#60行修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 192.168.90.3:3128 transparent
systemctl restart squid
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -F
iptables -t nat -F
#添加防火墙规则(将来源为90网段:80/443端口的流量重定向到3128端口)
iptables -t nat -I PREROUTING -i ens33 -s 192.168.90.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.90.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
#若进行重启,则需要配置以下规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
3、客户端关闭代理,修改win10地址为90网段
#访问web1服务器