CentOS 7上构建squid传统代理,透明代理(squid3.4.6)

1.1 squid服务基础

1.1.1 缓存代理概述

1、代理的工作机制

当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图所示。

2、代理的基本类型

根据实现的方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。

  • 传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。
  • 透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理,服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。

在实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无需进行额外的设置就可以享受更好的上网速度。

1.1.2 手工编译安装squid

1、解压squid软件包
tar zxvf squid-3.4.6.tar.gz -C /opt/
2、转到解压后的目录下配置并安装,需安装编译环境包
yum install gcc gcc-c++ make -y

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 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex

make && make install
3、创建软连接,创建管理用户,修改配置文件,
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  
......
http_access allow all
http_access deny all
......
cache_effective_user squid        #添加   指定程序用户
cache_effective_group squid       #添加   指定账号基本组

4、初始化缓存目录
squid -z   //初始化缓存目录
5、编辑启动脚本
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        //开机自启动
6、开启服务
service squid start

1.2 构建代理服务器

1.2.1 传统代理

实验环境

1、web服务器上安装httpd服务并开启,关闭防火墙
yum install -y httpd     
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
2、squid服务器上修改配置文件
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
http_port 3128
cache_mem 64 MB                   //指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB         //允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB       //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

3、设置防火墙策略
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
4、重启squid服务
service squid restart
5、客户端访问测试

客户端先不设置代理直接访问web服务器,查看web服务器的日志文件可知,是客户端的IP地址进行访问的

web服务器日志存放位置
cd /etc/httpd/logs     //日志存放位置
vim access_log


客户端设置代理
浏览器中Internet选项---》连接----》局域网设置----ip:squid服务器地址 端口:3128

再进行访问之后查看web服务器日志文件可知是由代理服务器访问的web服务器

1.2.2 透明代理

实验环境

1、squid服务器配置双网卡
2、开启路由转发,清空防火墙规则,关闭安全功能
echo "1" > /proc/sys/net/ipv4/ip_forward   //开启路由转发
iptables -F
iptables -t nat -F
setenforce 0
3、配置squid支持透明代理,在http_port配置行加上一个transparent(透明)选项
vim /etc/squid.conf
......
http_port 192.168.100.1:3128 transparent      //只在其中一个IP地址上提供服务

4、重启squid服务
service squid restart
5、设置iptables的重定向策略
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT      //若做了传统代理刷完这句话,则不用再刷,若直接做的透明代理,则要刷这句话
6、客户端验证

浏览器取消之前设置的Internet选项,清理缓存,访问web服务器


查看web服务器日志,可看到是由代理服务器的外网口网关IP进行的访问

转载于:https://blog.51cto.com/13641879/2149518

你可能感兴趣的:(CentOS 7上构建squid传统代理,透明代理(squid3.4.6))