選擇有效的防火牆策略以保護您的服務器

介紹

使用防火牆不僅僅是做出明智的政策決策,同時也涉及學習語法。 防火牆像是 iptables 被設計為通過解釋管理員設定的規則來執行政策。然而,作為管理員,您需要知道什麼類型的規則對您的基礎設施是有意義的。

儘管 其他指南著重於啟動和運行所需的命令,但在本指南中,我們將討論實施防火牆時需要做出的一些決策。這些選擇將影響您的防火牆行為、您的伺服器有多安全,以及它將如何應對發生的各種情況。我們將以 iptables 為具體示例,但大多數概念都將廣泛應用。

選擇默認策略

在構建防火牆時,最重要的決策之一是預設政策。這決定了當流量與任何其他規則不匹配時會發生什麼情況。預設情況下,防火牆可以接受以前的規則未匹配的任何流量,或者拒絕該流量。

預設拒絕 vs 預設接受

A default policy of ACCEPT means that any unmatched traffic is allowed to enter the server. This is generally not recommended, because it means that you would need to work backwards from there, blocking all unwanted traffic. Blocklist-type approaches are difficult to manage, because you’d need to anticipate and block every type of unwanted traffic. This can lead to maintenance headaches and is generally prone to mistakes, misconfigurations, and unanticipated holes in the established policy.

另一種選擇是預設政策為拒絕。這意味著任何未匹配到明確規則的流量都不會被允許。每個服務必須明確允許,這可能需要大量的初始配置。但是,這意味著您的政策傾向於安全,您確切地知道哪些服務可以在您的服務器上接收流量。此外,幾乎所有預配置的政策都會遵循這種方法,這意味著您可以基於現有的默認配置進行構建。

預設拒絕政策 vs 最終拒絕規則

選擇預設拒絕政策還涉及另一個微妙的決策。使用iptables和其他類似的防火牆,可以使用防火牆的內置政策功能來設置預設政策,或者通過在規則列表末尾添加一個捕獲所有拒絕規則來實現預設政策。

這兩種方法的區別在於防火牆規則被清空時會發生什麼情況。

如果你的防火牆的內建策略功能設置為DROP,並且防火牆規則被清空(重置),或者某些匹配規則被移除,你的服務將立即無法從遠程訪問。這通常適用於非關鍵服務設置策略時,以防規則被移除時將惡意流量暴露給你的服務器。

這種方法的缺點是,你的服務將完全對客戶不可用,直到你重新建立允許的規則。如果你沒有本地或基於網絡的遠程訪問作為替代方案,甚至可能會被自己鎖在服務器外。

另一種方法是將防火牆的默認策略設置為ACCEPT,然後使用常規規則實施DROP策略。你可以在鏈的末尾添加一個正常的防火牆規則,匹配並拒絕所有剩餘的未匹配流量。

在這種情況下,如果你的防火牆規則被清空,你的服務將是可訪問但無保護的。根據你本地或替代訪問的選項,這可能是一個必要的代價,以確保如果規則被清空,你仍然能夠重新進入你的服務器。如果你決定使用這個選項,請確保捕獲所有流量的規則始終保持在規則集的最後一個位置。

放棄 vs 拒絕流量

有幾種不同的方法可以阻止封包到達其目的地。在這些方法之間的選擇對客戶端如何感知其連接嘗試以及他們能夠多快地確定他們的請求將不會被處理有影響。

第一種拒絕封包的方式是使用DROP。Drop可以用作默認策略或作為匹配規則的目標。當一個封包被丟棄時,iptables直接將其丟棄。它不會向試圖連接的客戶端發送任何回應,也不會表明它曾經收到過該封包。這意味著客戶端(合法或不合法)將不會收到任何關於其封包接收的確認。

對於 TCP 連接嘗試(例如由網頁瀏覽器進行的連接),連接將停滯,直到達到超時限制。對於 UDP 客戶端來說,缺乏回應甚至更加模糊。事實上,不接收 UDP 封包返回通常表明該封包已被接受。如果 UDP 客戶端關心其封包的接收,它將不得不重新發送它們來嘗試確定它們是否被接受、在傳輸過程中丟失或被丟棄。這可能會增加惡意行為者必須花費的時間來獲取有關您服務器端口狀態的信息,但也可能導致合法流量出現問題。

婉拒流量的另一种方法是明确拒绝不允许的数据包。 ICMP,即Internet Control Message Protocol,是互联网上用于在主机之间发送状态、诊断和错误消息的元协议,作为一种不依赖于传统通信协议如TCP或UDP的带外通道。当您使用REJECT目标而不是DROP目标时,将拒绝流量并返回一个ICMP数据包给发送方,通知他们他们的流量已收到但将不被接受。还可以包含状态消息以提供原因。

