squid代理服务器
squid是一种用来缓存Internet数据的软件。接受来自客户机需要下载的目标的请求并适当的处理这些请求。也就是说,如果一个客户端想要打开默认网站,它请求squid为它取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
squid概述
Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。
Squid 分类
按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。
- 普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
- 透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
- 反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
squid代理的作用
通过缓存方式为用户提供Web加速访问
对用户的Web访问请求进行过滤控制
缓存代理概述
Web代理的工作机制
代理的基本类型
- 传统代理:适用于lnternet,需要明确指定服务器
- 透明代理:客户机不需要指定代理服务的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
代理服务器的工作流程
-
当代理服务器中有客户端需要的数据时:
a. 客户端向代理服务器发送数据请求;
b. 代理服务器检查自己的数据缓存;
c. 代理服务器在缓存中找到了用户想要的数据,取出数据;
d. 代理服务器将从缓存中取得的数据返回给客户端。
-
当代理服务器中没有客户端需要的数据时:
1.客户端向代理服务器发送数据请求;
2.代理服务器检查自己的数据缓存;
3.代理服务器在缓存中没有找到用户想要的数据;
4.代理服务器向Internet 上的远端服务器发送数据请求;
5.远端服务器响应,返回相应的数据;
6.代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。
使用代理的好处
- 提高Web访问速度
- 隐藏客户机的真实IP地址
传统代理
环境准备
名称 | 地址 |
---|---|
squid | 192.168.2.10 |
web | 192.168.2.11 |
客户机 | 192.168.2.12 |
[root@squid ~]# ls
anaconda-ks.cfg automake-1.16.2.tar.gz squid-4.13.tar.gz
[root@squid ~]# tar -xf squid-4.13.tar.gz # 解压
[root@squid ~]# yum -y install gcc gcc-c++ # 安装编译工具
[root@squid ~]# cd squid-4.13/
[root@squid squid-4.13]# ./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支持下划线
[root@squid squid-4.13]# make && make install # 编译以及安装
[root@squid squid-4.13]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ # 配置软链接
[root@squid squid-4.13]# useradd -M -s /sbin/nologin squid # 创建squid用户
[root@squid squid-4.13]# chown -R squid.squid /usr/local/squid/var/ # 授权
# 修改主配置文件
[root@squid ~]# vim /etc/squid.conf
56 http_access allow all # 开启允许所有访问
59 #http_access deny all # 注释掉拒绝所有访问
62 http_port 3128 # 设置监听的IP与端口号
63 cache_effective_user squid # 缓存相对的用户
64 cache_effective_group squid # 缓存相对的组
[root@squid ~]# squid -k parse #验证语法配置文件语法
[root@squid ~]# squid -z #初始化缓存目录
[root@squid ~]# 2020/11/04 19:38:25| Created PID file (/usr/local/squid/var/run/squid.pid)
2020/11/04 19:38:25 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2020/11/04 19:38:25 kid1| Creating missing swap directories
2020/11/04 19:38:25 kid1| No cache_dir stores are configured.
2020/11/04 19:38:25| Removing PID file (/usr/local/squid/var/run/squid.pid)
[root@squid ~]# squid # 启动服务
[root@squid ~]# ss -nutlp | grep squid # 查看端口
udp UNCONN 0 0 *:55124 *:* users:(("squid",pid=75242,fd=7))
udp UNCONN 0 0 [::]:37289 [::]:* users:(("squid",pid=75242,fd=5))
tcp LISTEN 0 128 [::]:3128 [::]:* users:(("squid",pid=75242,fd=10))
# 创建systemctl启动脚本
[root@squid ~]# cd /etc/init.d/
[root@squid 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 -nutlp | 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 -nutlp | grep squid
fi
esac
[root@squid init.d]# chmod +x squid # 赋予执行权限
[root@squid init.d]# chkconfig --add squid #添加到squid服务
[root@squid init.d]# chkconfig --level 35 squid on #设置开机启动
[root@squid init.d]# netstat -nutlp | grep squid
tcp6 0 0 :::3128 :::* LISTEN 75242/(squid-1)
udp 0 0 0.0.0.0:55124 0.0.0.0:* 75242/(squid-1)
udp6 0 0 :::37289 :::* 75242/(squid-1)
# 进行手动重启测试
[root@squid ~]# service squid stop
[root@squid ~]# service squid start
正在启动 squid...
[root@squid ~]# netstat -nutlp | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 1433/(squid-1)
# 设置缓存参数
[root@squid ~]# 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:的文件不进行缓存
配置web端和客户端
[root@web ~]# yum -y install httpd
[root@web ~]# systemctl start httpd
[root@web ~]# netstat -nutlp | grep 80
tcp6 0 0 :::80 :::* LISTEN 1363/httpd
[root@web ~]# cat /var/log/httpd/access_log # 此时查看日志是没有任何的消息的
配置客户端
配置手动代理,设置该ip为squid服务端ip
访问web服务器
在命令行查看日志文件
[root@web ~]# cat /var/log/httpd/access_log # 客户端访问web服务器,成功变为代理服务器ip
192.168.2.10 - - [04/Nov/2020:14:41:53 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
192.168.2.10 - - [04/Nov/2020:14:41:53 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.2.11/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
192.168.2.10 - - [04/Nov/2020:14:41:53 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://192.168.2.11/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
传统代理和透明代理的区别
传统代理需要客户端在浏览器上指定代理服务器的ip比较麻烦。
透明代理不需要在浏览器指定,需要将网关设为代理服务器。