介绍
使用防火墙是关于做出明智的政策决策,就像学习语法一样。 防火墙如iptables
旨在通过解释管理员设置的规则来执行政策。然而,作为管理员,您需要知道哪些类型的规则对您的基础设施有意义。
虽然其他指 侧重于起起跑所需的命令,在本指 中,我们将讨论您在实施防火墙时必须做出的一些决定. 这些选择将影响您的防火墙的行为方式, 如何锁定您的服务器, 以及如何应对所发生的各种情况 。 我们将以`表格 ' 为具体例子,但大多数概念将广泛适用.
决定默认政策
在构建防火墙时,最重要的决定之一是默认策略,这决定了当流量不符合任何其他规则时会发生什么。
Default Drop 与 Default 接受
默认的接受
策略意味着任何不匹配的流量都被允许进入服务器,这通常不建议,因为这意味着您需要从那里回头工作,阻止所有不需要的流量。
另一种办法是默认的`DROP'政策。 这意味着任何没有明确规则与之相匹配的流量将不被允许. 每项服务都必须明确允许,这似乎是大量前置配置。 然而,这意味着您的政策倾向于安全,并且您确切知道您服务器上允许的流量。 另外,几乎所有预设的政策都将遵循这个方法,也就是说,你可以在现有默认的基础上更进一步.
Default Drop 政策 vs 最终下降规则
使用iptables
和其他类似的防火墙,可以使用防火墙的内置策略功能设置默认策略,或通过在规则列表的末尾添加一项捕捉所有 drop 规则来实现。
这两种方法的区别在于,如果消防墙规则被清除,会发生什么。
如果您的防火墙的内置策略功能设置为),或者如果某些匹配规则被删除,您的服务将立即远程无法访问。
这种方法的缺点是,您的服务将完全不可用于您的客户端,直到您重新建立允许的规则. 如果您没有本地或基于Web的远程访问作为替代方案,您甚至可能将自己锁定出服务器。
使用内置策略功能设置 drop 策略的替代方案是将防火墙的默认策略设置为ACCEPT
,然后使用常规规执行DROP
策略。
在这种情况下,如果您的防火墙规则被清除,您的服务将是可访问但不受保护的. 根据您的本地或替代访问选项,这可能是一个必要的邪恶,以确保如果规则被清除,您可以重新进入您的服务器。
Dropping vs 拒绝流量
有几种不同的方法来阻止一个包到达其预期目的地. 这些之间的选择会影响客户端如何感知其连接尝试,以及他们能够确定他们的请求不会得到响应的速度。
可以拒绝包裹的第一种方式是使用)不会收到其包裹的接收确认。
对于TCP连接尝试(如由网页浏览器进行的连接),连接会被延后到超时被达到. 对UDP客户缺乏回应更加模糊. 事实上,不接收UDP包背面往往表明包被接受. 如果UDP客户端关心其包的收受,它就必须重新发送来试图确定它们是否被接受,在中途丢失,或被丢弃. 这可以增加恶意角色为了获得关于您服务器端口状态的信息而必须花去的时间,但也可能造成合法流量出问题.
减少流量的一个替代办法是明确拒绝你不允许的包. ICMP,即"互联网控制消息协议"(Internet Control Message Protocol),是整个互联网中用于在主机之间发送状态,诊断,和错误消息的元protocol,作为不依赖TCP或UDP等常规通信协议的外带通道. 当使用REJECT ' 目标而不是
DROP ' 目标时,交通量被拒绝,将一个ICMP包还给发送方,以告知其交通量已经收到,但不会被接受。 身份信息也可以包含,以提供理由.
假设 ICMP 流量被允许到达客户端,他们将立即被告知他们的流量被阻止. 对于合法的客户端,这意味着他们可以联系管理员或检查他们的连接选项,以确保他们正在到达正确的端口。
在决定是否放弃或拒绝流量时,有很多事情要考虑。 一个重要的考虑是,大多数恶意流量实际上是由自动脚本进行的。 由于这些脚本通常不受监督,放弃非法流量不会有意义地阻止他们,并对合法用户产生负面影响。 有关此事的更多信息可以找到(Peter Benie的网站)(http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject)。
Drop vs 拒绝响应表
下表显示了受防火墙保护的服务器将如何响应不同的请求,取决于该策略如何应用于目标端口。
- 客户包类型 ** NMAP 命令 港口政策 ** 回应** 引出港口国 ** -?),又作相克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克. TCP QQnmap [-sT QQ124;-sS] - Pn < server > QQ 接受 TCP SYN/ACK QQ 打开. TCP QQnmap [-sT QX124;-sS] - Pn < server > QQ 弃放(无)QQ 过滤出QQ TCP QQnmap [-sT QX124;-sS] - Pn < server > 拒绝 TCP RESET QX 关闭 QX UDP QQ Nmap - sU - Pn < server > 接受 QQ (无) 打开或过滤 QQ UDP \ nmap - sU - Pn < server > ============================================================================================================================================================================================================================================ UDP QQnmap - sU - Pn < server > 拒绝 ICMP 港口无法到达 QQ 关闭 QQ
第一个列表明客户端发送的包类型。第二个列包含可用于测试每个场景的nmap
命令。第三个列表明将应用于端口的端口策略。第四个列表是服务器将发送回的响应,第五列表明客户端可以根据接收的响应对端口进行推断。
ICMP 政策
与决定是否放弃或拒绝被拒绝的流量一样,您有选择接受或拒绝为您的服务器设计的ICMP包。
ICMP是一个用于许多事情的协议,正如上面所提到的,它经常被发送回来,以提供使用其他协议的请求的状态信息。其最流行的功能之一是发送和响应网络 ping,以验证连接到远程主机。
ICMP 包按类型
组织,然后再按代码
组织。一个类型指定了消息的通用含义。例如,类型 3 意味着目的地是不可及的。一个代码通常用于提供有关类型的进一步信息。
<$>[注]一些ICMP类型被贬值,因此可以无条件地阻止它们。其中包括ICMP源关闭(4型代码0)和替代主机(6型)。
类型取决于网络配置
某些 ICMP 类型在某些网络配置中是有用的,但在其他配置中应该被阻止。
例如,ICMP重定向消息(5型)可以用来揭示坏的网络设计。ICMP重定向是在客户端直接可用的更好的路径时发送的。所以,如果路由器接收一个必须向同一网络上的另一个主机路由的包,它会发送一个ICMP重定向消息,告诉客户端将来通过其他主机发送包。
如果您信任本地网络,并希望在初始配置过程中发现路由表中的效率不佳,则这很有用. 在不受信任的网络中,恶意用户可能会发送 ICMP 重定向来操纵主机上的路由表。
其他 ICMP 类型在某些网络中是有用的,在其他网络中有潜在的有害是 ICMP 路由器广告(9 类型)和路由器请求包(10 类型)。
在大多数情况下,一个主机最好为其将使用的网关配置静态路线. 在与《国际CMP》重新定位数据包相同的情况下,应当接受这些数据包。 事实上,由于主机不会知道任何已发现线路的首选交通路线,因此在发现后往往会直接需要重定向消息. 如果您没有运行发送路由器招标包或根据广告包修改路线的服务(如 ), 您可以安全地封锁这些包 .
通常安全允许的类型
ICMP类型通常是安全的允许在下面,但如果你想特别小心,你可能想禁用它们。
- 第8类——回声请求: 这些是针对您的服务器的呼叫请求 。 通常允许这些是安全的(拒绝这些软件包并不隐藏您的服务器,因为用户有很多其他方法可以发现您的主机是否升起),但如果您愿意,您可以屏蔽它们或者限制您回复的源地址.
- 13型——时间戳请求: 这些包可以被客户用来收集耐久信息. 它们可以被用在一些OS指纹技术中,这样就可以封住它们或者限制你响应的地址范围. .
下面的类型通常可以被允许没有明确的规则,通过配置您的防火墙,以允许响应所提出的请求(使用)。
- 0型——回声回答: 这些是对回声请求(平话)的回应.
- 第3类——目标 无法到达 : 合法目标不可到达包是对您服务器创建的请求的响应, 显示包无法发送 。
- 第11类——超时: 如果您服务器生成的包因超过 TTL 值而未到达目的地而死亡, 则返回此为诊断错误 。
- 第12类——参数问题: 这意味着您服务器的外出包是错的 。
- 类型 14——时间戳回应: 这些是您服务器生成的时间戳查询的答复 。 .
一些安全专家仍然建议阻止所有接入的ICMP流量,但许多人现在鼓励智能ICMP接受政策。(http://security.stackexchange.com/questions/22711/is-it-a-bad-idea-for-a-firewall-to-block-icmp/22713# 22713)两个Stackexchange [threads](http://serverfault.com/questions/84963/why-not-block-icmp/84981 84981)有更多的信息。
连接限制和率限制
对于某些服务和流量模式,您可能只希望允许访问,只要客户端不滥用该访问. 限制资源使用的两种方法是连接限制和率限制。
连接限制
连接限制可以使用诸如connlimit
等扩展来执行,以检查客户端打开了多少活跃连接。
- 您是否在地址、网络或全球范围内限制流量? * 您是否对特定服务或整个服务器的流量进行匹配和限制?
连接可以基于每个主机进行限制,也可以通过提供网络前缀(例如整个组织的 IP 地址范围)为网络部分设置限制,也可以为服务或整个机器设置全球最大连接数。
价格限制
Rate limiting 允许您构建规则,以管理您的服务器接受流量的速度或频率. 有许多不同的防火墙扩展,可以用来限制速率,包括限制
,限制
和最近
。
)来阻止重复的连接尝试。
hashlimit
扩展更灵活,允许您指定一些值,即iptables
将哈希来评估匹配.例如,它可以查看源地址,源端口,目的地地址,目的地端口,或四个值的组合来评估每个输入。
最近
扩展会动态地将客户端 IP 地址添加到列表中,或在规则匹配时对现有列表进行检查。这允许您将限制逻辑扩展到多个不同规则中,以便对复杂模式进行限制。
垄断与链式管理
所有iptables
和nftables
防火墙策略基本上都源于扩展内置链接,首先,这通常意味着更改现有链接的默认策略,并添加规则,对于更复杂的防火墙来说,通过创建额外的链接来扩展管理框架往往是一个好主意。
用户创建的链接没有默认策略,所以如果一个包通过用户创建的链接,它将返回到调用链接并继续评估。
如果您发现自己对大量规则重复某些匹配标准,可能有必要创建一个跳跃规则,将共享匹配规则用于一个新的链条。
是否将所有规则聚合到内置链中,或是否创建和使用额外的链,将取决于您的规则集有多复杂。
结论
您现在应该更好地了解您在为您的服务器设计防火墙策略时必须做出的决定。 通常,与防火墙相关的时间投资大大偏离了初始设置。
如果您想了解更多关于防火墙和具体的iptables
,请查看以下文章:
- (https://andsky.com/tech/tutorials/how-the-iptables-firewall-works) * (A Deep Dive into Iptables and Netfilter Architecture) (https://andsky.com/tech/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture)
以下指南可以帮助您实施您的策略. 选择与您的防火墙相匹配的指南来开始: