squid代理服务器

1:Squid是什么

Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据立即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。

2:squid代理的作用

3:squid各种代理的定义 

(1)正向代理

标准的代理缓冲服务器

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

(2)反向代理

反向代理缓冲服务器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

4:Squid主要组成部分

  • 服务名
  • 主程序
  • 配置目录
  • 主配文件
  • 监听tcp端口号:3128
  • 访问日志文件

5:squid 常用配置选项

配置项

描述

http_port

监听端口

http_port 192.168.0.1:3128

监听端口还可以只监听一个指定的ip

maximum_object_size

最大缓存块

maximum_object_size 4096KB

缓存对象的最大大小为4096KB

reply_body_max_size

限定下载文件大小

reply_body_max_size 1024000 allow all

允许下载的文件最大为1024000字节(约1MB),对所有用户生效

access_log

访问日志存放的文件

access_log /var/log/squid/access.log

访问日志存放在/var/log/squid/access.log

visible_hostname

可见的主机名

visible_hostname proxy.test.com

对外显示的主机名为proxy.test.com

cache_dir

缓存目录配置

cache_dir ufs /var/spool/squid 100 16 256

ufs:缓存数据的存储格式;/var/spool/squid:缓存目录;100:缓存目录占磁盘空间大小(M);16:缓存空间一级子目录个数;256:缓存空间二级子目录个数

6:squid中的访问控制

使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。

下面列出一些重要的 ACL 元素类型

7:squid代理ACL规则

为了使用控制功能,必须先设置 ACL 规则并应用。ACL 声明的格式如下:

acl acl_element_name type_of_acl_element values_to_acl

注意:

字段名称

描述

src

源地址(即发起请求的客户端IP地址)

dst

目标地址(即请求被发送到的服务器IP地址)

srcdomain

源名称(尝试解析或记录的客户端名称,可能通过反向DNS解析或其他方式获得)

dstdomain

目标名称(尝试解析或记录的服务器名称,同样可能通过反向DNS解析或其他方式获得)

time

请求发生的时间,通常包括一天中的具体时刻(如小时和分钟)以及一周内的一天(如星期几)

url_regex

用于匹配URL的规则表达式。这可以用于过滤、记录或重定向符合特定模式的请求

urlpath_regex

用于匹配URL路径(略去协议和主机名部分)的规则表达式。这可以更加精确地控制对特定路径的请求的处理

proxy_auth

指示是否通过外部程序进行用户验证。这通常涉及到代理服务器配置为要求用户通过某种形式的认证(如基本认证、摘要认证等)才能访问网络资源

maxconn

单一IP的最大连接数。这是一个配置参数,用于限制来自单个IP地址的并发连接数,以防止资源滥用或DoS攻击

    

8:访问权限

访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。

  注意: 

  (1)这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。

  (2)一个访问列表可以有多条规则组成。

  (3)如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。

  (4)一个访问条目中的所有元素将用逻辑与运算连接:

  1.    http_access Action 声明1 AND 声明2 AND 声明 OR.
  2.    http_access Action 声明3
  3.    多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。

(5)列表中的规则总是遵循由上而下的顺序。

实验部分

实验一:squid安装

1:设置各个设备的ip地址

2:将squid拷贝到linux中

[root@localhost ~]# yum -y install gcc*
[root@localhost ~]# tar zxvf squid-3.5.23.tar.gz
[root@localhost ~]# cd squid-3.5.23

3:配置安装参数(时间较长) 

