防火墙指的是一个由 软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。
但是这是因为所有的链接,所有的数据包都中转过一层,多了一个环境,就需要多消耗一些时间,效率便降低了,高带宽也会到达瓶颈,并且因为通过代理服务器的转发那么便需要修改表头中的信息,地址转换,这样的话对 VPN 的使用也会增加一定的难度。所以相对来说 Netfilter 比 代理服务器式的防火墙应用的更加的广泛
而为什么上文说相较而言,proxy 形式比 Netfilter 要安全些,是因为数据包式的防火墙主要是在网络的七层模型中处理这样的事情:
拒绝让外部网络的数据包进入主机的部分敏感的端口:比如我的 FTP 只是供给公司内部人员使用的,外面的人不能从中获取消息,那么添加规则让所有想访问该端口的请求数据包全部丢弃。
拒绝某些 IP 来源的数据包进入主机:就如我知道有一个 IP 地址属于某个黑客的常用 IP,这个 IP 的请求一定是来攻击我或者对我不利的,便可添加规则将只要是由这个 IP 地址发来的请求数据包全部丢弃
拒绝带有某些特殊标签(flag)的数据包进入:最常见的便是带有 SYN 的主动连接标签了,便可添加规则只有一发现这个标签,就把这个带有该标签的数据包丢掉
拒绝某些 MAC 地址的链接与数据包:如果内网中有人中病毒,或者他是有意捣乱网络的,封 IP 地址他可以更换,那么我们就直接封掉其 MAC 地址,这样即使更换 IP 地址也没有用。
这样的处理虽然可以阻挡大部分不利的数据,或者说攻击,但是还有许多的问题是无法防范的:
防火墙不能有效的阻挡病毒或者木马程序:
防火墙主要是针对外网的攻击添加规则,所以对于内网的攻击并无太强的招架之力。
TCP wrappers 是 Linux 中两大防护措施的其中之一,这层保护通过定义哪些主机允许或不允许连接到网络服务上来实现。
它被设计为一个介于外来服务请求和服务回应的中间处理
当服务器或主机接收到一个外来服务请求的时候,
先由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 的功能。
这个是Linux内核到了2.4才有的,很复杂,另开一篇文章研究吧
在计算中,拒绝服务( DOS,denial-of-service )攻击是试图消耗一台机器或网络的资源,例如去暂时或无限期中断甚至去暂停服务的主机连接到互联网,使其无法给予真正需求的用户。拒绝服务通常是通过 flood 攻击有针对性的尝试对目标机器或资源的多余请求,以使得系统过载,并防止一些或所有合法的请求。因为早期的服务器的性能和网络刚发展,性能并不高,所以由一台主机去不断地请求服务,就可以导致服务器应付不过来
后来硬件与网络飞速的发展,一台主机发动再多的请求,服务器也能够从容地应对,既然一台不够,那就成千上万台的来,所以有了分布式拒绝服务(DDoS,distributed denial-of-service)。
一个分布式拒绝服务(DDoS,distributed denial-of-service)攻击源往往不止一个,又往往成千上万个,并且都是真实唯一的IP地址。
它类似于一群人拥挤的堵在一家商店里面,就连门口都是人,而且这些人什么也不干,不买东西,无所事事,而真正需要买东西的人却堵在门口,进不去,这样便扰乱了商店或者企业的正常的运作。DDoS攻击的规模仍在不断增长
据统计,在所有黑客攻击事件中,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建立了另一个方向的连接参数(序列号),并被确认。有了这些,便建立了一个全双工通信。
这样是一次完整的 TCP 连接过程,而若是我的客户端发送了 SYN 的请求连接的信号,然后服务器从关闭变成监听状态,然后响应了我的请求,发送来了确认信息以及他的请求信号,并将该信息加入未连接的队列中,变成SYN_RCVD的状态若是客户端若是不处理,不给予响应,那么服务器便会一直的等待,只有等待超过了一定的时间,才会将此信息从队列中移除,而当有很多这样的事情发生时是非常耗费资源的。这是整个服务器建立连接时 TCP 状态的变化过程: