Squid-4.1(最新)安装及构建代理服务器

Squid-4.1(最新)安装及构建代理服务器

缓存代理简介

Squid作为应用层代理服务软件,主要提供缓存加速和应用层过滤控制的功能。本次实验使用的是Squid 4.1版本,和以往版本有较多不同,经过几天的摸索,终于成功实现了传统代理、透明代理及反向代理等功能。

代理的工作机制

代理服务器(Proxy Server)是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。其最基本的功能就是连接,此外还包括安全性、缓存,内容过滤,访问控制管理等功能。当客户机通过代理请求Web页面时,执行的代理服务器会先检查自己的缓存,当缓存中有客户机需要访问的页面,则直接将缓存服务器中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器想Internet发送访问请求,当获得返回的Web页面以后,将页面数据保存到缓存中并发送给客户机。

代理的基本类型

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

1、传统代理:普通代理服务,必须在浏览器、QQ聊天工具,下载团建等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络,对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。

2、透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机“透明”的,用户甚至不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。

安装及运行控制

下面以最新版Squid 4.1版本为例,介绍其安装和运行控制。

编译安装Squid

首先将下载下来的源代码包,解压到指定目录中。

[[email protected] ~]# tar xfvz squid-4.1.tar.gz -C /opt/
[[email protected] ~]# cd /opt/squid-4.1/
[[email protected] squid-4.1]# ./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中有下划线
> --enable-poll \              #使用Poll()模式,提升性能
> --enable-gnuregex            #使用GNU正则表达式

配置完成后,进行编译安装

[[email protected] squid-4.1]# make && make install

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

[[email protected] squid-4.1]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#创建软链接,这样可以直接使用squid相关的命令
[[email protected] squid-4.1]# useradd -M -s /sbin/nologin squid
#创建管理进程的用户
[[email protected] squid-4.1]# chown -R squid.squid /usr/local/squid/var/
#将文件的属主和属组修改

修改Squid的配置文件,Squid服务的配置文件位于/etc/squid.conf。

[[email protected] squid-4.1]# vim /etc/squid.conf
cache_effective_user squid       #添加指定程序用户
cache_effective_group squid      #添加指定账号基本组

其他的先保持默认的

[[email protected] squid-4.1]# squid -k parse   #检查配置文件语法
[[email protected] squid-4.1]# squid -z         #初始化缓存目录
[[email protected] squid-4.1]# 2018/07/22 20:03:12| Created PID file (/usr/local/squid/var/run/squid.pid)
2018/07/22 20:03:12 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2018/07/22 20:03:12 kid1| Creating missing swap directories
2018/07/22 20:03:12 kid1| No cache_dir stores are configured.
2018/07/22 20:03:12| Removing PID file (/usr/local/squid/var/run/squid.pid)
[[email protected] squid-4.1]# squid            #启动Squid服务
[[email protected] squid-4.1]# netstat -ntap | grep squid       #服务启动,Squid服务处于正常监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      90280/(squid-1)   

创建Squid服务脚本,为了使Squid服务启动、停止、重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig和service工具进行管理。

[[email protected] squid-4.1]# 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)
     kill -9 `expr $(cat $PID) + 2`   #squid.pid中的数字和进程号相差2,直接杀死进程,后续实验发现不一定相差2,暂时找不到原因,希望大佬出来能解答一下。
   ;;
   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

[[email protected] squid-4.1]# cd /etc/init.d/
[[email protected] init.d]# chmod +x squid                  #添加执行权限
[[email protected] init.d]# chkconfig --add squid           #使用chkconfig管理
[[email protected] init.d]# chkconfig --level 35 squid on   #设置开机启动

构建代理服务器

传统代理


修改配置文件,在配置传统代理时,需要添加http_access allow all访问策略,允许任意客户机使用代理。除此以外还要设置reply_body_max_size项,其他参数保持默认。

[[email protected] init.d]# vim /etc/squid.conf
http_access allow all  #允许任意客户机使用代理
http_port 3128         #使用3128端口
cache_mem 64 MB        #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB   #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB   #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

在防火墙添加允许策略:

[[email protected] run]# iptables -F              #清除防火墙filter表中规则
[[email protected] run]# setenforce 0             #关闭增强安全×××
[[email protected] run]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
#这句策略就是允许访问3218端口的tcp数据包通过
[[email protected] run]# service squid reload     #重新加载服务配置

客户机的代理配置,在IE浏览器中,选择“工具”->“Internet选项”,子啊弹出的“Internet选项”对话框,在“连接”选项中的“局域网(LAN)设置”选项组中单机“局域网设置”按钮,弹出“局域网(LAN)设置”对话框,设置如下:


开启web服务器的httpd服务。

使用192.168.58.130这台虚拟机访问192.168.58.156,访问成功,查看web服务器的访问日志,查看是那个ip地址访问的,如果是代理服务器ip访问的话,说明传统代理部署成功。

的确是代理服务器访问的,说明传统代理部署成功。

透明代理

透明代理提供的服务功能与传统代理一致的,但是其“透明”的实现依赖于默认路由和防火墙重定向策略。因此更适用于为局域网主机服务,而不适合Internet中的客户机提供服务。针对下面的拓扑,透明代理的关键在于Linux网关服务器,对于客户机仅需要正确配置网络地址和默认网关,并不需要指定代理服务器,拓扑图如下:

首先设置Squid代理服务器的双网卡配置。

然后修改squid配置文件,主要修改http_port,这里和4.1版本前的修改方法不太一样,若和以前一样,服务会无法启动,而且查看/usr/local/squid/var/logs/cache.log日志,会发现会有报错。


这里需要换种方式,因为可能4.1版本透明代理默认就是3128,那么3128端口就会被占用,无法再做透明代理,这里的方法就是重新使用一个端口,专门用来做透明代理,配置方法如下图,然后重启服务。


