防火墙的基础知识入门

版权声明:本文为博主原创文章,但部分内容来源自互联网,大家可以随意转载,点赞或留言均可! https://blog.csdn.net/csdn_kou/article/details/82993276

防火墙

防火墙指的是一个由 软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。

基于实现方式,防火墙的发展分为四个阶段:

  • 第一代防火墙:基于路由器的防火墙,由于多数路由器中本身就包含有分组过滤功能,故网络访问控制可通过路由控制来实现,从而使具有分组过滤功能的路由器成为第一代防火墙产品。
  • 第二代防火墙:用户化的防火墙,将过滤功能从路由器中独立出来,并加上审计和告警功能。针对用户需求,提供模块化的软件包,是纯软件产品。
  • 第三代防火墙:建立在通用操作系统上的防火墙,近年来在市场上广泛使用的就是这一代产品。包括分组过滤和代理功能。第三代防火墙有以纯软件实现的,也有以硬件方式实现的。
  • 第四代防火墙:具有安全操作系统的防火墙:具有安全操作系统的防火墙本身就是一个操作系统,因而在安全性上得到提高

Linux 环境中主要的防火墙形式

  • Netfilter 的数据包过滤机制
    • Netfilter 这个机制主要就是分析进入主机的数据包,也就是將包的报头信息提取出来进行分析,以決定该链接是应该放行或阻挡下来。
      由于这种方式可以直接分析数据报头的信息,而报头的信息主要就是 OSI 参考模型中的数据链路层,网络层,以及传输层的信息,如 MAC 地址, IP 地址 , TCP, UDP, ICMP 等的信息都可以进行分析过滤,并且 Netfilter 提供了 iptables 来作为防火墙封包过滤的指令。十分强大
  • TCP Wrappers 的程序管理
    • TCP Wrappers 主要是分析TCP的报头信息,并与/etc/hosts.allow和/etc/hosts.deny中的规则进行匹配,从而决定哪些主机可以访问系统服务或资源。他的功能并没有 Netfilter 那么强大,但是他的配置相对于 Netfilter 的 iptables 要简单许多。
  • Proxy 的代理服务器
    • 其实代理服务器这样的防火墙相对于 Netfilter 是更安全一些,若是外面的人给小姐的物品是有毒的(外面发送有害的数据,或者想获取 server 信息),那也是丫鬟先中毒,小姐很安全呀(代理服务器中招,内网还是安全的)。

但是这是因为所有的链接,所有的数据包都中转过一层,多了一个环境,就需要多消耗一些时间,效率便降低了,高带宽也会到达瓶颈,并且因为通过代理服务器的转发那么便需要修改表头中的信息,地址转换,这样的话对 VPN 的使用也会增加一定的难度。所以相对来说 Netfilter 比 代理服务器式的防火墙应用的更加的广泛

而为什么上文说相较而言,proxy 形式比 Netfilter 要安全些,是因为数据包式的防火墙主要是在网络的七层模型中处理这样的事情:

  • 拒绝让外部网络的数据包进入主机的部分敏感的端口:比如我的 FTP 只是供给公司内部人员使用的,外面的人不能从中获取消息,那么添加规则让所有想访问该端口的请求数据包全部丢弃。

  • 拒绝某些 IP 来源的数据包进入主机:就如我知道有一个 IP 地址属于某个黑客的常用 IP,这个 IP 的请求一定是来攻击我或者对我不利的,便可添加规则将只要是由这个 IP 地址发来的请求数据包全部丢弃

  • 拒绝带有某些特殊标签(flag)的数据包进入:最常见的便是带有 SYN 的主动连接标签了,便可添加规则只有一发现这个标签,就把这个带有该标签的数据包丢掉

  • 拒绝某些 MAC 地址的链接与数据包:如果内网中有人中病毒,或者他是有意捣乱网络的,封 IP 地址他可以更换,那么我们就直接封掉其 MAC 地址,这样即使更换 IP 地址也没有用。
    这样的处理虽然可以阻挡大部分不利的数据,或者说攻击,但是还有许多的问题是无法防范的:

  • 防火墙不能有效的阻挡病毒或者木马程序:

    • 比如内网中的 DMZ 区域有一台 web 服务器,有 web 服务供给外网访问势必我们就需要将80端口开放出去,让外部网络能够请求,否则外部网络得不到数据,该服务器的功能根本无法起作用,而80端口的开放是的外部网络的数据包可以进入主机中,若是web服务有漏洞,数据包中有病毒利用该漏洞做一些事情。
  • 防火墙主要是针对外网的攻击添加规则,所以对于内网的攻击并无太强的招架之力。

    扫描二维码关注公众号,回复: 3566340 查看本文章

TCP wrappers详解 粗解

TCP wrappers 是 Linux 中两大防护措施的其中之一,这层保护通过定义哪些主机允许或不允许连接到网络服务上来实现。

Tcp wrappers的认识

它被设计为一个介于外来服务请求和服务回应的中间处理

它的基本过程是这样的:

当服务器或主机接收到一个外来服务请求的时候,
先由TCP Wrapper 来对请求进行分析处理,TCP Wrapper 会根据请求所需要的服务和对这个服务所设定的规则来判断请求方是否有权限,
如果有,TCP Wrapper 会把这个请求按照配置文件所设定的规则转交给相应的守护进程去处理,同时记录这个请求动作。

