squid代理服务器
squid是一种用来缓存Internet数据的软件。接受来自客户机需要下载的目标的请求并适当的处理这些请求。也就是说,如果一个客户端想要打开默认网站,它请求squid为它取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
一:squid概述
Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org
1.1:squid代理的作用
- 通过缓存方式为用户提供Web加速访问
- 对用户的Web访问请求进行过滤控制
1.2:缓存代理概述
1.21:Web代理的工作机制
- 缓存网页对象,减少重复请求
1.3:代理的基本类型
传统代理:适用于lnternet,需要明确指定服务器
透明代理:客户机不需要指定代理服务的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
使用代理的好处
提高Web访问速度
隐藏客户机的真实IP地址
二:案例一:传统代理
环境
名称 | 角色 | 地址 |
---|---|---|
centos-7 | squit | 20.0.0.45 |
centos-7 | web | 20.0.0.46 |
centos-7 | 客户机 | 20.0.0.120 |
2.1:安装squid服务
#解压到opt目录
tar zxvf squid-3.4.6.tar.gz -C /opt
#安装编译工具
yum -y install gcc gcc-c++
#configure配置
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \ //内核过滤
--enable-linux-tproxy \ //透明代理功能模块
--enable-async-io=100 \ //io对于io的优化 异步I/O 提升存储性能
--enable-err-language="Simplify_Chinses" \ //err-language 报错信息设置为中文
--enable-poll \ //提升功能 使用poll()模式
--enable-gnuregex \ //支持正则表达式
--enable-underscore //允许URL支持下划线
#编译及安装
make && make install
#路径优化,便于系统管理
[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#创建squid程序性用户
[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid
#赋予目录权限
[root@squid squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/
2.2:修改主配置文件
[root@squid squid-3.4.6]# vim /etc/squid.conf //编辑配置文件
//56行
http_access allow all //开启允许所有访问
#http_access deny all //注释拒绝访问
http_port 3128
//下面添加
cache_effective_user squid //缓存相对的用户
cache_effective_group squid //缓存相对的组
#验证语法配置文件语法
[root@squid squid-3.4.6]# squid -k parse
#初始化缓存目录
[root@squid squid-3.4.6]# squid -z
#启动squid服务
[root@squid squid-3.4.6]# squid
#查看端口
[root@squid squid-3.4.6]# netstat -natp | grep 3128
tcp6 0 0 :::3128 :::* LISTEN : 71471/(squid-1)
2.3:创建systemctl启动脚本
[root@squid squid-3.4.6]# cd /etc/init.d/
#!/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
#增加执行权限
[root@squid init.d]# chmod +x squid
#添加到squid服务
[root@squid init.d]# chkconfig --add squid
#设置开机启动
[root@squid init.d]# chkconfig --level 35 squid on
[root@squid init.d]# netstat -ntap | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 118846/(squid-1)
'//重启squid服务'
[root@squid init.d]# service squid stop
[root@squid init.d]# setenforce 0
[root@squid init.d]# service squid start
正在启动 squid...
[root@squid init.d]# netstat -ntap | grep 3128
tcp6 0 0 :::3128 :::* : LISTEN 119829/(squid-1)
2.4:设置缓存参数
[root@squid init.d]# vim /etc/squid.conf
http_port 3128 '//下面添加'
cache_mem 64 MB //缓存64M的内容
reply_body_max_size 10 MB //禁止下载的超过10MB的文件
maximum_object_size 4096 KB //超过4MB:的文件不进行缓存
2.5:设置防火墙规则
[root@squid init.d]# iptables -F
[root@squid init.d]# setenforce 0
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#重载服务
[root@squid init.d]# service squid reload
[root@squid init.d]# netstat -ntap | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 119829/(squi:d-1)
2.6:配置web端和客户端
[root@localhost ~]# su
[root@web ~]# systemctl stop firewalld.service
[root@web ~]# setenforce 0
[root@web ~]# yum install httpd -y
[root@web ~]# systemctl start httpd
[root@web ~]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 85552/httpd
#查看访问日志是没有东西的
[root@web ~]# cat /var/log/httpd/access_log
2.7:打开客户进行配置
- 设置客户端代理服务为squid IP
- 用win 10客户机访问web
2.8:查看web端httpd的访问日志
[root@web ~]# cat /var/log/httpd/access_log
客户端20.0.0.120访问20.0.0.46网站服务,成功变为访问 squid代理IP
传统代理需要客户端在浏览器上指定代理服务器的ip比较麻烦。
透明代理不需要在浏览器指定,需要将网关设为代理服务器。
三:squid缓存服务器—透明代理
3.1:在传统模式的基础上配置【全部仅主机模式】
3.2:配置squid双网卡 ens33内网 ens36外网
配
- 配置网卡
[root@squid ~]# cd /etc/sysconfig/network-scripts/
[root@squid network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[root@squid network-scripts]# vim ifcfg-ens36
//配置ens36网卡
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=20.0.10.1
NETMASK=255.255.255.0
#配置路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#使路由转发生效
[root@squid network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
#重启网卡
[root@squid ~]# service network restart
Restarting network (via systemctl): [ 确定 ]
#查看网卡信息
[root@squid ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.43 netmask 255.255.255.0 broadcast 20.0.0.255
inet6 fe80::1e75:7c2d:ef11:d9a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a6:36:0a txqueuelen 1000 (Ethernet)
RX packets 443515 bytes 492986663 (470.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 437684 bytes 827168602 (788.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.10.1 netmask 255.255.255.0 broadcast 20.0.10.255
inet6 fe80::adec:fd2a:b077:3f25 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a6:36:14 txqueuelen 1000 (Ethernet)
RX packets 1038 bytes 78352 (76.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78 bytes 12349 (12.0 KiB)
TX err:ors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.3:配置透明代理
[root@squid ~]# vim /etc/squid.conf
# Squid normally listens to port 3128
http_port 3128 //修改为 http_port 20.0.10.1:3128 transparent transparent'//透明模式'
#验证语法
[root@squid ~]# squid -k parse
3.4:配置防火墙规则
-t nat表 -I PREROUTING 进路由 -i 入口 -s 源地址 -p tcp协议 --dport 目标端口 -j 操作 REDIRECT重定向到 --to 3128端口
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 20.0.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 20.0.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#重载
[root@squid ~]# service squid reload
'web节点开启路由'
route add -net 20.0.10.0/24 gw 20.0.0.45
3.5:客户机进行访问
再次访问web服务即可
3.6:web服务器查看访问日志日志文件
[root@web ~]# cat /var/log/httpd/access_log
本次实验结束感谢观看