squid的安装与配置

一、squid简介

   当用户使用squid代理来访问web页面时,首先squid服务器会检查自己的cache查看是否有用户访问的web页面,如果有则squid服务器直接从cache中取出页面发送给用户的客户机,如果没有则squid服务器会代理客户机访问web页面,访问成功后将访问到的web页面发送给客户机并将web页面缓存到自己的服务器中。(注意:当squid代理服务器中cache中有客户机访问的页面时,squid也会去访问客户机访问的web页面去检查该页面是否过期。)

如下图所示:

wKioL1XX6p6xWv0uAADmAm2fDz8227.jpg

1、代理的基本类型:

  1)传统代理

     传统代理也叫标准代理或普通代理,客户机如果要访问web服务器或QQ等应用程序必须在软件中设置代理服务器的IP地址和端口信息才能成功访问。对于域名的解析请求(DNS)也会发送给指定的代理服务器。(适用于internet上,需明确指定服务端IP和端口)

  2)透明代理

     与传统代理服务的功能基本相同,区别于传统服务器需要设置代理IP和端口信息,而透明代理是使用默认路由、防火墙策略或web访问重定向来实现的,则不需要用户有任何设置。对于用户来说透明代理是“透明”的。使用此代理时,对于域名的解析请求(DNS)由客户机本身设置的DNS地址来解析的。(适用于共享网关上,不需要明确指定服务端)


二、Centos6.5中安装与配置squid服务

代理软件squid版本:squid-3.4.6.tar.gz

代理服务器IP:

eth1:192.168.0.103   ##连接外网的IP地址(可以上网)

eth2:192.168.1.1     ##连接内网的IP地址,就是作为内网的网关(不能上网)

客户机IP地址:192.168.1.10 

        网关:192.168.1.1


 1、使用源代码方式安装squid代理服务和基本配置

   1)、解压squid软件包

     tar zxf squid-3.4.6.tar.gz -C /usr/src     ##将squid软件包解压到/usr/src目录下

     cd /usr/src/squid-3.4.6    ##切换到squid软件包解压到的目录来进行一下操作

   2)、configure配置

      ./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     ##指定安装目录

--sysconfdir=/etc   ##单独指定配置文件的存放目录

--enable-arp-acl    ##可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗

--enable-linux-netfilter   ##使用内核过滤(和iptables一起工作)

--enable-linux-tproxy      ##支持透明模式

--enable-async-io=100      ##异步I/O,替身存储性能,相当于--enable-pthreads --enable-         ##storeio=ufs,aufs --with-pthreads --with-aufs-thread=值

--enable-err-language="Simplify_Chinese"   ##错误信息的显示语言

--enable-underscore      ##允许URL中有下划线

--enable-poll    ##使用Poll()模式,替身性能(并行)

