squid代理服务器几种代理分析以及配置

Posted 爱show的小卤蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了squid代理服务器几种代理分析以及配置相关的知识,希望对你有一定的参考价值。

一、Squid代理服务器应用

客户机如何使用代理服务器访问网页?

首先是向代理服务器发送代理请求dns将域名解析成IP地址,然后tcp连接三次握手,服务端接收到了请求然后进行响应,代理服务器会在自己的缓存中查看有没有和请求相关的信息,如果有的话就将缓存中的信息发给客户端,如果没有的话,就会把请求发给服务端,然后返回给代理服务器,代理服务器再发给客户端

1.1、代理服务器的概念

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取的内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端

1.2、主要作用

资源获取:代替客户端实现从原始服务器得到资源获取

加速访问:代理服务器可以离原始服务器更近,从而起到一定的加速作用

缓存作用:dialing服务器保存从原始服务器所获取的资源,从而实现客户机快速的获取

隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息

1.3、Squid代理的类型

  • 传统代理:适用于Internet,需要明确指定服务端
  • 透明代理:客户机不需要指定代理服务器的地址和端口,二十通过默认路由,防火墙策略将Web访问重定向给代理服务器处理
  • 反向代理:如果Squid反向代理缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将后台Web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用

1.4、代理的工作机制

  • 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址
  • 将获得的网页数据(静态 Web元素) 保存到缓存中并发给客户机,一边下次请求相同的数据时快速响应

1.5、使用代理的好处

  • 提高Web访问速度
  • 隐藏客户机的真实IP地址

##1.6、客户机如何使用代理服务器访问网页?

首先是向代理服务器发送代理请求dns将域名解析成IP地址,然后tcp连接三次握手,服务端接收到了请求然后进行响应,代理服务器会在自己的缓存中查看有咩有和请求相关的信息,如果有的话就将缓存中的信息发给客户端,如果没有的话,就会把请求发给服务端,然后返回给代理服务器,代理服务器再发给客户端

二、编译安装Squid服务以及配置

第一步:关闭防火墙和安全防护功能

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

第二步:编译安装Squid

##########编译安装Squid
yum -y install gcc gcc-c++ make
tar zxvf squid-3.5.28.tar.gz -C /opt/
cd /opt/squid-3.5.28

./configure --prefix=/usr/local/squid \\     #指定安装的目录路径  
--sysconfdir=/etc \\                         #指定配置文件路径
--enable-arp-acl \\                          #MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \\                  #使用内核过滤
--enable-linux-tproxy \\                     #支持透明模式
--enable-async-io=100 \\                     #异步IO,提升存储功能
--enable-err-language="Simplify_Chinese" \\  #错误信息提示语言
--enable-underscore \\                       #允许URL中有下划线 
--disable-poll \\                            # 关闭莫默认使用poll模式
--enable-epoll \\                            #开启epoll模式提升性能
--enable-gnuregex                           #使用GNU正则表达式
make && make install

第三步:通过软链接将squid的可执行文件放到/usr/local/sbin/中可以让系统直接识别squid命令

ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #通过软链接将squid的可执行文件放到/usr/local/sbin/中可以让系统直接识别squid命令

第四步:创建squid不可登录用户,以及缓存目录

useradd -M -s /sbin/nologin squid  #  -M(不创建主目录) -s(不允许登录)
chown -R squid:squid /usr/local/squid/var/ #这里面如果给他777权限的话那么权限太大不安全,,所以修改属组和属主

第五步:修改squid配置文件

vim /etc/squid.conf
...
# And finally deny all other access to this proxy
http_access allow all #为了让任何主机都能访问这台代理服务器
http_access deny all
# Squid normally listens to port 3128
http_port 3128
cache_effective_user squid  #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid  #添加,指定账号基本组

第六步:检查语法,以及初始化缓存

squid -k parse #检查配置文件语法是否正确(主要的是看自己刚才添加的配置出没出现)
#启动Squid,第一次启动服务时,会自动初始化缓存目录
squid -z #-z选项来初始化缓存目录
netstat -natp | grep squid
squid #启动squid服务
netstat -natp | grep squid

第七步:创建脚本来管理服务(就可以使用systemctl来开启和关闭服务等操作),要不然还要进入目录来squid开启服务比较麻烦

vim /etc/init.d/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
netstat -natp | grep squid
和
cd /usr/local/squid/var/run/
里面的squid.pid对比是一样的

chmod +x /etc/init.d/squid
chkconfig --add squid 
chkconfig  --list squid

三、构建传统代理服务器(192.168.100.20)

第一步:配置文件中插入优化项(比如缓存空间大小,下载最大文件大小,缓存最大文件大小等)

vim /etc/squid.conf
...
# Squid normally listens to port 3128
....
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

第二步:Web服务器的设置(192.168.100.10)

systemctl stop firewalld
setenforce 0
yum -y install httpd
echo "<h1> this is WEB! </h1>" > /var/www/html/index.html
systemctl start httpd
curl http://192.168.100.10
tail -f /var/log/httpd/access_log#开启跟踪功能,查看如何访问的

第三步:客户机代理配置(ip:192.168.100.4)

没有配置代理的时候服务端跟踪到的日志可以看到是192.168.100.4这个客户端访问服务的

提供web服务的服务器上:

tail -f /var/log/httpd/access_log

未使用代理服务器时

在客户机上使用代理服务器访问Web服务器

使用代理服务器之后在Web服务器上的http服务的日志

在Web服务器查看日志是哪个IP访问服务器的,看到的不是客户端的IP,而是代理服务器的IP

在这里就能体现出来代理服务隐藏客户端IP的功能了

以上是关于squid代理服务器几种代理分析以及配置的主要内容,如果未能解决你的问题,请参考以下文章

Squid代理--经典缓存代理服务器(实现正向代理配置ACL各种访问控制日志分析)

部署Squid 代理服务器(内含传统透明代理服务器的配置ACL访问控制日志分析反向代理)

squid代理服务器(传统代理透明代理反向代理ACL日志分析)

Squid代理服务ACL访问控制及日志分析

Centos 7的squid服务器配置ACL访问控制及日志分析

缓存加速------Squid代理服务器应用(传统代理,透明代理,反向代理,ACL访问控制,日志分析)