Squid代理服务器应用
一、Squid代理服务器
- Squid主要提供缓存加速、应用层过滤控制的功能
一、缓存代理的工作机制
- 缓存网页对象,减少重复请求
1、代理基本类型
- 传统代理:适用于Internet,需要明确指定服务端
- 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将WEB访问重定向给代理服务器处理
- 反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存(静态)在本地,供下一个请求者使用
2、代理的好处
- 提高Web访问的速度
- 隐藏客户机的真实IP地址
三、Squid代理的安装
1、安装工作准备
yum -y install gcc gcc-c++ make
cd /opt
tar xvf squid-3.5.28.tar.gz
cd squid-3.5.28/
./configure --prefix=/usr/local/squid ##安装目录
--sysconfdir=/etc/ ##单独将配置文件修改到/etc目录下
--enable-arp-acl ##可在ACL中设置通过MAC地址进行管理,防止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-gnuregex ##使用GNU正则表达式
make && make install
- 创建链接文件,优化路径量
ln -s /usr/local/squid/sbin/* /usr/local/sbin
- 创建程序用户、组
useradd -M -s /sbin/nologin squid
- 改变目录属主
chown -R squid:squid /usr/local/squid/var/
2、修改Squid配置文件
vim /etc/squid.conf
放在http_access deny all之前,允许任意客户机使用代理服务,控制规则自上而下匹配
#56行插入
http_access allow 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 #指定缓存文件目录
配置硬盘缓存,打开缓存目录512M,其中一级目录16个,二级256个
cache_effective_user squid
cache_effective_group squid
squid -k parse ##检查配置文件
squid -k rec ##重新加载配置文件
squid -zX ##初始化缓存目录
squid ##启动squid服务
netstat -anpt | grep squid ##确认squid服务处于正常监听状态
3、编写Squid服务脚本
/usr/lib/systemd/system/*.service systemctl
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
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig squid on
systemctl restart squid ##测试正常
正在关闭Squid.. .
正在启动squid...
四、搭建传统代理
1、搭建环境准备
Squid服务器 192.168.22.119
web1服务器 192.168.22.120
web2服务器 192.168.22.123
win10 192.168.22.200
- 传统代理
在Squid服务器上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存
2、配置squid服务器
vim /etc/squid.conf
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
#63行插入
cache_mem 64 MB
#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB
#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
maximum_object_size 4096 KB
#允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
systemctl restart squid
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #修改防火墙规则
3、配置Web1服务器
systemctl stop firewalld.service
setenforce 0
yum -y install httpd
systemctl start httpd
netstat--natp | grep 80
4、客户端配置(添加代理)
谷歌浏览器:
设置–》高级–》系统–》打开代理设置–》设置代理
使用win10访问web1 IP
web1服务器查看访问日志信息
tail -f /var/log/httpd/access_log
五、搭建透明代理
- 准备工作
Squid服务器 ens33:192.168.22.119
ens36:192.168.100.100
web1服务器 192.168.22.123
win10 192.168.100.10
1、Squid服务器配置
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
systemctl restart network
#60行修改添加提供内网服务的IP地址,和支持透明代理选项transparent
vim /etc/squid.conf
http_access allow all
http_access deny all
http_port 192.168.100.100:3128 transparent
systemctl restart squid
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -F
iptables -t nat -F
#添加防火墙规则(将来源为100网段:80/443端口的流量重定向到3128端口)
iptables -t nat -I PREROUTING -i ens36 -s 192.168.22.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.22.0/25 -p tcp --dport 443 -j REDIRECT --to 3128
#若进行重启,则需要配置以下规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
- web1服务器添加一条静态路由
route add -net 192.168.100.0/24 gw 192.168.22.119
- 客户端关闭代理,修改win10地址为外网网段
六、总结
-
Squid主要提供缓存加速、应用层过滤控制的功能
-
传统代理:适用于Internet,需要明确指定服务端
-
透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将WEB访问重定向给代理服务器处理
-
反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存(静态)在本地,供下一个请求者使用
-
cache_mem 64 MB
#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
-
reply_body_max_size 10 MB
#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
-
maximum_object_size 4096 KB
#允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户