TCP Wrappers虽然能对 TCP 协议的报文做过滤动作,
但是并不是所有的 TCP 协议报文 TCP Wrappers 都可以过滤掉。
只有该服务链接到TCP Wrappers的函式库才可以使用TCP Wrappers进行报文过滤。

因为 TCP Wrapper 的功能主要来自于 libwrap.a这个静态库,它是一个服务库。
像 xinetd、sshd 和 portmap 等许多服务编译时都依赖于 libwrap.so 这个动态链接库,其他的网路服务甚至你自己编写的服务都可以加上这个编译选项来提供 TCP Wrapper 的功能。

iptable

这个是Linux内核到了2.4才有的,很复杂,另开一篇文章研究吧

攻击和防御

DDOS 攻击

在计算中,拒绝服务( DOS,denial-of-service )攻击是试图消耗一台机器或网络的资源,例如去暂时或无限期中断甚至去暂停服务的主机连接到互联网,使其无法给予真正需求的用户。拒绝服务通常是通过 flood 攻击有针对性的尝试对目标机器或资源的多余请求,以使得系统过载,并防止一些或所有合法的请求。因为早期的服务器的性能和网络刚发展,性能并不高,所以由一台主机去不断地请求服务,就可以导致服务器应付不过来

后来硬件与网络飞速的发展,一台主机发动再多的请求,服务器也能够从容地应对,既然一台不够,那就成千上万台的来,所以有了分布式拒绝服务(DDoS,distributed denial-of-service)。

一个分布式拒绝服务(DDoS,distributed denial-of-service)攻击源往往不止一个,又往往成千上万个,并且都是真实唯一的IP地址。

它类似于一群人拥挤的堵在一家商店里面,就连门口都是人,而且这些人什么也不干,不买东西,无所事事,而真正需要买东西的人却堵在门口,进不去,这样便扰乱了商店或者企业的正常的运作。DDoS攻击的规模仍在不断增长

常见的可能受到 DDOS 攻击体现的症状有:

  • 网络堵塞,打开网站的速度异常的缓慢,或者平时都能打开,却打不开了
  • 服务器的 CPU 长期处于满负荷
  • 服务器的频繁死机,重启

而常见的 DDOS 攻击有以下几种

  • Ping flood :发送ping包的攻击者压倒性的数量给受害者
  • Ping of Death:攻击者发送修改后的 ping 数据包,如添加分包使前后的逻辑不正确,或者加长数据包使其超过 IP 报文的限制
  • Teardrop attacks:向目标机器发送损坏的IP包,诸如重叠的包或过大的包载荷。
  • UDP flood:利用大量UDP小包冲击服务器
  • SYN flood:利用 TCP 的连接过程,来消耗系统资源。
  • CC(challenge Collapsar):通过构造有针对性的、对最为消耗服务器端资源的业务请求,让服务器“劳累过度”而停止服务等等

SYN 攻击

据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。在2000年时 YAHOO 的网站遭受的攻击,就是黑客利用的就是简单而有效的 SYN 攻击,而 SYN 攻击依靠的就是 TCP 三次握手

TCP( Transmission Control Protocol 传输控制协议)是一个 Internet 协议套件的核心协议。它起源于最初的网络实现,它补充了互联网协议(IP,网络层的 IP 协议,IPv4、IPv6)。因此,整个套件通常被称为 TCP/IP。TCP 提供可靠的,有序的,和错误检查流在 IP 网络上的主机通信的运行的应用程序之间传递数据。

TCP是面向连接的,可靠的进程通信的协议,提供全双工服务,即数据可在同一时间双向传输,也正是因为 TCP 的可靠连接,所以广泛应用在大多数的应用层协议,而 TCP 在建立一个连接,需要客户端与服务器端发送3个数据包,这个过程叫 Three-way Handshake(三次握手)。

在这之前,服务器必须先绑定到一个端口并监听一个端口,以打开它的连接:这被称为被动打开。一旦被动打开,客户端可以启动一个主动打开,建立连接

1.由客户端使用一个随机的端口号,向服务器端特定的端口号发送 SYN 建立连接的请求,并将 TCP 的SYN 控制位置为1。SYN(synchronous)是TCP/IP建立连接时使用的握手信号,客户端将该段的序列号设置为一个随机值。
2.服务器端收到了客户端的请求,会向客户端发送一个确认的信息,表示已收到请求,这是的数据包里会将 ACK 设置为客户端请求序列号+1,同时服务器端还会向客户端发送一个 SYN 建立连接的请求,SYN 的序列号为另外一个随机的值
3.客户端在收到了服务器端的确认型号以及请求信号之后,也会向服务器端发送一个确认信号,确认信号的序列号为服务器端发送来的请求序列号+1。在这一点上,客户端和服务器都已收到了连接的确认。步骤1,2建立一个方向的连接参数(序列号),它是公认的。步骤2、3建立了另一个方向的连接参数(序列号),并被确认。有了这些,便建立了一个全双工通信。

SYN flood(SYN 洪水攻击)

这样是一次完整的 TCP 连接过程,而若是我的客户端发送了 SYN 的请求连接的信号,然后服务器从关闭变成监听状态,然后响应了我的请求,发送来了确认信息以及他的请求信号,并将该信息加入未连接的队列中,变成SYN_RCVD的状态若是客户端若是不处理,不给予响应,那么服务器便会一直的等待,只有等待超过了一定的时间,才会将此信息从队列中移除,而当有很多这样的事情发生时是非常耗费资源的。这是整个服务器建立连接时 TCP 状态的变化过程:

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/82993276