Squid代理服务

squid代理服务

代理服务:
反向代理:nginx
正向代理:传统代理、透明代理

正向代理:
原理:基于客户端的一个代理服务器
简单来说就是当客户端想要访问web服务器时,不会直接去访问 而是通过正向代理去访问,同样 当web服务器要反馈信息给客户端时也是直接反馈到正向代理服务器上,再由代理服务器反馈给客户端
当客户端想要对web发送一个请求时,会由正向代理去web上获取对应的资源,获取到之后再转交给客户端,并且给自己缓存一份,当客户端下次需要访问同样的数据时,会由正向代理直接交给客户端,以加快客户端的访问速度

优点:1、访问外网 2、做缓存 缓存静态数据 3、保护客户端

传统代理:需要客户端手动设置代理服务器,对于客户端而言,代理服务器不是透明的
透明代理:客户端不知道有正向代理的存在,对于客户端而言是透明的,相当于客户端和后端的网关

传统代理:
环境:(关闭防火墙)

client192.168.10.3
代理服务192.168.10.10
web192.168.10.20

操作:
web:
安装httpd服务并更改页面内容 再启动服务

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo web123 > /var/www/html/index.html #站点根目录
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.10.20
web123

代理:
1、安装squid服务

[root@localhost ~]# tar -zxf squid-3.4.6.tar.gz 
[root@localhost ~]# cd squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-apr-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplicy-Chinese" --enable-underscore --enable-gnuregex --enable-poll
#参数释义:
./configure --prefix=/usr/local/squid    #指定安装目录
--sysconfdir=/etc/   #指定配置文件的目录
--enable-arp-acl    #防止arp攻击
--enable-linux-netfilter    #启动内核过滤机制
--enable-linux-tproxy    #启动透明代理的功能
--enable-async-io=100    #调整io的线程参数
--enable-err-language="Simplicy-Chinese"    #错误信息显示语言
--enable-underscore    #允许使用下划线
--enable-gnuregex     #使用gnu的正则匹配   
--enable-poll   #使用poll模型
[root@localhost squid-3.4.6]# make && make install
[root@localhost squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#创建软链接
[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid
#添加用户
[root@localhost squid-3.4.6]# chown -R squid:squid /usr/local/squid/var/
[root@localhost squid-3.4.6]# chmod -R 757 /usr/local/squid/var/
#设置权限

2、修改配置文件并启动服务

[root@localhost squid-3.4.6]# vim /etc/squid.conf
56 http_access allow all   #访问权限  允许所有
59 http_port 3128  #默认监听端口
[root@localhost squid-3.4.6]# squid
[root@localhost squid-3.4.6]# netstat -anput | grep squid

客户端:

[root@localhost ~]# firefox   #打开浏览器
#操作:右上角设置--首选项--高级---网络---设置---手动设置--正向代理的ip,端口3128---为所有协议使用--确定

验证:

客户端直接访问web服务器的ip

[root@localhost ~]# firefox http://192.168.10.20

web服务端会出现正向代理的ip

[root@localhost ~]# tail -f /var/log/httpd/access_log  #查看访问日志
192.168.10.10 - - [15/Jun/2020:18:06:08 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.10.10 - - [15/Jun/2020:18:06:08 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"

透明代理:
环境:

clientip:192.168.10.3 网关:192.168.10.10
代理服务器ip1:192.168.10.10 ip2:192.168.2.1
webip:192.168.2.20 网关:192.168.2.1

操作:
代理:
1、修改配置文件

[root@localhost ~]# vim /etc/squid.conf
 59 http_port 192.168.10.10:3128 transparent
 #客户端的网关ip
 [root@localhost ~]# killall -9 squid
[root@localhost ~]# squid

2、添加路由转发

[root@localhost ~]# vim /etc/sysctl.conf
#在最后一行添加
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

3、设置内核防火墙 实现端口转发

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport=80 -s 192.168.10.0/24 -i ens33 -j REDIRECT --to 3128   #端口转发  把对80端口的请求全部转发到3128端口
#参数释义:
-s 192.168.10.0/24    #客户端的网段
-i ens34    和客户端同网段的网卡

如果需要删除可以通过 iptables -F -t nat 进行删除

验证:
客户端:把之前改的配置再改回来
打开浏览器----右上角设置–首选项–高级—网络—设置—使用系统代理设置

改好以后再直接访问web服务的ip

[root@localhost ~]# firefox 192.168.2.20

web服务端:

[root@localhost ~]# tail -f /var/log/httpd/access_log  #查看访问日志
192.168.2.1 - - [16/Jun/2020:10:32:33 +0800] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
#这里会出现代理的ip
[root@localhost ~]# curl -I 192.168.2.20
HTTP/1.1 200 OK

acl控制列表:
在做好透明代理或者传统代理的基础上 可以设定客户端访问控制权限

语法:
acl 列表名称 列表选项 列表内容
列表名称是唯一的不能冲突
配置文件是从上到下加载 所以尽量写在配置文件的前面

选项:
1、src选项 对于源地址的限制 也就是对客户端的限制 这里可以是网段 也可以是ip

[root@localhost ~]# vim /etc/squid.conf
27 acl qq src 192.168.10.3
 28 http_access deny qq
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid 

客户端访问测试:

[root@localhost ~]# firefox 192.168.2.20
#这里会的访问不成功

2、dst选项 对于目标地址的限制 对服务端进行限制

[root@localhost ~]# vim /etc/squid.conf
27 acl qq dst 192.168.2.20
 28 http_access deny qq
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid

客户端访问测试:

[root@localhost ~]# firefox 192.168.2.20
#这里会的访问不成功

3、dstdomain 对于客户端访问的域名进行限制
通过ip还是可以访问到的

[root@localhost ~]# vim /etc/squid.conf
27 acl qq dstdomain www.abc.com
 28 http_access deny qq
[root@localhost ~]# killall squid
[root@localhost ~]# squid

客户端:

[root@localhost ~]# vim /etc/hosts
192.168.2.20 www.abc.com

4、port选项 对客户端的访问端口进行限制

[root@localhost ~]# vim /etc/squid.conf
 27 acl qq port 80          
 28 http_access deny qq
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid

5、time选项 对于客户端的访问时间进行限制

[root@localhost ~]# vim /etc/squid.conf
27 acl qq time T 08:40-10:40
28 http_access deny qq

6、arp选项 对于客户端的mac地址进行限制

[root@localhost ~]# vim /etc/squid.conf
27 acl qq arp 00:0c:29:63:db:40
28 http_access deny qq

7、url_regex 通过正则匹配对客户端的url进行限制

[root@localhost ~]# vim /etc/squid.conf
27 acl qq url_regex index.html
28 http_access deny qq

squid的缓存功能
squid默认缓存是在内存当中 没有具体的目录 只是在内存中 当服务宕机或者重启数据会丢失

squid:

[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid

web:

[root@localhost ~]# tail -f /var/log/httpd/access_log

客户端:

[root@localhost ~]# curl 192.168.2.20
[root@localhost ~]# curl 192.168.2.20
[root@localhost ~]# curl 192.168.2.20

squid能够将数据缓存在硬盘当中

[root@localhost ~]# vim /etc/squid.conf
#取消前面的注释
61 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
参数释义:
cache_dir  缓存数据的目录
ufs 存储的格式
/usr/local/squid/var/cache/squid 缓存目录
100  缓存目录的容量  默认单位MB
16 创建16个一级目录
256  在一级目录下创建256个二级目录
[root@localhost ~]# killall -9 squid
[root@localhost ~]# chown nobody:nobody /usr/local/squid/var/cache/squid/
#参数释义:
nobody用户来完成特定的权限  相当于匿名用户 是一个比较小的权限用户
[root@localhost ~]# squid -z  #重新建立缓存
#如果时间较长 可以直接结束
[root@localhost cache]# cd squid/
[root@localhost squid]# ls
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
[root@localhost squid]# ls 00
00  0D  1A  27  34  41  4E  5B  68  75  82  8F  9C  A9  B6  C3  D0  DD  EA  F7
01  0E  1B  28  35  42  4F  5C  69  76  83  90  9D  AA  B7  C4  D1  DE  EB  F8
02  0F  1C  29  36  43  50  5D  6A  77  84  91  9E  AB  B8  C5  D2  DF  EC  F9
[root@localhost squid]# squid
[root@localhost squid]# netstat -anput | grep squid

客户端访问

#代理上缓存的数据位置

[root@localhost squid]# cd /usr/local/squid/var/cache/squid/
[root@localhost squid]# cd 00/00/
[root@localhost 00]# ls
[root@localhost 00]# vim 00000000 
[root@localhost 00]# killall  -9 squid
[root@localhost 00]# squid

#客户端访问
#服务端没有生成日志

#清空缓存

[root@localhost ~]# rm -rf  /usr/local/squid/var/cache/squid/
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid -z
[root@localhost ~]# squid

启动硬盘缓存的优化参数:
/etc/squid.conf
cache_mem 64 MB #给squid分配内存容量做缓存
maximum_object_size 4 MB #设置磁盘缓存单个数据的最大容量,超过4M的数据不缓存
minimum_object_size 0 KB #设置磁盘缓存单个数据最小容量
maximum_object_size_in_memory 1 MB #设置磁盘缓存单个数据最大大小
access_log /usr/local/squid/var/logs/access.log #设置访问日志路径
reply_body_max_size 102400 MB all #对用户下载文件大小进行限制
visible_hostname 192.168.2.3 #设置有效主机名,用于服务器出现问题时,给客户端反馈信息,IP地址是squid服务器的地址,与客户端相同网段的那个地址

squid的启动脚本

[root@localhost ~]# cd /etc/rc.d/init.d/
[root@localhost init.d]# vim squid
#!/bin/bash
#this is a squid script
#chkconfig:2345 99 20
#pidfile: /usr/local/squid/var/run/squid.pid
#config: /etc/squid.conf
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 starting...."
        $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 "stop squid"
      $0 start &> /dev/null
     echo "start squid"
  ;;
  reload)
     $CMD -k reconfigure 
     #运行中的重新引导配置squid最好的方法
  ;;
  check)
    $CMD -k parse    #检测其配置文件是否正确    这里的警告有可能主机名不匹配
  ;;
  *)
   echo "usages:$0 {start|stop|restart|reload|check|status}"
  ;;
esac
[root@localhost init.d]# chmod a+x squid
[root@localhost init.d]# chkconfig  --add  squid
root@localhost init.d]# systemctl start squid
[root@localhost init.d]# systemctl stop squid
[root@localhost init.d]# netstat -anput | grep squid
[root@localhost init.d]# systemctl stop squid
[root@localhost init.d]# systemctl restart squid
[root@localhost init.d]# netstat -anput | grep squid
tcp        0      0 192.168.10.1:3128       0.0.0.0:*               LISTEN      122122/(squid-1)    
udp        0      0 0.0.0.0:48956           0.0.0.0:*                           122122/(squid-1)    
udp6       0      0 :::45213                :::*                                122122/(squid-1)    
[root@localhost init.d]# systemctl reload squid
[root@localhost init.d]# systemctl check squid
active
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值