设为首页 收藏本站
查看: 1068|回复: 0

[经验分享] squid的安装与配置

[复制链接]

尚未签到

发表于 2018-12-26 14:18:19 | 显示全部楼层 |阅读模式
  一、squid简介
  当用户使用squid代理来访问web页面时,首先squid服务器会检查自己的cache查看是否有用户访问的web页面,如果有则squid服务器直接从cache中取出页面发送给用户的客户机,如果没有则squid服务器会代理客户机访问web页面,访问成功后将访问到的web页面发送给客户机并将web页面缓存到自己的服务器中。(注意:当squid代理服务器中cache中有客户机访问的页面时,squid也会去访问客户机访问的web页面去检查该页面是否过期。)
  如下图所示:

  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客户端访问测试


  

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


  

  查看access.log日志的变化:

  使用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   ##添加一条默认路由
  使用客户端访问测试:

  

  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)、使用客户机访问测试

  

  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)、使用客户机访问测试
  ①:

  ②:在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]#
  使用浏览器下载测试:


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



  

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

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


附件:http://down.运维网.com/data/2366058


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656161-1-1.html 上篇帖子: 我的SQUID下的CACHEMGR界面 下篇帖子: linux服务之squid
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表