企业应用——构建Squid服务的传统代理和透明代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业应用——构建Squid服务的传统代理和透明代理相关的知识,希望对你有一定的参考价值。

=============Squid服务==============

Squid简介:

Squid是一个高性能的代理缓存服务器,主要提供缓存加速和应用层过滤控制的功能。Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
代理的工作机制
当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将页面数据保存到缓存中并发送给客户机。
技术分享图片


传统代理:使用传统代理的特点在于,客户机的相关程序(如IE浏览器、qq聊天软件等)必须指定代理服务器的地址、端口等基本信息。

技术分享图片

-

透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
技术分享图片

============安装Squid服务===============

一、 Squid 3.4.6源码包

百度网盘链接:https://pan.baidu.com/s/198CbzyEFmh9MyVCdn1GKzA 密码:9h6a

二、安装步骤

Squid服务器操作:

1.环境安装:

yum install gcc gcc-c++ make -y

2.解压缩包:

tar zxvf squid-3.4.6.tar.gz -C /opt

3.编译安装squid

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

详解如下
./configure --prefix=/usr/local/squid //编译安装时目录设置为/usr/local/squid
--sysconfdir=/etc //单独将配置文件修改到此目录下
--enable-arp-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 // 使用GUN正则表达式

make && make install

4.安装完成后创建链接文件、创建用户和组。

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid.squid /usr/local/squid/var/

5.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         #添加这行     代表指定账号基本组

#包含了程序运行时的内存,寄存器状态,堆栈指针,也可以认为是当时程序的状态时生成一个储存文件
coredump_dir /usr/local/squid/var/cache/squid

6.编辑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 -anpt | 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未启动"
        fi
        ;;
restart)
        $0 stop &> /dev/null
                echo "正在关闭 squid..."
        $0 start &> /dev/null
                echo "正在启动 squid..."
        ;;
        reload)
                $CMD -k reconfigure
        ;;
        check)
                $CMD -k parse
        ;;
        *)
                echo "请输入正确参数{start|stop|reload|restart|check|status}"
        ;;
esac

编辑完脚本后保存退出,并赋予执行权限:

[[email protected] squid-3.4.6]# cd /etc/init.d/
[[email protected] init.d]# ls
functions  netconsole  network  README  squid
[[email protected] init.d]# chmod +x squid
[[email protected] init.d]# chkconfig --add squid 
[[email protected] init.d]# chkconfig --level 35 squid on

7.因为修改过配置文件,所以重新开启Squid服务

service squid restart
squid的命令:
[[email protected] ~]# squid -k parse      #检查配置文件语法,只要不出现error报错,就没有问题
[[email protected] ~]# squid -z       #初始化缓存目录
[[email protected] ~]# squid          #启动服务

=============传统代理==============

一、传统代理环境拓扑

1.一台Centos 7 作为Squid服务器,ip:192.168.233.128
2.一台Centos 7 作为提供web服务的http服务器,ip:192.168.233.6
3.一台Windows 作为客户端 ,ip:192.168.233.200
技术分享图片

二、操作步骤

1.修改配置文件

vim /etc/squid.conf

找到下面的端口号,插入以下的内容

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为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

修改完成后保存退出

2.设置防火墙,以便访问

[[email protected] ~]# iptables -F
[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

3.因为修改配置文件,所以需要重新启动服务

[[email protected] ~]# service squid restart

三、验证传统代理

1)Centos 7 作为提供web服务的http服务器操作:

关闭防火墙,搭建并开启web服务:

[[email protected] ~]# systemctl stop firewalld.service 
[[email protected] ~]# setenforce 0
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# systemctl start httpd.service

2)Windows客户端设置代理操作:

在Windows 系统中开启浏览器
Internet选项--》连接--》局域网设置—— ip:squid服务器地址 端口:3128

技术分享图片
设置完成后,在地址栏输入访问web服务器的地址
技术分享图片

访问成功后,我们来查看web服务器的日志文件,是否是Squid服务器地址访问的。

技术分享图片
技术分享图片

================透明代理================

一、透明代理环境拓扑

1.一台Centos 7 作为Squid服务器,设置透明代理,
作为网卡,设置两个网关地址:
(1)内网 ens33:192.168.130.1
(2) 外网 ens36:12.0.0.1
2.一台Centos 7 作为内网端,ip:192.168.130.130【因为实验,所以只使用一台作为内网端】
3.一台Windows 作为外网端,ip:12.0.0.12

原理图如下:
技术分享图片

二、操作步骤

1.一台Centos 7 作为Squid服务器,设置透明代理,

作为网卡,设置两个网关地址:
  (1)内网 ens33:192.168.130.1
  (2)  外网 ens36:12.0.0.1

技术分享图片
因为squid服务器是作为网关的,所以需要开启路由功能。
启用路由功能:

[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

进行修改配置主配置文件:

 [[email protected] ~]# vim /etc/squid.conf

 http_port 192.168.130.1:3128 transparent      #修改    设置透明代理模式

技术分享图片
修改完成后保存退出,并重启squid服务:

[[email protected] ~]# service squid restart

设置防火墙的规则:

[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

[[email protected] ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT 

2.一台Centos 7 作为内部web服务器,ip:192.168.130.130

设置web服务地址IP
技术分享图片
关闭防火墙,搭建并开启web服务:

[[email protected] ~]# systemctl stop firewalld.service 
[[email protected] ~]# setenforce 0
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# systemctl start httpd.service

3.一台Windows 作为外网端,ip:12.0.0.12,并去访问Web服务器192.168.130.130

技术分享图片
技术分享图片

3.进入Web服务器,查询http访问日志,确认是否是squid服务器访问的

 [[email protected] ~]# tail /var/log/httpd/access_log 

技术分享图片

由上图可知是由Squid服务器的网关访问的web网站,证明是透明代理模式。

以上是关于企业应用——构建Squid服务的传统代理和透明代理的主要内容,如果未能解决你的问题,请参考以下文章

Squid传统代理与透明代理构建

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

利用Squid构建传统代理及透明代理

实战Squid 缓存服务器 之 传统代理 + 透明代理

Squid代理服务器(传统代理透明代理)(图文详解)

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