这带来了许多后果。假设允许ICMP流量到达客户端,他们将立即收到有关其流量被阻止的通知。对于合法客户,这意味着他们可以联系管理员或检查其连接选项,以确保他们正在到达正确的端口。对于恶意用户,这意味着他们可以在较短时间内完成扫描并绘制出开放、关闭和被过滤的端口。

在决定是丢弃还是拒绝流量时有很多要考虑的因素。一个重要的考虑因素是,大多数恶意流量实际上将由自动化脚本执行。由于这些脚本通常没有监督,丢弃非法流量不会有效地阻止它们,并会对合法用户产生负面影响。有关这个主题的更多信息可以在Peter Benie的网站上找到

拒绝 vs 拒绝响应表

下面的表格显示了由防火墙保护的服务器如何根据应用于目标端口的策略对不同请求做出反应。

Client Packet Type NMap Command Port Policy Response Inferred Port State
TCP nmap [-sT | -sS] -Pn <server> Accept TCP SYN/ACK Open
TCP nmap [-sT | -sS] -Pn <server> Drop (none) Filtered
TCP nmap [-sT | -sS] -Pn <server> Reject TCP RESET Closed
UDP nmap -sU -Pn <server> Accept (none) Open or Filtered
UDP nmap -sU -Pn <server> Drop (none) Open or Filtered
UDP nmap -sU -Pn <server> Reject ICMP Port Unreachable Closed

第一列指示客户端发送的数据包类型。第二列包含可用于测试每种情况的nmap命令。第三列指示应用于端口的端口策略。第四列是服务器将发送的响应,第五列是客户端可以根据收到的响应推断出有关端口的信息。

ICMP策略

与决定是丢弃还是拒绝被拒绝的流量一样,您可以选择接受或拒绝发送到服务器的ICMP数据包。

ICMP是用于许多用途的协议。正如前面提到的,它经常被发送回来以提供有关使用其他协议的请求的状态信息。它最流行的功能之一是发送和响应网络ping以验证对远程主机的连接性。还有许多其他用途的ICMP,虽然不太广为人知,但仍然很有用。

ICMP 封包按照 “類型” 進行組織,然後進一步按照 “代碼” 進行分類。類型指定訊息的一般含義。例如,類型 3 表示目的地無法到達。代碼通常用於提供有關類型的進一步信息。例如,ICMP 類型 3 代碼 3 表示目的地端口不可用,而 ICMP 類型 3 代碼 0 表示無法到達目的地網絡。

一些 ICMP 類型已被淘汰,因此可以無條件阻止它們。其中包括 ICMP 源流量過多(類型 4 代碼 0)和替代主機(類型 6)。類型 1、2、7 以及 15 以上都已淘汰,保留用於將來使用或實驗。許多上游防火牆模板將默認處理此問題。

根據網絡配置阻止的類型

一些 ICMP 類型在某些網絡配置中很有用,但在其他情況下應阻止。

例如,ICMP 重定向消息(類型 5)對於揭示糟糕的網絡設計很有用。當路由器接收到一個封包,該封包必須路由到同一網絡上的另一個主機時,它會發送 ICMP 重定向消息,以告訴客戶端將來將封包通過其他主機發送。

這在你信任本地網絡並想在初始配置期間檢測路由表效率時非常有用。在不受信任的網絡上,惡意用戶可能會發送 ICMP 重定向以操縱主機的路由表。

其他一些在某些網絡中有用但在其他網絡中可能有害的 ICMP 類型是 ICMP 路由器廣告(類型 9)和路由器請求(類型 10)封包。路由器廣告和請求封包是作為 ICMP 網際網路路由器發現協議(IRDP)的一部分使用的,該協議允許主機在開機或加入網絡時動態發現可用路由器。

在大多數情況下,最好為主機配置靜態路由,以用於其將要使用的網關。這些封包應該在與 ICMP 重定向封包相同的情況下被接受。事實上,由於主機將不知道任何已發現路由的流量的首選路由,因此通常需要在發現後直接進行重定向消息。如果您沒有運行發送路由器請求封包或基於廣告封包修改路由的服務(例如rdisc),則可以安全地阻止這些封包。

通常安全允許的類型

通常安全允許的 ICMP 類型如下,但如果您想要更加小心,您可能希望禁用它們。

  • Type 8 — 回音请求:这些是发送到您服务器的ping请求。通常允许这些请求是安全的(拒绝这些数据包并不会隐藏您的服务器,因为用户有很多其他方法可以查明您的主机是否正常运行),但如果您愿意,可以阻止它们或限制您响应的源地址。
  • Type 13 — 时间戳请求:这些数据包可用于客户端收集延迟信息。它们可用于某些操作系统指纹技术,因此您可以阻止它们或限制您响应的地址范围。