开启防火墙路由转发功能以及重定向策略。路由转发功能只需要在/etc/sysctl写入net.ipv4.ip_forward=1,再刷新配置文件即可。

[[email protected] ~]# vim /etc/sysctl.conf
[[email protected] ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# !v
vim /etc/sysctl.conf 


接着设置iptables重定向策略。

[[email protected] ~]# iptables -F
#清空防火墙filter表中策略
[[email protected] ~]# iptables -F -t nat
#清空防火墙nat表中策略
[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3129
#将80端口(http)的请求重新定向到3128端口
[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3129
#将443端口(https)的请求重新定向到3128端口
[[email protected] ~]# iptables -I INPUT -p tcp --dport 3129 -j ACCEPT
#允许来自192.168.100.0网段来自3129端口的tcp数据包通过

配置Web服务器的网卡信息。(配置好网关)

配置客户端网卡信息。(一定要配置好网关)

都配置完后,验证效果,访问成功,我们再查看web服务器的access.log日志,检查到底是哪个ip对web服务器访问的。可以看到是12.0.0.1这个IP对即代理服务器的访问记录。


本篇先介绍到这里,下篇介绍Squid 4.1版本的额ACL控制访问、日志分析和反向代理。就这样!

原文地址:http://blog.51cto.com/10693404/2149207

时间: 2024-08-05 03:30:37

Squid-4.1(最新)安装及构建代理服务器的相关文章

Squid服务基础及构建代理服务器

1.1 Squid服务基础 1.1.1 缓存代理概述 Squid:应用层的代理服务软件,主要提供缓存加速.应用层过滤控制的能 1.代理的工作机制: 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需呀的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中没有客户机要的访问页面,则由代理服务器向internet发送请求,当获得返回的web页面以后,将网页数据保存到缓存中并发送给客户机,如下图所示. 2.代理的基本类型 传统代理:也就是普通的代理服务器

squid构建代理服务器

编译安装squid: tar xvf squid-3.5.25-20170408-r14154.tar.gz -C /usr/src/ #解压 cd /usr/src/ ./configure --prefix=/usr/local/squid --enable-async-io=160 --enable-epoll --enable-linux-netfilter --enable-stacktraces --enable-gunregex --enable-linux-tproxy --en

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

一.缓存代理概述 1.缓存代理概述 作为应用层的代理服务软件,Squid主要提供缓存加速和应用层过滤控制的功能. 2.代理的工作机制 当客户机通过代理来请求Web页面时,指定的代理服务器会检查自己的缓存,如果缓存中已经存在客户机需要访问的页面,则之间将缓存中的页面内容反馈给客户机:若代理服务器中的缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,再将获得的页面数据保存到缓存中,并发送给客户机. 二.手工编译安装squid 1.解压缩squid安装文件到/opt tar

maven的安装及构建简单的项目

1.maven的主要功能 可以对项目依赖的jar包进行管理,可以让项目保持基本的依赖,排除冗余jar包,并且可以非常轻松的对依赖的jar包进行版本升级.而这些仅仅是Maven最基本的功能,它可以在这基础上对项目进行清理.编译.测试.打包.发布等等构建项目的工作. 2.maven的下载安装 (1)下载 从http://maven.apache.org/中下载最新版本. (2)解压 解压缩下载的zip文件到本地目录下,我放在了C:\Program Files\apache-maven-3.3.1-b

Jenkins详细安装与构建部署使用教程

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布/测试项目.2.监控外部调用执行的工作. 本文使用的Linux:Ubuntu 其中JDK.Tomcat.SVN服务器请看这里Ubuntu安装配置JDK.Tomcat.SVN服务器 一.安装Jenkins 本文直接使用war包安装 下载地址:https://jenkins-ci.org/content

windows中安装yeoman构建angularJs项目

yeoman是什么东西我在這里就不介绍了,网上一搜一大把,我们直接进入正题. 一.环境配置 (1).Ruby,下载地址:http://rubyinstaller.org/downloads/   ? 1.1.安装文件直接安装就好了,命令行输入 ruby --version可以看到版本就安装成功,否则请设置环境变量(此不详说) 1.2. 设置gem源为淘宝的ruby源, cmd中输入如下内容     gem sources --add https://ruby.taobao.org/ --remo

cocospods 最新安装教程

Terminator 终端原来 安装 cocoa pods  终端命令 :sudo gem install cocoapods  #已经无效系统更新后的 cocoa pods 终端命令 : sudo gem install -n /usr/local/bin cocoapods  #现在用这个 大家同在天朝做开发,在 termintor 中输入cocoapods的安装命令没有反应,这就对了说明你也被墙了.那么好 我们 做这一步操作来解决这个问题:更换Ruby镜像--淘宝的那个镜像(https:/

Jenkins详细安装与构建部署使用教程(转)

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布/测试项目.2.监控外部调用执行的工作. 本文使用的Linux:Ubuntu 其中JDK.Tomcat.SVN服务器请看这里Ubuntu安装配置JDK.Tomcat.SVN服务器 一.安装Jenkins 本文直接使用war包安装 下载地址:https://jenkins-ci.org/content

Maven安装 &快速构建微服务项目

Maven安装手册 1.准备安装包 安装包: apache-maven-3.5.4-bin.zip  (最好JDK 1.7及以上版本) 集成包: eclipse-maven3-plugin.zip 2.maven安装 2.1 将下载好的maven安装包解压到你想放的硬盘目录下 例:H:\maven\apache-maven-3.5.4 2.2 配置环境变量 MAVEN_HOME = H:\maven\apache-maven-3.5.4 path = %MAVEN_HOME%\bin: 2.3