[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-gnuregex

 4:编译并安装

[root@s2 squid-3.5.23]#make && make install
[root@s2 squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@s2 squid-3.5.23]# useradd -M -s /sbin/nologin squid        ##M:不建立宿主目录
[root@s2 squid-3.5.23]# chown -R squid:squid /usr/local/squid/var/

5:编辑配置文件 

[root@localhost ~]# vim /etc/squid.conf
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256        ##去掉注释符
cache_effective_user squid     ##指定squid程序的用户(可以添加在末尾)
cache_effective_group squid     ##指定squid账号的基本组(可以添加在末尾)

5:检查配置结果 

[root@localhost ~]# squid -k parse       ##检查配置文件的语法是否正确
[root@localhost ~]# squid -z           ##初始化缓存目录
[root@localhost ~]# squid              ##启动squid服务
[root@localhost ~]#squid –k reconfigure   ##重新加载,相当于reload
[root@localhost ~]# netstat -anpt | grep "squid"
[root@localhost ~]# yum -y install psmisc
[root@localhost ~]# killall squid

实验二:传统代理的设置 

1.实验环境

设备名称

操作系统版本

IP地址

所需软件

设备A

CentOS 7.6

192.168.10.101

squid-3.5.23

设备B

CentOS7.6

192.168.10.102

设备C

win10

192.168.10.50

httpd

2:在防火墙上添加允许策略

[root@localhost ~]# firewall-cmd --add-service=http --permanent
[root@localhost ~]# firewall-cmd --add-port=3128/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

3:设置客户端

4:squid上查看日志

[root@localhost ~]# tail /usr/local/squid/var/logs/access.log

实验三:透明代理

设备名称

系统版本

桥接接口

IP地址

所需软件

测试客户机

win10

桥接nat

192.168.10.50

Squid代理服务器

CentOS7.9

ens33桥接nat

ens36桥接vm1

ens33=192.168.10.101

ens36= 172.16.16.172

squid-3.5.23

测试网站

CentOS7.9

桥接vm1

ens33= 172.16.16.172

1:为squid服务器添加一个网卡

设置ens36的ip地址为172.16.16.1,

修改客户端的网关地址:192.168.10.101

将web服务器和squid的ens36桥接到vm1

2:修改配置文件以支持透明代理

[root@localhost ~]# vi /etc/squid.conf

找到http_port 3128这一行,

将其修改为http_port 192.168.10.101:3128 transparent

注意:

ip地址为内网网卡的ip

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

3:设置iptables重定向策略

(1)删除原有策略
firewall-cmd --remove-service=http --permanent
firewall-cmd --remove-port=3128/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=external --change-interface=ens36
firewall-cmd --zone=internal --change-interface=ens33
firewall-cmd --zone=internal --add-service=http
firewall-cmd --zone=internal --add-port=3128/tcp
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 80 -j REDIRECT --to-ports 3128
firewall-cmd --runtime-to-permanent        

##永久保存防火墙参数

4:客户端设置

以windows客户端为例

验证透明代理,将代理服务器的钩去掉,并保存设置,设置其网关为squid的ens33的ip地址,然后访问web服务

无法访问重启squid服务在试

[root@localhost ~]# tail /usr/local/squid/var/logs/access.log

注释:

cache_dir:缓存文件放置位置,ufs是文件系统类型,100指定缓存目录大小,单位是M, 16 指缓存空间一级子目录个数, 256 指缓存空间的二级子目录个数

ACL访问控制

1:查看acl

[root@localhost ~]# vi /etc/squid.conf
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16  # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http

 2:源ip为控制条件

[root@localhost ~]# vi /etc/squid.conf
修改acl localnet src 192.168.0.0/16  # RFC1918 possible internal network
为  acl aaa src 192.168.0.0/16  # RFC1918 possible internal network
在acl列的末尾添加
http_access deny aaa
http_access allow all
[root@localhost ~]#service squid reload

客户端访问测试

3:设置文件下载限制

[root@localhost ~]# vi /etc/squid.conf
添加
reply_body_max_size 10 MB     ##下载文件的大小限制

重启squid服务并用客户端进行下载测试

4:黑名单文件作为控制条件

[root@localhost ~]# vi /etc/squid.conf
修改
acl localnet src 192.168.0.0/16  # RFC1918 possible internal network
为
acl MYLAN src 192.168.0.0/16  # RFC1918 possible internal network
针对目标ip建立黑名单
[root@localhost ~]# mkdir /etc/squid
[root@localhost ~]# cd /etc/squid
[root@localhost squid]# vi ipblock.list
添加172.16.16.172     ##web服务器的IP
[root@s2 squid]# vi dmblock.list
添加 qq.com
[root@s2 ~]# vi /etc/squid.conf
添加(在acl列表的末尾,放在http_access allow前面
acl IPBLOCK dst "/etc/squid/ipblock.list"
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
http_access deny MYLAN IPBLOCK      ##拒绝MYLAN的主机访问IPBLOCK的主机
http_access deny MYLAN DMBLOCK
[root@localhost ~]#service squid reload

 

 

 

 

 

 

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值