• Squid代理服务器


    Squid本质上是一种用来缓冲Internet数据 + 服务器代理的软件。

    用来做前置的Web缓存,加快用户访问Web的速度
    代理内网用户访问互联网资源
    设置访问控制策略,控制用户的上网行为
    主要支持http、ftp等应用协议
    代理工作的机制和好处
    缓存网页对象,减少重复请求
    访问速率提高
    隐藏客户机真是ip地址

    Squid服务基础

    当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存!如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机。如果缓存中没有客户机要访问的页面,则由代理服务器向 Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机 总结:利用缓存从而进行代理

    1、代理

    通过第三方软件或机构,实现客户端对指定服务的访问任务

    2、常见的代理软件

    Windows 系统: ccproxy(具有防火墙功能) ISA2006防火墙(有代理功能)
    Linux 系统: squid

    3、web代理的功能

    3-1)将局域网的主机保护起来
    3-2)对网站的内容进行缓存,加快客户端的访问速度,减少网络流量
    3-3)静态页面的站点越来越少,可缓存的内容也变少,数据库中的信息不能被缓存

    4、squid代理的基本类型

    4-1)传统代理:客户端不需要配置网关,只需要设置浏览器的配置,代理服务器对客户端的访问控制能力强 缺点:有部分应用程序无法被代理
    4-2)透明代理:客户端不用配置浏览器,正常配置网络信息,代理服务器对客户端的访问控制能力相对较弱 优点:绝大部分的应用程序都能被代理应用
    4-3)反向代理:外网客户端给代理服务器发送访问请求后,由代理服务器判断将请求转发给哪个web节点, 作用:企业中经常使用squid制作web反向缓存服务。
    4-4)缓存代理:适用于网络带宽比较低的环境,网速慢的环境。节省外网流量,加快客户端访问速度。对于动态网站,如论坛,新闻组,QQ空间类,无法进行缓存。现在的环境中,常用于缓存图片,视频等。企业中经常使用squid制作web反向缓存服务。。。

    5、squid代理的区别

    使用传统代理时,网页浏览器访问网站时的域名解析请求会发给指定的代理服务器
    使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器
    实际应用中,传统代理多见于Internet环境。而透明代理多见于局域网环境。 如:在Liunx网关中启用透明代理后,局域网主机无需进行额外设置就可以享受更好的上网速度。

    搭建squid代理服务器

    +++Apche服务器地址为192.168.6.21,代理服务器地址为192.168.1.200+++

    1.添加双网卡,并配置IP地址

    cd /etc/sysconfig/network-scripts/
    ls
    ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
    ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
    
    cp ifcfg-ens33 ifcfg-ens37
    ls
    ifcfg-ens33  ifdown-post      ifup-eth     ifup-sit
    ifcfg-ens37  ifdown-ppp       ifup-ib      ifup-Team
    ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
    
    ip addr
    ens37:00:0c:29:c0:93:22
    
    第一块网卡:192.168.6.20
    第二块网卡:删掉UUID、修改NAME和DEVICE  192.168.1.200
    HWADDR(HardWareADDRess,硬件地址)
    systemctl restart network
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.启用路由转发

    1>临时启用:
    echo "1" > /proc/sys/net/ipv4/ip_forward	
    或
    sysctl -w net.ipv4.ip_forward=1	                  //重启跟网络相关的服务就会失效
    2>永久启用:
    vim /etc/sysctl.conf
    添加:
    net.ipv4.ip_forward = 1
    
    # 重启加载内核配置参数
    sysctl -p
    
    # 验证:
    cat /proc/sys/net/ipv4/ip_forward      →1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.解压并安装squid软件

    tar -zxvf squid-3.5.23.tar.gz -C /usr/src/
    cd /usr/src/squid-3.5.23/
    [root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc \
    --enable-arp-acl \
    --enable-linux-netfilter \
    --enable-async-io=240 \
    --enable-default-err-language=Simplify_Chinese \
    --disable-poll \
    --enable-epoll \
    --enable-gnuregex
    
    # 参数:
    --prefix=/usr/local/squid			指定安装路径
    --sysconfdir=/etc					指定配置文件路径
    --enable-arp-acl					启用arp控制列表
    --enable-linux-netfilter			启用内核包过滤功能
    --enable-async-io=240				启用设备异步I/O功能
    --enable-default-err-language=Simplify_Chinese		错误日志的默认语言类型
    --disable-poll					    关闭poll布尔运算
    --enable-epoll						启用扩展poll布尔运算
    --enable-gnuregex					支持gnu正则表达式
    
    make  && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.创建用户并优化服务

    useradd -M -s /sbin/nologin squid
    ln -s /usr/local/squid/sbin/* /usr/local/sbin/
    chown -R squid:squid /usr/local/squid/var/
    chmod -R 757 /usr/local/squid/var/
    
    • 1
    • 2
    • 3
    • 4

    5.检查语法并启动

    squid -k parse				//验证语法
    squid -z					//初始化
    squid 						//启动服务
    netstat -anpt | grep squid	//查看服务
    killall -9  squid			//停止squid服务
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6、配置传统代理

    vim /etc/squid.conf
    # 修改:
    加注释:
    http_access allow localnet(52行)	//默认允许本地网段使用(acl可以不注释,但这个必须注释)
    acl localnet src 10.0.0.0/8
    acl localnet src 172.16.0.0/12  
    acl localnet src 192.168.0.0/16	这三个网段访问
    //加注释后就拒绝上三个网段访问
    
    # 添加:(54行)
    acl net1 src 192.168.6.20                             #指定源地址192.168.6.20(代理服务器的第一块网卡)
    acl net2 src 192.168.6.21                             #指定源Apache地址                                                      ---这两个acl根本就不需要,因为没有用到它(net1和net2是列表名称)
    http_access allow all                                    #允许所有ip访问
    
    # 取消注释:
    cache_dir ufs /usr/local/squid/var/cache/squid 100 16 25662行)	
    //启用缓存列表
    #设置缓存目录,启用此目录后,需要进行初始化后才能使用,100表示每次缓存的文件数,16表示创建的缓存目录数,256表示二级缓存目录数
    
    cd /usr/local/squid/var/cache/squid/				//查看本目录还没有缓存文件
    squid -z  										   //初始化   初始化成功后会生成缓存列表
    
    # 重启Squid服务
    [root@localhost ~]# killall -9 squid
    [root@localhost ~]# squid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    7、客户端设置代理(192.168.1.201,网关不必须要有)

    Windows)
    打开IE浏览器:打开“工具”—“Internet选项”。“连接”—“局域网设置”中进行设置:
    IP地址:192.168.1.200 端口:3128
    Linux)
    打开火狐浏览器打开“首选项”—“高级”—“网络”—点击连接中的“设置”—“手动配置代理”——输入Squid代理服务器ip地址 端口:3128

    8、验证:

    客户端client访问WEB服务器http://192.168.6.21/(web服务器地址,访问域名暂时没做出来)

    squid透明代理

    客户端不用设置浏览器的代理选项,正常配置IP地址信息,包括网关DNS【关于客户端的DNS解析工作,最好还是通过正常的DNS服务器来提供,不建议抛给代理服务器来处理】
    1)修改配置文件

    vim /etc/squid.conf
    修改:
    http_port 3128 transparent
    
    killall -9 squid
    squid
    netstat -anpt | grep squid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2)配置防火墙规则

    systemctl start firewalld
    systemctl status firewalld
    
    添加ens33到internal(内)区域
    firewall-cmd --zone=internal --add-interface=ens33
    添加ens37到external(外)区域
    firewall-cmd --zone=external --add-interface=ens37
    
    在external添加服务和端口号
    firewall-cmd --zone=external --add-service=http
    firewall-cmd --zone=external --add-service=https
    firewall-cmd --zone=external --add-port=3128/tcp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用富语言编写目标端口号转换,将80和443转换为3128
    富语言:

    firewalld的富语言(rich language)提供了一种不需要了解iptables语法的通过高级语言配置复杂IPv4和IPv6防火墙规则的机制。为管理员提供了一种表达性语言.通过这种语言可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。例如,仅允许从单个IP地址(而非通过某个区域路由的所有IP地址)连接到服务。
    富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog 和auditd),以及端口转发、伪装和速率限制。

    firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 80 -j REDIRECT --to-ports 3128
    firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 443 -j REDIRECT --to-ports 3128
    
    • 1
    • 2

    验证:
    客户端配置(网关必须要有)

    IPADDR=192.168.1.201
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.200
    firefox 192.168.6.21
    成功!!!             特殊情况:如果你客户机是基于“传统代理”的话,需要将代理服务取消掉!!!
    
    • 1
    • 2
    • 3
    • 4
    • 5

    acl访问控制

    1)使用acl配置项定义需要控制的条件
    acl 列表名称 列表类型 列表内容 …
    2)通过http_access配置项对已定义的列表做“允许”或“拒绝”的控制。
    http_access 访问控制列表
    用它来控制变量是允许通过还是拒绝通过啦。。。
    如:http_access allow haha 允许前面定义的haha(192.168.0.0/24)网段通过
    http_access deny haha 拒绝前面定义的haha(192.168.0.0/24)网段通过

    # 格式:
    acl  列表名称  选项  值
    例:acl haha src "/etc/iplist"
    
    # 选项:
    src				源IP地址
    dst				目标IP地址
    port			目标端口号
    dstdomain		目标域
    time			访问时间
    maxconn			最大连接数
    url_regex		目标URL地址
    Urlpath_regex	整个目标URL地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3)拒绝指定ip和域名访问
    编辑地址列表

    vim /etc/iplist
    192.168.1.202
    192.168.1.203
    
    • 1
    • 2
    • 3

    3-1)编辑域名列表

    vim /etc/dnslist
    .baidu.com
    .sohu.com
    
    • 1
    • 2
    • 3

    4)vim /etc/squid.conf
    添加:

    acl haha src "/etc/iplist"                 #如果文件中是具体的ip,那么必须使用src选项
    acl hehe dstdomain "/etc/dnslist"
    http_access deny haha
    http_access deny hehe
    
    • 1
    • 2
    • 3
    • 4

    5)重启服务:

    killall -9 squid
    squid
    
    • 1
    • 2

    6)客户端验证。即192.168.1.202与192.168.1.203均不能访问httpd服务

    sysctl

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置于显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
    命令格式:

    sysctl (选项) (参数)
    sysctl [-n] [-e] -w variable=value
    sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
    sysctl [-n] [-e] -a
    
    • 1
    • 2
    • 3
    • 4

    常用参数的意义:

    -w   临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1
    -a   显示所有的系统参数
    -p   从指定的文件加载系统参数,若不指定即从/etc/sysctl.conf中加载
    如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:
    
    1) echo 1 > /proc/sys/net/ipv4/ip_forward
    2) sysctl -w net.ipv4.ip_forward=1
    
    以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
    service network restart命令,所设置的值即会丢失。如果想永久保留配置,可以修改/etc/sysctl.conf文件,将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1(没有则添加)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    扩展参数:
    -n:打印值时不打印关键字;
    -e:忽略未知关键字错误;
    -N:仅打印名称;
    -w:当改变sysctl设置时使用此项;
    -p:从sysctl配置文件“/etc/sysctl.conf”加载内核参数设置;
    -a:打印当前所有可用的内核参数变量和值;
    -A:以表格方式打印当前所有可用的内核参数变量和值。
    No pain, no pain, no sweet, alive, this is a kind of practice

  • 相关阅读:
    OpenGL —— 2.8、漫游之摄像机飞行移动(附源码,glfw+glad)
    C++11的一些新特性|线程库|包装器|lambda表达式
    端到端流程总结
    1162地图分析
    2022A特种设备相关管理(电梯)特种作业证考试题库及在线模拟考试
    神经网络十大算法有哪些,神经网络十大算法排名
    Ribbon负载均衡的两种方案
    ES6 Promise的使用详解
    R语言使用scale函数对神经网络的输入数据进行最小最大缩放、把数据缩放到0到1之间、并划分数据集为训练集和测试集
    MySQL MHA信息的收集【Filebeat+logstash+MySQL】
  • 原文地址:https://blog.csdn.net/qq_50573146/article/details/126878931