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.10.1 真实机
squid: 192.168.10.55 squid代理服务器
httpd: 192.168.10.56 提供页面
1.httpd简单部署
[root@localhost /]# yum -y install httpd
[root@localhost /]# echo 'squid -httpd 192.168.10.56' > /var/www/html/index.html
[root@localhost /]# systemctl restart httpd
[root@localhost /]# curl 192.168.10.56
squid -httpd 192.168.10.56
2.squid代理服务器
1.安装squid
yum -y install gcc*
[root@localhost ~]# tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid \
--sysconfdir=/etc/ \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tsproxy \
--enable-async-io=100 \
--enable-err-language='Simplicy-Chinese' \
--enable-underscore \
--enable-poll \
--enable-gunregex \
[root@localhost squid-3.4.6]# make && make install
--prefix=/usr/local/squid 指定安装路径
--sysconfdir=/etc/ 指定配置文件路径
--enable-arp-acl 防止arp攻击
--enable-linux-netfilter 启动内核过滤功能
--enable-linux-tsproxy 启动透明代理功能
--enable-async-io=100 调整IO的线程参数
--enable-err-language='Simplicy-Chinese' 错误信息显示的语言中文
--enable-underscore 允许使用下划线
--enable-poll 使用poll模型
--enable-gunregex 使用gun的正则匹配
2.完善squid安装
[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid
[root@localhost squid-3.4.6]# echo 'PATH=$PATH:/usr/local/squid/bin:/usr/local/squid/sbin' >> /etc/profile
[root@localhost squid-3.4.6]# source /etc/profile
[root@localhost squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/
[root@localhost squid-3.4.6]# chmod -R 757 /usr/local/squid/var/
3.修改主配置文件
/etc/squid.conf 主配置文件
56 http_access allow all 允许所有主机把此squid作为代理服务器
57 #http_access deny all
60 http_port 3128 squid放行端口
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 118048/(squid-1)
squid启动文件
[root@localhost ~]# vim /etc/init.d/squid
#!/bin/bash
#chkconfig:2435 90 22
#主配置文件: /etc/squid.conf
#进程文件:/usr/local/squid/var/run/squid.pid
#日志文件:/usr/local/squid/var/logs/access.log
#缓存文件目录:/usr/local/squid/var/cache/squid
pid="/usr/local/squid/var/run/squid.pid"
conf="/etc/squid.conf"
squid="/usr/local/squid/sbin/squid"
case $i in
start)
netstat -anpt | grep squid &> /dev/null
if
[ $? -eq 0 ]
then
echo "squid is running"
else
echo -e "\033[32m正在启动squid\033[0m"
$squid
fi
;;
stop)
killall -9 squid &>/dev/null
rm -rf $pid &>/dev/null
;;
status)
[ -f $pid ] &> /dev/null
if
[ $? -eq 0 ]
then
netstat -anpt | grep squid
else
echo "squid is not running"
fi
;;
restart)
killall squid && $squid
;;
reload)
$squid -s squid
;;
# check)
# $squid -k parse
#;;
*)
echo -e "\033[32m请输入start/stop/status/restart\033[0m"
;;
esac
[root@localhost ~]# chmod +x /etc/init.d/squid
[root@localhost ~]# chkconfig --add squid
[root@localhost ~]# chkconfig squid on
4.客户端验证
打开火狐浏览器 — 选项(设置) — 页面最下方网络设置(设置)
浏览器访问 web服务器的IP地址
打开服务端日志:
[root@localhost /]# tail -f /var/log/httpd/access_log
透明代理
squid代理服务器充当客户端与web服务的网关,需要两块网卡
环境,全网互通:
client虚拟机,采用VM1网卡
squid虚拟机,采用VM1网卡连接真实机,VM3网卡连接web服务器
httpd虚拟机,才用VM3网卡连接squid服务器
client:192.168.10.1 gateway: 192.168.10.55
squid:ens33:192.168.10.55 ens37:192.168.2.254
web: 192.168.2.3 gateway: 192.168.2.254
1、squid配置
[root@localhost ~]# vim /etc/squid.conf
56 http_access allow all 允许所有主机把此squid作为代理服务器
57 #http_access deny all
60 http_port 192.168.10.55:3128 transparent 透明代理 squid-ip:3128 放行端口
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 118048/(squid-1)
2.配置路由转发
[root@localhost ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
3.设置 firewalld 防火墙
1.client端防火墙
默认开启状态即可
2.squid网关服务器防火墙设置
设置两块网卡所属区域
[root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=external --permanent
[root@localhost ~]# firewall-cmd --change-interface=ens37 --zone=dmz --permanent
为外网网卡放行代理服务器端口
[root@localhost ~]# firewall-cmd --zone=external --add-port=3128/tcp --permanent
为外网网卡放行后端http服务
[root@localhost ~]# firewall-cmd --zone=external --add-service=http --permanent
[root@localhost ~]# firewall-cmd --zone=external --add-service=https --
permanent
将外网网卡收到的80/443访问请求,转换到3128端口
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport=80 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport=443 -j REDIRECT --to-ports 3128
重新加载
[root@localhost ~]# firewall-cmd --reload
3.httpd服务器设置
[root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=dmz --permanent
[root@localhost ~]# firewall-cmd --zone=dmz --add-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --zone=dmz --add-port=443/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
4.客户端访问web服务器
不需要在火狐浏览器种设置代理服务器,直接访问web服务器即可