防火墙概念
防火墙是一台或一组设备,用以在网络间实施访问控制策略。无状态防火墙(不维护状态的防火墙,stateless firewall)通常仅仅在OSI模型的IP层中执行一些数据包过滤,尽管有时这种类型的防火墙也会涉及更高层的协议。
状态防火墙会对看到的一个会话中之前的数据包进行追综,并基于此连接中已经看到的内容对数据包应用访问策略。
TCP/IP参考模型中的防火墙位置
输入和输出流程图
默认的数据包过滤策略
实现一个默认的防火墙策略有两种方法
- 默认拒绝所有消息,明确地允许选定的数据包通过防火墙
- 默认授受所有消息,明确地拒绝选定的数据包通过防火墙
推荐的方法是默认拒绝所有消息的策略。
默认拒绝所有消息的策略
默认拒绝所有消息的策略 默认接受所有消息的策略
对一个数据包的驳回与拒绝
静静地丢掉数据包通常是更好的选择,共有三个原因。第一,发送一个错误回应会增加网络流量。大多数被丢弃的数据包被丢弃是因为它们是恶意的,并不是因为它们中是无辜地尝试访问您碰巧不能提供的服务。第二,一个您响应了的数据包可能被用于拒绝服务攻击。第三任何回应,甚至是错误消息,都会给潜在的攻击者可能有用的信息。
过滤传入的数据包
基于源地址、目的地址、源端口、目的端口、TCP状态标志以及其他标准进行过滤。
远程地址过滤
源地址欺骗和非法地址
有几个种类的源地址,不论任何情况,都要在外部接口中拒绝它们。
- 你的IP地址:永远不会看到合法的传入数据声称它们来自于您的计算机。
- 你的局域网地址:很少会看到合法的注入包声称来自您的局域网,但却在外部的互联网接口上被接收。
- A、B、C类地址中的私有IP地址:在历史上的A、B、C类地址中,这三咱类型的地址是为私有局域网而保留的。
- D类组播IP地址:在D类地址范围中的IP地址被预留作为参加到组播网络广大播目的地址,例如音频广播或视频广播。
- E类的保留IP地址:E类IP地址用来未来或实验性使用,它们并没有被公开地分配。范围是224.0.0.0到239.225.225.225
- 回环接口地址:回接口是一个么有网络接口,Linux系统将其用于本地的、基于网络的服务。操作系统在回环接口上为了性能的提升而走了捷径,它并未通过网络接口驱动发送本地流量。
- 畸形的广播地址:广播地址是一类面向网络中所有主机的特殊的IP地址。
- A类网络的0地址:像前面建议所说的那样,任何从0.0.0.0~0.255.255.255源地址都是非法的单播地址。
- 链路本地网络地址:DHCP客户端有时候在无法从服务器得到地址时,会为它们自身分配一个链路本地址。这些地址的范围是169.254.0.0.到169.254.255.255.
- 运营商级NAT:这些IP地址被标记为由互联网提供商使用并且应该永远不会出现在公共网络互联网里。
- 测试网络地址:从192.0.2.0~192.0.2.255之间的地址空间被预留以测试网络。
拒绝服务攻击
Dos攻击的基本思想:用数据包淹没您的系统,以打扰或严重地使用您的互联网连接降级,捆绑本地服务以导致合法的请求不能被响应,或更严重地,使用您的系统一起崩溃。两个最常见的结果便是使系统过于忙碌而不能执行任何有用的业务并且占尽关键系统资源。不能完全地保护自己免受DOS攻击。它们能使用攻击者能想到的各种形式。任何会导致您系统进行响应、任何导致您的系统分配资源(包括在日志中记录攻击)、任何诱使一个远程站点停止与您通信的方法都能够在DOS攻击中使用。
通常包含多种攻击类型
TCP SYN泛洪(SYN Flood)、ping泛洪(ping flood)、UDP泛洪(UDP-Ploop)、分片炸弹(fragmentation bombs)、缓冲区溢出(buffer overflow)和ICMP路由重定向炸弹(ICMP routing redirect bomb)。
TCP SYN泛洪攻击
会消耗您的系统资源直到无法接收更多的TCP连接。这种攻击利用连接建立过程中基本的三次握手协义,并结合IP源地址欺骗。
攻击者将自己的源地址伪装为一个私有地址并向您基于TCP的服务发起一个连接请求,看上去像一个客户端尝试开始一个TCP连接,攻击者会向您发送一个人为生成的SYN消息。您的计算机会回一个SYN-ACP作为一个响应,然而,在这种情况下,您应答发往的地方并不是攻击者的IP地址,事实上,由于该地址是私有的,并没有人会进行响应,伪装的主机不会返回一条RST消息以拆除这个半打开的连接。TCP
连接建立过程中最后一个阶段,接收一个ACK回应,永远不会发生。因此有限的网络连接资源被消耗了,连接一直保持半打开的状态,直到连接尝试超时。攻击者用一次又一次的连接请求了您的端口,连接请求的到来比TCP超时释放资源更快。
Linux有一些急救方法可用。第一个便是之前介绍的源地址过滤。它会过滤掉最常用于欺骗的源地址,但不能保证可以过滤在合法分类中的伪造的地址。
第二个便是启用内核的SYN cookie模块,它能显著地延缓由SYN泛洪造成的资源短缺。
当队列被填满时,系统开始使用SYN cookies而非SYN-ACK来应答SYN请求,它会释放队列中的空间。因此,队列永远不会完全被填满。cookie的超时时间很短暂;客户端必须在很短的时间内进行应答,接下来服务器才会使用客户端期的SYN-ACK进行响应,cookie是一个基于SYN中的原始序列号、源地址、目的地址、端口号、密值而产生的序列号。如果对此cookie的响应与哈希算法的结果相匹配,服务器便可以合理地确信这个SYN是合法的。
打开内核中的SYN cookie保护功能
[root@localhost ~]# ls /proc/sys/net/ipv4/tcp_syncookies -l -rw-r--r--. 1 root root 0 4月 28 17:03 /proc/sys/net/ipv4/tcp_syncookies [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
ping泛洪
通过ping发送的ICMP的echo请求消息也是一个常见的元凶,一种蓝精灵的攻击和和它的变种会强制系统消耗资源在echo应答上,完成此任务的一种方法是将源地址伪装成受害者的源地址并向整个主机所在的网络广播echo请求,一条欺骗性的请求消息能够造成数据百或数千计的响应被发送到受害者处,另一种达成相似结果的方法是在互联网上被盗用的主机里安装木马程序,并定时同时向一台主机发送echo请求,最后攻击者发送更多简单的ping泛洪来淹没数据连接是DOS攻击的另一种方式。
死亡之ping
发送非常大的ping 数据包,易受攻击的系统可以因此崩溃。Linux中没有此漏洞。
UDP泛洪
UDP协议格外适合用DOS攻击,不同于TCP,UDP是无状态的,由于没流控制的机制,它不存在连接的状态标志。数据报序号也没有。没有任何信息被维护以指明下一个期到来的数据包,并不总是有方法根据端口号将服务器流量和客户端的流量区分开来,由于不存在状态也没有方法把期望到来的响应和出乎意料的来路不明的数据区分开来,很容易使系统忙于对传入的UDP探测进行响应,以致没有带宽留给正当的网络流量。
分片炸弹
不同的基础网技术(例如以太网,异步传输式[ATM]和令牌环)定义了第二层数据帧不同的大小限制,在数据包从一个路由器沿路径(从源计算机到目的计算机)到下个路由器时,网关路由器可能需要将它们传递到下一个网络之前将数据包分切为更小的片段,称为分片。在合理的分片会包含UDP或TCP报头中通常的源端口和目的端口号。
例如尽管最大理想的理论数据包长度是65535字节,而以太网最大帧长度(Maxmum Transmission unit,MTU)为1500字节。当数据分片时,中间的路由器不会重组数据包。而数据会被目的主机或邻近的路由器重新组装。
由于中间进行的分片基本上比发送更小,无需要分片的数据代价更高,目前的系统通常会在向目的主机发起连接前进行MTU发现。 这是通过发送在IP报文选项域设置了不分片(Don't Fragment)标志(当前通常唯一的合法使用的IP选项域)实现的,如果中间路由器必须对数据包进行分片,它会丢数据包返回ICMP 3错误消息,即需要分片。
一种分片攻击涉及人为构造的非常小的数据,一外字节的数据会导致一些操作系统的崩溃。当今的操作系统通常会对该情况进行测试。
另一个对小分片的使用是构造最初的分片,使得UDP或TCP的源端口和目的端口都包含在第二个分片中。(所有网络的MTU大小都足够传递标准的40字节IP和传层报头。)数据包过滤防火墙通常会允许这些分片通过,因为它们过滤所基于的信息还未呈现。这种攻击很有用,它可以使用数据包穿过本不被允许穿过的防火墙。
之前提到的死亡之ping例是利用分片携带非法的超大ICMP消息的例子,当ping请求被重构时,整个数据包的大小超过65535字节,因此导致一些系统崩溃。
缓存区溢出
缓存区溢出攻击无法通过过滤防火墙进行保护。这种攻击主要分两类。第一类简单地通过覆盖其数据空间或运行时堆栈导致系统或服务崩溃。第一类则需要专业技术以及对硬件、系统软件或被攻击的软件版本的了解。溢出的目的是为了覆盖程序的运行时堆栈,因此调用的返回堆栈会包含一个程序,并且会跳转到那里。这个程序通常以root权限启动一人shell。
ICMP定时炸弹
ICMP重定消息类型5会告知目标系统改变内存中的路由表以获得更短的路由。重定向由路由器发送到它的邻居主机。它们的目的是通知主机有更短的路径可用(即主机和新 的路由器在同一个网络中,并且原来的路由器会路由数据到新的路由器的下一跳)。重定向几乎每天都会到来。它们很少发源于附近的路由器。对于连接到一个ISP的住宅或商用站点来说,您附近的路由器产生一个重定向消息的可能性非常小。如果您的主机使用静态路由,并且收到了重定向消息,这可能是有人在愚弄您的系统,以让它认为一个远程主机是您本地计算机或您的ISP的计算机,甚至欺骗您的系统以转发所有的流量到另一台主机处。
拒绝服务攻击和其他系统资源
网络连通性并不是DOS攻击唯一考虑的。这里有一些配置您的系统时应当牢记的其他领域的例子
- 如果你的系统强制写大量的消息到错误日志或被许多很大的邮件消息淹没,那么您的文件系统可能会溢出。你也许想要配置资源限制并为快速增长设置独立的分区或改变文件系统。
- 系统内存、进程表槽、CPU周期以及其他资源可以被重复、快速的网络服务调用消耗殆尽。除了为每个独立的服务设置限制,您对此能做的实在有限:启用SYS cookies,丢弃而不是驳回那些发往不被支持的服务端口的数据包。