美文网首页
Squid正向代理

Squid正向代理

作者: 阿栋oxo | 来源:发表于2018-10-17 11:29 被阅读0次

    Squid简介:

    代理服务器是目前网络中常见的服务器之一,它可以提供文件
    缓存、复制和地址过滤等服务,充分利用有限的出口带宽,加快
    内部主机的访问速度,也可以解决多用户需要同时访问外网但公
    有IP地址不足的问题。同时可以作为一个防火墙,隔离内网与外
    网,并且能提供监控网络和记录传输信息的功能,加强局域网的
    安全性等。它的主要作用有以下几点。
    1.共享网络
    2.加快访问速度,节约通信带宽
    3.防止内部主机受到攻击
    4.限制用户访问,完善网络管理

    1.Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。简单来说,Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。

    2.Squid服务程序具有配置简单、效率高、功能丰富等特点,它能支持HTTP、FTP、SSL等多种协议的数据缓存,可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽。

    3.由于缓存代理服务不但会消耗服务器较多的CPU计算性能、内存以及硬盘等硬件资源,同时还需要较大的网络带宽来保障数据的传输效率,由此会造成较大的网络带宽开销。因此国内很多IDC或CDN服务提供商会将缓存代理节点服务器放置在二三线城市以降低运营成本。

    Squid正向代理的工作流程图.png

    Squid的原理:

    ① 客户端A向代理服务器提出访问Internet的请求
    ② 代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。
    ③ 如果缓存中存在客户端A需要的信息,则将信息传送给客户端。如果不存在,代理服务器就代替客户端向Internet上的主机请求指定的信息。
    ④ Internet上的主机将代理服务器的请求信息发送到代理服务器中,同时代理服务器会将信息存入缓存中。
    ⑤ 代理服务器将Internet上主机的回应信息传送给客户端A。
    ⑥ 客户端B向代理服务器提出相同的请求。
    ⑦ 代理服务器也首先与访问控制列表中的访问规则相对照。
    ⑧ 如果满足规则,则将缓存中的信息传送给客户端B。

    CentOS环境下使用部署正向代理

    步骤:

    搭建环境:两台虚拟机,一台作为Squid服务器(CentOS7),一台作为Squid客户端(win XP)。Squid服务器端需要两块网卡,一块为桥接模式ip=10.100.81.34,用于连接外网,另外一块为主机模式ip=192.168.25.129,用于连接内部局域网;另外一台客户端需要一块网卡, 主机模式即可ip=192.168.25.130,和服务器端处在一个局域网内。

    • 主要文件
      服务名:squid
      主程序:/usr/sbin/squid
      配置目录:/etc/squid
      主配置文件:/etc/squid/squid.conf
      监听tcp端口号:3128
      默认访问日志文件:/var/log/squid/access.log

    1、检查是否安装squid
    rpm -qa | grep squid
    2、假如没有squid,安装squid软件包
    yum install squid
    3、若需要添加acl访问控制就编辑squid的配置文件,
    vi /etc/squid/squid.conf
    4、检查配置文件是否有语法错误
    squid -k check
    5、初始化缓存目录
    squid -z
    6、关闭防火墙,或者在防火墙中添加3128端口(注意CentOS7没有iptables,已经改成firewall)
    systemctl stop firewalld //关闭防火墙
    firewall-cmd --zone=public --add-port=3128/tcp --permanent//在防火墙中添加3128端口,success则添加成功
    7、重启squid
    systemctl restart squid

    8、在虚拟机winxp中的浏览器上Internet选项设置代理服务器IP和端口,正向代理服务器搭建完毕。

    Internet选项.png
    9、测试
    处于主机模式下的Win XP能够访问外网www.baidu.com即成功;否则失败。
    www.baidu.com.png
    10、查看日志文件
    tail -f /var/log/squid/access.log

    注意:

    在公司内部,都会限制员工网络的访问,比如上班时间不能打游戏逛淘宝等等。接下来的实验就是来实现这些功能。
    *在/etc/squid/squid.conf中添加 acl访问控制实例


    acl.png

    配置文件/etc/squid/squid.conf的说明

    cache_mem 64 MB     //额外提供给squid使用的内存,squid的内存总占用为 X * 10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位),
                   //比如下面的cache大小是100M,即0.1GB,则内存总占用为0.1*10+15+64=80M,推荐大小为物理内存的1/3-1/2或更多。
    maximum_object_size 4 MB   //设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
    minimum_object_size 0 KB  //设置squid磁盘缓存最小文件

    maximum_object_size_in_memory 4096 KB   //设置squid内存缓存最大文件,超过4M的文件不保存到内存

    cache_dir ufs /var/spool/squid 100 16 256   //定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量

    logformat combined %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;h" %Ss:%Sh //log文件日志格式

    access_log /var/log/squid/access.log combined  //log文件存放路径和日志格式

    cache_log /var/log/squid/cache.log  //设置缓存日志

    logfile_rotate 60   //log轮循 60天

    cache_swap_high 95  //cache目录使用量大于95%时,开始清理旧的cache

    cache_swap_low 90   //cache目录清理到90%时停止。

    acl localnet src 192.168.1.0/24  //定义本地网段

    http_access allow localnet  //允许本地网段使用

    visible_hostname squid.david.dev  //主机名

    cache_mgr mchina_tang@qq.com  //管理员邮箱

    coredump_dir /var/spool/squid //squid挂掉后,临终遗言要放到哪里

    ACL的应用

    ACL访问控制的步骤:
    1、acl定义控制列表
    2、http_access定义控制访问

    格式:acl 列表名 列表类型 列表内容 ...
    格式:http_access allow或deny 列表名1 列表名2......
    注意:列表名1与列表名2之间空格分隔,为“与”的关系

    常用的列表类型

    列表类型 格式
    src 源IP地址,客户端的IP地址 acl name src ip/netmask
    dst 目的IP地址,访问的IP地址 acl name src ip/netmask
    arp 客户端MAC地址 acl name arp mac-addr
    srcdomain 源域名 acl name srcdomain .domain.com
    dstdomain 目标域名 acl name dstdomain .domain.com
    port 端口 acl name port num |num1 - num2
    proto 协议 acl name proto HTTP FTP ......
    method 请求类型 acl name method GET POST ......
    maxconn 单一IP地址最大连接数 acl name maxconn num
    url_regex URL匹配 acl name url_regex [-i] ^http://......
    time 时间段 acl name time [day] [h1:m1-h2:m2]

    ACL的实际应用

    • squid按照顺序读取访问控制列表的,在获得匹配的访问控制语句后,不在继续向下查询
    • 如存在多条访问控制语句,必须注意它们的顺序

    1、禁止任何客户机访问代理服务器
    acl all src 0.0.0.0/0.0.0.0
    http_access deny all

    2、允许指定的客户机在指定的时间上网

    acl kehuji src 192.168.1.0/24 192.168.4.0/24
    acl worktime time MTWHF 08:30-17:30 (其中MTWHF是周一到周五的英文首字母)
    http_access allow kehuji worktime

    [root@localhost~]#
    3、创建黑名单

    • 不允许被用户访问的网站IP
      [root@localhost~]#vi /etc/squid/deny_ip //创建黑名单
      220.170.91.114 //nslooup查询到的www.taobao.com的ip
      183.3.226.35 //nslookup查询到的www.qq.com的ip
      [root@localhost~]#vi /etc/squid/squid.conf
      acl deny_ip dst "/etc/squid/deny_ip"
      http_access deny deny_ip
    • 不允许被用户访问的域
      [root@localhost~]#vi /etc/squid/deny_domain
      .qq.com
      .bai.com
      [root@localhost~]#vi /etc/squid/squid.conf
      acl deny_domain dst "/etc/squid/deny_domain"
      http_access deny deny_domain

    4、创建白名单

    • 被允许访问网站的客户端
      [root@localhost~]#vi /etc/squid/guest //创建白名单
      192.168.25.130
      192.168.25.131
      192.168.25.0/24
      [root@localhost~]#vi /etc/squid/squid.conf
      acl guest dst "/etc/squid/guest"
      http_access allow guest

    配置大概在/etc/squid.conf的26行的位置


    acl.png

    squid涉及到防火墙

    1.firewalld的基本使用
    启动: systemctl start firewalld
    查看状态: systemctl status firewalld
    停止: systemctl disable firewalld
    禁用: systemctl stop firewalld

    2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
    在开机时启用一个服务:systemctl enable firewalld.service
    在开机时禁用一个服务:systemctl disable firewalld.service
    查看服务是否开机启动:systemctl is-enabled firewalld.service
    查看已启动的服务列表:systemctl list-unit-files|grep enabled
    查看启动失败的服务列表:systemctl --failed

    3.配置firewalld-cmd
    查看所有打开的端口: firewall-cmd --zone=public --list-ports
    那怎么开启一个端口呢:firewall-cmd --zone=public --add-port=80/tcp --permanent
    那怎么关闭一个端口呢:firewall-cmd --zone= public --remove-port=80/tcp --permanent

    注意:该命令方式开启的端口,可在/etc/firewalld/zones/public.xml中的对应配置文件中得到体现
    说明:
    firewall-cmd:Linux中提供的操作firewall的工具。
    –zone:指定作用域。
    –add-port=80/tcp:添加的端口,格式为:端口/通讯协议。
    –permanent:表示永久生效,没有此参数重启后会失效。

    更新防火墙规则: firewall-cmd --reload

    查看
    firewall-cmd --zone= public --query-port=3128/tcp

    相关文章

      网友评论

          本文标题:Squid正向代理

          本文链接:https://www.haomeiwen.com/subject/mjplzftx.html