1.1、squid是什么?
Squid 是一个高性能的http代理服务器和web缓存服务器,可以很好的实现HTTP和FTP以及DNS查询、SSL等应用的缓存代理。
1、代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
2、可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
3、可以用在局域网中,使局域网用户通过代理上网。
4、可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
5、Squid支持SSL,支持ACL访问控制。
1.2、squid的优势
1、提高客户端访问速度。
2、隐蔽内部主机的ip地址。
3、部署简单,可以实现访问控制。
1.3、squid的作用
1、代理上网 (传统代理,透明代理)
2、网站静态页面缓存加速(反向代理)
1、传统代理又叫做正向代理,适用于Internet,需明确指定服务端。
2、透明代理,客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
3、反向代理
传统代理模式
客户端必须在自己的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器**上网。
在WEB服务器上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存。
环境介绍:
准备三台设备
192.168.100.5 squid 缓存服务器
192.168.100.6 web httpd服务器
win7 一台 测试客户端
tar zxvf squid-3.4.6.tar.gz -C /opt/
cd /opt/squid-3.4.6/
#先安装编译包
yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel perl
#配置编译
./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/
vim /etc/squid.conf
//增添下句并注释deny
http_access allow all //允许索引访问
#http_access deny all
//在端口port下增添两行代码
http_port 3128 //监听程序端口
cache_effective_user squid //设置控制程序的组 和用户名
cache_effective_group squid
coredump_dir /usr/local/squid/var/cache/squid //设置容灾备份目录
squid -k parse #检查配置文件语法
squid –k rec ##重新加载配置文件
squid -z #初始化缓存目录
squid #启动服务
netstat -ntap | grep 3128 #查看服务是否启动
//编写优化脚本
cd /etc/init.d/
vim squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动squid. . ."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | 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 "用法: $0 {start|stop|status|reload|check|restart}"
;;
esac
chmod +x squid
chkconfig --add squid
chkconfig --level 35 squid on #设置为开机自启动
service squid stop
service squid start
netstat -ntap | grep 3128
vim /etc/squid.conf
http_port 3128
cache_mem 64 MB #内存空间大小
reply_body_max_size 10 MB #允许下载最大文件大小
maximum_object_size 4096 KB #允许保存缓存的空间最大对象大小
http_access deny all #前面两行需要放在这行之上才生效
iptables -F #清空防火墙规则
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
#-I:插入input链 -p:协议 允许3128端口访问外网的WEB服务器
//重新加载squid服务
service squid reload
netstat -ntap | grep 3128
//关闭防火墙
systemctl stop firewalld
setenforce 0
//安装httpd
yum install httpd -y
systemctl start httpd
//进入目录下,设置测试内容
cd /var/www/html/
dd if=/dev/zero of=test1.tgz bs=1M count=11
dd if=/dev/zero of=test2.tgz bs=1M count=2
[root@web ~]# cat /var/log/httpd/access_log
开启路由转发
vi /etc/sysctl.conf
[root@squid network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
[root@squid network-scripts]#
修改配置文件
root@squid network-scripts]# vim /etc/squid.conf
[root@squid network-scripts]#
iptables -F
[root@squid init.d]# iptables -t nat -F
//定义规则入口ens36,80端口重定向到3128
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid network-scripts]#
//允许3128端口访问
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT