• linux squid代理服务器


    一. squid代理软件结构介绍

    /etc/squid/squid.conf   #squid的主配置文件
    /etc/squid/mime.conf   #squid所支持的Internet上面的文件格式,默认足够用
    /usr/sbin/squid                #squid的主程序
    /var/spool/squid                #squid的缓存目录
    /usr/lib64/squid/            #提供 squid 额外的控制模块,尤其是影响认证密码方面的程序,都是放在这个目录下的
    
    [root@study06 ~]# rpm -qa | grep 'squid'   #检查squid是否安装
    [root@study06 ~]# yum -y install squid    #安装squid软件
    

    二. squid主配置文件介绍

    本部分介绍的是标准的代理模式,用户是需要在浏览器中指定代理服务器才能使用代理的,比较麻烦,一般场景中会设置透明代理,具体请在看完本部分后看第三大部分,

    [root@www ~]# vim /etc/squid/squid.conf
    
    # 1. 信任用户与目标控制,透过 acl 定义出 localhost 等相关用户
    acl manager proto cache_object              <==定义 manager 为管理功能
    acl localhost src 127.0.0.1/32              <==定义 localhost 为本机来源
    acl localhost src ::1/128
    acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 <==定义 to_localhost 可联机到本机
    acl to_localhost dst ::1/128
    
    # 2. 信任用户与目标控制,定义可能使用这部 proxy 的外部用户(内网)
    acl localnet src 10.0.0.0/8      <==可发现底下都是 private IP 的设定
    acl localnet src 172.16.0.0/12
    acl localnet src 192.168.0.0/16
    acl localnet src fc00::/7
    acl localnet src fe80::/10
    # 上述数据设定两个用户 (localhost, localnet) 与一个可取得目标 (to_localhost)
    
    # 3. 定义可取得的数据端口所在!
    acl SSL_ports port 443                  <==联机加密的埠口设定
    acl Safe_ports port 80          # http  <==公认标准的协议使用埠口
    acl Safe_ports port 21          # ftp
    acl Safe_ports port 443         # https
    # 定义出 SSL_ports 及标准的常用埠口 Safe_ports 两个名称
    
    # 4. 定义这些名称是否可放行的标准依据(有顺序喔!)
    http_access allow manager localhost  <==放行管理本机的功能
    http_access deny manager             <==其他管理来源都予以拒绝
    http_access deny !Safe_ports         <==拒绝非正规的埠口联机要求
    http_access deny CONNECT !SSL_ports  <==拒绝非正规的加密埠口联机要求
    <==这个位置为你可以写入自己的规则的位置喔!不要写错了!有顺序之分的!
    http_access allow localnet           <==放行内部网络的用户来源
    http_access allow localhost          <==放行本机的使用
    http_access deny all                 <==全部都予以拒绝啦!
    
    # 5. 网络相关参数,最重要的是那个定义 Proxy 协议埠口的 http_port
    http_port 3128     <==Proxy 预设的监听客户端要求的埠口,是可以改的
    # 其实,如果想让 proxy server/client 之间的联机加密,可以改用 https_port (923)
    
    # 6. 快取与内存相关参数的设定值,尤其注意内存的计算方式
    #1个G磁盘缓存,占用10M内存空间。
    hierarchy_stoplist cgi-bin ? <==hierarchy_stoplist 后面的关键词 (此例为 cgi-bin)
    # 若发现在客户端所需要的网址列,则不快取 (避免经常变动的数据库或程序讯息)
    cache_mem 8 MB     <==给proxy额外的内存,用来处理最热门的快取数据(需自己加)
    
    # 7. 磁盘高速缓存,亦即放置快取数据的目录所在与相关设定
    cache_dir ufs /var/spool/squid 100 16 256 <==默认使用 100MB 的容量放置快取
    coredump_dir /var/spool/squid
    # 底下的四个参数得要自己加上来喔!旧版才有这样的默认值!
    minimum_object_size 0 KB    <==小于多少 KB 的数据不要放快取,0 为不限制
    maximum_object_size 4096 KB <==与上头相反,大于 4 MB 的数据就不快取到磁盘
    cache_swap_low 90   <==与下一行有关,减低到剩下 90% 的磁盘高速缓存为止
    cache_swap_high 95  <==当磁盘使用量超过 95% 就开始删除磁盘中的旧快取
    
    # 8. 其他可能会用到的默认值!参考参考即可,并不会出现在配置文件中。
    access_log /var/log/squid/access.log squid <==曾经使用过 squid 的用户记录
    ftp_user Squid@  <==当以 Proxy 进行 FTP 代理匿名登录时,使用的账号名称
    ftp_passive on   <==若有代理 FTP 服务,使用被动式联机
    #refresh_pattern <regex>   <最小时间> <百分比> <最大时间>
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern -i (/cgi-bin/|?) 0     0%      0
    refresh_pattern .               0       20%     4320
    #regex:使用的是正规表示法来分析网址列的资料,如上面第一行设定为网址列开头是 ftp 的意思。
    #最小时间:单位是分钟,当取得这个数据的时间超过这个设定值,则该数据会被判定为旧资料。如上面第一行, 表示当取得的资料超过 1440 分钟时,该资料会被判定为旧数据,若有人尝试读取同样的网址列,那么 squid 会重新抓取该数据,不会使用快取内的旧数据。至于第三行,则表示除了上述的两个开头数据外,其他的数据都是被定义为新的, 因此 squid 只会从快取内抓数据给客户端。
    #百分比:这个项目与『最大时间』有关,当该资料被抓取到快取后,经过最大时间的多少百分比时,该数据就会被重抓。
    #最大时间:与上一个设定有关,就是这个数据存在快取内的最长时间。如上面第一行,最大时间为 10080 分钟,但是当超过此时间的 20% (2016分钟) 时,这个数据也会被判定为旧资料。
    # 上面这四行与快取的存在时间有关,底下内文会予以说明
    cache_mgr root               <==预设的 proxy 管理员的 email
    cache_effective_user squid   <==启动 squid PID 的拥有者
    cache_effective_group squid  <==启动 squid PID 的群组
    # visible_hostname <==有时由于 DNS 的问题,找不到主机名会出错,就得加上此设定
    ipcache_size 1024  <==以下三个为指定 IP 进行快取的设定值
    ipcache_low 90 
    ipcache_high 95  
    

    三. squid配置文件常用修改功能

    1. 增加额外目录空间给缓存

    tips:了解即可,一般情况下分区足够,直接增加缓存即可,不需要指定额外目录。

    [root@www ~]# vim /etc/squid/squid.conf
    cache_dir ufs /var/spool/squid 500 16 256
    cache_dir ufs /srv/squid 2000 16 256
    
    [root@www ~]# mkdir /srv/squid
    [root@www ~]# chmod 750 /srv/squid
    [root@www ~]# chown squid:squid /srv/squid
    [root@www ~]# chcon --reference /var/spool/squid /srv/squid
    [root@www ~]# ll -Zd /srv/squid
    drwxr-x---. squid squid system_u:object_r:squid_cache_t:s0 /srv/squid/
    [root@www ~]# /etc/init.d/squid restart
    

    2. ACL与http_access

    • 管理使用代理的源
      • src ip-address/netmask
      • src addr1-addr2/netmask
      • srcdomain .domain.name
    • 管理目标站点能否被代理
      • dst ip-addr/netmask
      • dstdomain .domain.name
        • acl dropdomain dstdomain "/etc/squid/dropdomain.txt" #如果域名经常变动,可以这样操作,防止经常修改主配置,每次修改配置后reload配置即可。
      • url_regex [-i] ^http://url #使用正则表达式---全路径匹配
      • urlpath_regex [-i] .gif$ #正则表达式---部分路径匹配
    [root@www ~]# vim /etc/squid/squid.conf
    # http_access 是有顺序的,因此建议你找到底下这个关键词行后,将你的资料加在后面
    # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
    acl vbirdlan src 192.168.1.0/24 192.168.100.0/24
    acl dropdomain dstdomain .facebook.com
    acl dropsex urlpath_regex /sexy.*jpg$
    http_access deny dropdomain  <==这三行的『顺序』很重要!
    http_access deny dropsex
    http_access allow vbirdlan
    [root@www ~]# /etc/init.d/squid restart
    

    3. 不要进行某些网站的缓存

    [root@www ~]# vim /etc/squid/squid.conf
    acl denyphp urlpath_regex .php$
    cache deny denyphp
    # 在此档案的最后新增这两行即可!
    [root@www ~]# /etc/init.d/squid restart
    

    4. 主机名与管理员的email指定

    指定主机名是防止由于DNS解析问题导致squid无法启动,邮箱是在用户报错的时候提示给用户看的。

    [root@www ~]# vim /etc/squid/squid.conf
    cache_mgr wang_zengyi@126.com  <==管理员的 email 呦!
    visible_hostname www.centos.com  <==直接设定主机名喔!
    [root@www ~]# /etc/init.d/squid restart
    

    三. squid服务器的常用功能

    1. Proxy 服务放在 NAT 服务器上:通透式代理 (Transparent Proxy)

    ## 1. 设定 proxy 成为通透式代理服务器的功能!
    [root@www ~]# vim /etc/squid/squid.conf
    http_port 3128  transparent
    # 找到 3128 这行后,在最后面加上 transparent 即可
    [root@www ~]# /etc/init.d/squid reload
    # 2. 设定防火墙规则
    [root@www ~]# vim /usr/local/virus/iptables/iptables.rule
    iptables -t nat -A PREROUTING -i $INIF -s 192.168.100.0/24 -p tcp 
             --dport 80 -j REDIRECT --to-ports 3128
    # 将上述这一行加在最底下 /etc/init.d/iptables save 的上面一行即可!
    [root@www ~]# /usr/local/virus/iptables/iptables.rule
    

    2. 设置仅代理不缓存的squid

    # 先关闭 squid ,然后删除快取目录,之后再重建快取目录,此时快取目录就空了
    [root@www ~]# /etc/init.d/squid stop
    [root@www ~]# rm -rf /var/spool/squid/*
    [root@www ~]# vim /etc/squid/squid.conf
    cache_dir ufs /var/spool/squid 100 16 256 read-only
    #cache_dir ufs /srv/squid 2000 16 256
    # 额外的那个 /srv/squid 批注掉,然后第一行多个 read-only 字样!
    cache_mem 0 MB
    # 本来规范有 32MB ,现在不要了!
    [root@www ~]# /etc/init.d/squid start
    

    3. 代理的认证功能

    tips:一般直接在用户接入网络的时候使用802.1X,这种认证实际不用,了解即可。

    [root@www ~]# rpm -ql squid | grep ncsa
    /usr/lib64/squid/ncsa_auth    <==有的!就是这个验证模块档案!注意完整路径
    /usr/share/man/man8/ncsa_auth.8.gz
    [root@www ~]# yum install httpd   <==apache 软件安装
    [root@www ~]# rpm -ql httpd | grep htpasswd
    /usr/bin/htpasswd           <==就是需要这个帐密建立指令!
    /usr/share/man/man1/htpasswd.1.gz
    
    # 1. 先修改 squid.conf 档案内容
    [root@www ~]# vim /etc/squid/squid.conf
    # 1.1 先设定验证相关的参数
    auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/squid_user.txt
    auth_param basic children 5
    auth_param basic realm Welcome to VBird's proxy-only web server
    # 非特殊字体为关键词不可更动,第一行为透过 ncsa_auth 读取 squid_user.txt 密码
    # 第二行为启动 5 个程序 (squid 的子程序) 来管理验证的需求;
    # 第三行为验证时,显示给用户看的欢迎讯息,这三行可写在最上面!
    
    # 1.2 然后是针对验证功能放行与否的 acl 与 http_access 设定
    acl vbirdlan src 192.168.100.0/24  <==修改一下,取消 192.168.1.0/24
    acl dropdomain dstdomain "/etc/squid/dropdomain.txt"
    acl dropsex urlpath_regex /sexy.*jpg$
    acl squid_user proxy_auth REQUIRED <==建立一个需验证的 acl 名称
    http_access deny dropdomain
    http_access deny dropsex
    http_access allow vbirdlan
    http_access allow squid_user       <==请注意这样的规则顺序喔!验证在最后
    
    # 2. 建立密码数据
    [root@www ~]# htpasswd -c /etc/squid/squid_user.txt vbird
    New password:
    Re-type new password:
    Adding password for user vbird
    # 第一次建立才需要加上 -c 的参数,否则不需要加上 -c 喔!
    [root@www ~]# cat /etc/squid/squid_user.txt
    vbird:vRC9ie/4E21c.  <==这就是用户与密码啰!
    [root@www ~]# /etc/init.d/squid restart
    
  • 相关阅读:
    代码的完整性:调整数组顺序使奇数位于偶数前面
    《Java编程思想》笔记 第十一章 持有对象
    《Java编程思想》笔记 第十章 内部类
    《Java编程思想》笔记 第九章 接口
    《Java编程思想》笔记 第八章 多态
    《Java编程思想》笔记 第七章 复用类
    《Java编程思想》笔记 第六章 访问权限控制
    《Java编程思想》笔记 第五章 初始化与清理
    Java 的初始化顺序
    《Java编程思想》笔记 第四章 控制执行流程
  • 原文地址:https://www.cnblogs.com/wangzengyi/p/12523425.html
Copyright © 2020-2023  润新知