--enable-gnuregex    ##使用GNU正则表达式

  3)、编译;编译安装

    make && make install

   验证安装是否成功:

  ls /usr/local/squid/

    bin  libexec  sbin  share  var

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

    ln -s /usr/local/squid/sbin/* /usr/local/sbin/    ##优化执行命令(可以再PATH路径中搜索到)

    useradd -M -s /sbin/nologin squid   ##创建运行squid服务的用户

    chown -R squid:squid /usr/local/squid/var/   ##给squid用户有权限执行   

  5)、添加squid服务

vi /etc/init.d/squid  ##创建并编写squid服务脚本

#!/bin/bash

# chkconfig: 2345 90 25

# config: /etc/squid.conf

# pidfile: /usr/local/squid/var/run/squid.pid

# Description: Squid - Internet Object Cache.

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 -anpt |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 | restart | reload | check | status}"

;;

esac

:wq   ##在末行模式中输入代表保存退出


chmod +x /etc/init.d/squid    ##给squid服务脚本加上执行权限

chkconfig --add squid   ##添加squid为系统服务

chkconfig squid on      ##设置squid服务在2345运行级别中开机自启

 6)、修改/etc/squid.conf文件并初始化和启动squid服务

   vi /etc/squid.conf   ##在最后添加如下行

    visible_hostname centos       ##设置安装squid的主机名

    cache_effective_user squid    ##这一项指定squid的程序用户,用来设置初始化,运行时缓存的账号,否则启动不成功

    cache_effective_group squid   ##默认为cache_effective_user指定账号的基本组

:wq   ##在末行模式中输入代表保存退出

  squid -k parse   ##检测/etc/squid.conf中语法是否正确

  squid -z   ##初始化缓存目录

  squid   ##启动squid服务命令(把squid添加为系统服务后可以使用service命令来管理)

  netstat -utpln |grep 3128   ##查看squid是否启动并监听


2、配置传统模式的代理

 1)、设置/etc/squid.conf文件

   vi /etc/squid.conf

     http_port 3128    ##此行默认配置中已经存在,如不存在则添加此行 

     http_access allow all    ##在http_access deny all前添加此行

     reply_body_max_size 10 MB   ##允许下载的最大文件大小为10MB(在结尾添加)

 2)、设置iptables防火墙和重新启动squid服务   

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

[root@centos logs]# iptables -L -n     ##查看iptables防火墙中filter表中的规则

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3128 


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

[root@centos logs]# 


重新启动squid服务并查看监听状态:

[root@centos ~]# service squid restart

正在关闭squid...

正在启动squid...

[root@centos ~]# 

[root@centos ~]# netstat -utpln |grep 3128

tcp        0      0 :::3128                     :::*                        LISTEN      5361/(squid-1)      

[root@centos ~]# 


  3)、使用windows7客户端访问测试

    wKioL1XYEzzThy6LAACz5hCy64U123.jpg

wKioL1XYFwfy2uEXAADFolddlJw237.jpg


使用客户机访问https://www.baidu.com和mirrors.aliyun.com网站测试:

wKiom1XYFVXAiQugAAGXeEF8Ojc558.jpg

wKioL1XYF2eyEhR-AAKd3WtzplI691.jpg


查看access.log日志的变化:

wKiom1XYFc6w_m36AAK1LIRhPvs110.jpg

使用squid做传统代理完成!!!


3、配置透明代理(在配置了squid传统代理基础上做配置)

   注意:记着要把客户机中设置的代理取消,就是不适用任何代理来访问

   centos这台服务器承担两个角色:①网关服务器   ②squid代理服务器

  1)设置iptables防火墙配置SNAT使局域网可以访问internet(这里指192.168.1.0/24能够不使用代理服务器访问DNS,FTP,MAIL等;当局域网PC访问internet上的web站点(80端口)时自动使用代理,当然要进行以下的配置)

[root@centos ~]# iptables -t nat -I POSTROUTING  -s 192.168.1.0/24 -p tcp ! --dport  80  -j SNAT --to-source 192.168.0.103    ##配置SNAT转换除TCP的80端口外的所有端口都转

[root@centos ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p udp --dport 53 -j SNAT --to-source 192.168.0.103         ##允许DNS请求转发

[root@centos ~]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination     

    

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination         

SNAT       tcp  --  192.168.1.0/24       0.0.0.0/0           tcp dpt:!80 to:192.168.0.103

SNAT       udp  --  192.168.1.0/24       0.0.0.0/0           udp dpt:53 to:192.168.0.103 


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

[root@centos ~]# 

在网关上开启路由功能并添加默认路由:

 vi /etc/sysctl.conf     ##修改此文件的如下行的最后一位为1

  net.ipv4.ip_forward = 1   ##开启ipv4路由功能

:wq

sysctl -p   ##重新载入/etc/sysctl.conf的配置

route add default gw 192.168.0.1   ##添加一条默认路由

使用客户端访问测试:

  wKiom1XYa16giCvGAADXzyK93Ms550.jpg


  2)、修改/etc/squid.conf文件使其squid执行透明代理

    vi /etc/squid.conf

      http_port 192.168.1.1:3128 transparent   ##修改http_port 3128行(注意http_port 192.168.1.1:3128 transparent和http_port 3128不能同时存在)

    :wq

    service squid restart  

    netstat -utpln |grep 3128   ##查看squid服务的端口是否监听


  3)、当局域网PC的internet中的web站点(80)端口时,自动使用代理

[root@centos ~]# iptables -t nat -I PREROUTING -i eth2 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128     ##将80端口映射到目标端口3128上

[root@centos ~]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination         

REDIRECT   tcp  --  192.168.1.0/24       0.0.0.0/0           tcp dpt:80 redir ports 3128 


Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination         

SNAT       tcp  --  192.168.1.0/24       0.0.0.0/0           tcp dpt:!80 to:192.168.0.103 

SNAT       udp  --  192.168.1.0/24       0.0.0.0/0           udp dpt:53 to:192.168.0.103


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

[root@centos ~]# 



  4)、使用客户机访问测试

   wKioL1XYciKxZ61oAAJqTormYGg604.jpgwKiom1XYb2qiZ1q3AAHRDN7Oarw522.jpg


  5)、针对局域网PC的internet中的web站点(配置ACL),要求如下

     ①:禁止下载扩展名为.3gp,.mp4,.f4v,.mkv,.rmvb,.avi;

     ②:超过4MB大小的文件不进行缓存,禁止下载超过100MB的文件;

     ③:设置网站黑名单,进行访问位于.qq.com,.msn.com域下的wen站点;

     ④:允许在正常上班时间(周一至周五的8:30~17:30)使用代理服务;

     ⑤:默认策略设为禁止任何客户机使用代理服务;

①:

修改/etc/squid.conf文件:

vi /etc/squid.conf    ##以下两行注意尽量添加在比其他http_access前(因为拒绝尽量添加再最前面,这样可以节省资源也可以防止有其他allow先匹配)

 acl DOWNLOAD urlpath_regex -i \.3gp$ \.mp4$ \.f4v$ \.mkv$ \.rmvb$ \.avi$    ##             以.3gp,.mp4,.mkv,.rmvb,.avi结尾的url路径

 http_access deny DOWNLOAD   ##调用上面一条名为DOWNLOAD的ACL并设为deny

:wq

②:

vi /etc/squid.conf

 maximum_object_size_in_memory 4 MB   ##操作4MB大小的文件不进行缓存

 reply_body_max_size 100 MB   ##禁止下载操作100MB的文件

:wq

③:

vi /etc/squid.conf    ##以下两行也是尽量在其他http_access前添加

 acl DOMAIN dstdomain .qq.com .msn.com    ##设置目标域.qq.com和.msn.com

 http_access deny DOMAIN   ##调用上一条ACL名为DOMAIN并设为deny

:wq

④:

vi /etc/squid.conf

 acl TIME time MTWHF 8:30-17:30    ##设置星期一至星期5的8:30-17:30的时间段

 http_access deny !TIME   ##除了以上设置的时间段其他时间禁止使用代理(!表示取反)

 

⑤:

vi /etc/squid.conf    ##以下一行添加在http_access中是最后一行

 http_access deny all   ##设置默认策略为禁止全部客户机使用代理服务器  

:wq


service squid restart

netstat -utpln |grep 3128


  6)、使用客户机访问测试

   ①:

   wKioL1XZP6ahE0lXAAKtOrh2p9w343.jpg

②:在192.168.0.0/24这个网段上搭建一台http服务(在squid服务的外网卡网段上搭建),这里就不在演示;

[root@Wu-Centos-2 html]# pwd

/var/www/html   ##当前路径(http服务的网页根目录)

[root@Wu-Centos-2 html]# dd if=/dev/zero of=./file1.tar bs=1M count=20    ##在网页根目录中生成一个20MB的名为fitl1.tar的文件

记录了20+0 的读入

记录了20+0 的写出

20971520字节(21 MB)已复制,0.108024 秒,194 MB/秒

[root@Wu-Centos-2 html]# dd if=/dev/zero of=./file1.tar bs=1M count=200   ##在网页根目录中生成一个200MB的名为file2.tar的文件

记录了200+0 的读入

记录了200+0 的写出

209715200字节(210 MB)已复制,24.6213 秒,8.5 MB/秒

[root@Wu-Centos-2 html]# du -sh file1.tar file2.tar    ##查看两个文件的大小

20M     file1.tar

200M    file2.tar

[root@Wu-Centos-2 html]# 

使用浏览器下载测试:

wKiom1XZP8STq7J7AAK-I_2xnkE460.jpg

wKioL1XZQdfhsn-BAAI_tr4Xouw508.jpg

③:访问qq.com和msn.com测试

wKioL1XZQj-jDDtXAAG3tfW1iXc004.jpg

wKiom1XZQC2Se6N6AAGdMs9SNJI505.jpg


④和⑤在这里不太好演示,就不演示了


透明模式的代理就配置完成了!!!

你可能感兴趣的:(squid的安装与配置)