以下类型通常可以允许,无需通过明确规则配置防火墙允许响应其发出的请求(通过使用conntrack模块允许ESTABLISHEDRELATED流量)

  • Type 0 — 回音回复:这些是对回音请求(ping)的响应。
  • Type 3 — 目标不可达:合法的目标不可达数据包是您服务器创建的请求的响应,指示无法传递该数据包。
  • Type 11 — 超时:如果您服务器生成的数据包在到达目的地之前因超过其TTL值而中断,则返回此诊断错误。
  • Type 12 — 参数问题:这意味着您服务器发出的数据包格式不正确。
  • Type 14 — 时间戳响应:这些是由您服务器生成的时间戳查询的响应。

封鎖所有傳入的ICMP流量仍然被一些安全專家所推薦,然而現在有很多人鼓勵智能ICMP接受策略。這些兩個Stackexchange 主題有更多的資訊。

連接限制和速率限制

對於某些服務和流量模式,您可能只想在客戶端不濫用訪問權限時允許訪問。限制資源使用的兩種方法是連接限制和速率限制。

連接限制

可以使用像connlimit這樣的擴展來實現連接限制,以檢查客戶端打開了多少個活動連接。這可以用於限制同一時間允許的連接數量。如果您決定實施連接限制,您需要做出一些決策:

  • 您是基於每個地址、每個網絡還是全局來限制?
  • 您是否對特定服務或整個服務器的流量進行匹配和限制?

連線可以根據每台主機進行限制,或者可以通過提供網路前綴(例如,整個組織的IP地址範圍)來限制網段的數量。您還可以為服務或整個機器設定全域最大連線數。請注意,您可以混合使用這些選項,以建立更複雜的策略來控制連線數量。

速率限制

速率限制允許您制定規則,以控制流量被伺服器接受的速率或頻率。有多種不同的防火牆擴展可用於速率限制,包括limithashlimitrecent。您使用的擴展的選擇將主要取決於您希望限制流量的方式。

limit擴展將使相應的規則匹配,直到達到限制為止,之後進一步的封包將被丟棄。例如,像5/sec這樣的限制將允許每秒匹配5個封包,之後該規則將不再匹配。這適用於為服務設定全域速率限制。您還可以部署額外的服務,如Fail2ban,以阻止重複的連線嘗試。

hashlimit擴展更靈活,允許您指定iptables將進行哈希以評估匹配的一些值。例如,它可以查看源地址、源端口、目標地址、目標端口或這四個值的組合,以評估每個條目。它可以按封包或按接收的字節數限制。這提供了靈活的每客戶端或每服務的速率限制。

recent擴展在規則匹配時動態將客戶端IP地址添加到列表中或與現有列表進行檢查。這使您能夠將限制邏輯分散在多個不同的規則中,用於處理複雜的模式。它具有指定擊中次數和時間範圍的能力,就像其他限制器一樣,但如果檢測到額外的流量,還可以重置時間範圍,迫使客戶端停止所有流量,如果它們受到限制。

單體與基於鏈的管理

所有iptablesnftables防火牆策略基本上都是基於擴展內建鏈。首先,這通常意味著更改現有鏈的默認策略並添加規則。對於更複雜的防火牆,通常建議通過創建附加鏈來擴展管理框架。

User-created chains are called secondarily, and inherently tied to their “calling chain,” that they originate from. User-created chains have no default policy, so if a packet falls through a user-created chain, it will return to the calling chain and continue evaluation. With that in mind, user-created chains are mainly useful for organizational purposes, to make rule matching conditions more maintainable, and to improve readability by splitting match conditions.

If you find yourself repeating certain match criteria for a significant number of rules, it might be worthwhile to create a jump rule with the shared match criteria to a new chain. Inside the new chain, you can add that set of rules with the redundant matching criteria omitted.

The decision as to whether to lump all of your rules into one of the built-in chains or whether to create and utilize additional chains will depend on how complex your rule set is.

結論

你現在應該對設計伺服器防火牆策略時需要做出的決定有更清晰的理解。通常,防火牆的時間投資主要偏向於初始設定。儘管可能需要一些時間和實驗才能制定出最適合您需求的策略,但這樣做將使您更加掌握伺服器安全性的控制權。

如果您想了解更多有關防火牆和 iptables 的信息,請查看以下文章:

以下指南可以幫助您實施您的策略。選擇與您的防火牆相符的指南開始:

Source:
https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-firewall-policy-to-secure-your-servers