介紹
A firewall is a system that provides network security by filtering incoming and outgoing network traffic based on a set of user-defined rules. In general, the purpose of a firewall is to reduce or eliminate the occurrence of unwanted network communications while allowing all legitimate communication to flow freely. In most server infrastructures, firewalls provide an essential layer of security that, combined with other measures, prevent attackers from accessing your servers in malicious ways.
本指南將討論防火牆的工作原理,重點介紹與雲伺服器相關的狀態感知軟體防火牆,如 iptables 和 FirewallD。我們將從簡要解釋 TCP 封包和不同類型的防火牆開始。然後,我們將討論與狀態感知防火牆相關的各種主題。最後,我們將提供連結到其他教程,幫助您在自己的伺服器上設置防火牆。
TCP 網絡封包
在討論不同類型的防火牆之前,讓我們快速看一下傳輸控制協議(TCP)網絡流量的樣子。
TCP 網絡流量在網絡中以封包的形式移動,這些封包是容器,包含封包標頭——這包含控制資訊,如來源和目的地地址,以及封包序列資訊——以及資料(也稱為有效負載)。雖然每個封包中的控制資訊有助於確保其相關的資料正確傳遞,但它包含的元素也提供了防火牆根據防火牆規則匹配封包的各種方法。
重要的是要注意,成功接收传入的TCP数据包需要接收方向发送方发送回去的出站确认数据包。传入和传出数据包中的控制信息的组合可以用来确定发送方和接收方之间的连接状态(例如,新建立的、已建立的、相关的)。
防火墙的类型
让我们简要讨论一下网络防火墙的三种基本类型:数据包过滤(无状态)、有状态和应用层。
数据包过滤,或称为无状态防火墙,通过独立检查单个数据包来工作。因此,它们不了解连接状态,只能根据单个数据包头部允许或拒绝数据包。
有状态防火墙能够确定数据包的连接状态,这使它们比无状态防火墙更灵活。它们通过收集相关的数据包,直到可以确定连接状态,然后再将任何防火墙规则应用于流量。
应用层防火墙更进一步,通过分析正在传输的数据,允许将网络流量与针对个别服务或应用程序的防火墙规则进行匹配。这些也被称为基于代理的防火墙。
除了現代操作系統上提供的防火牆軟件外,防火牆功能還可以由硬件設備提供,例如路由器或防火牆設備。再次強調,我們的討論將專注於運行在旨在保護的伺服器上的狀態防火牆軟件。
防火牆規則
如上所述,通過防火牆的網絡流量將與規則匹配,以確定是否允許通過。解釋防火牆規則的樣子的一種簡單方法是展示一些示例,所以我們現在就這麼做。
假設您有一台伺服器,其入站流量適用以下防火牆規則清單:
- 接受來自公共網絡接口的端口 80 和 443(HTTP 和 HTTPS 網絡流量)的新建立的和已建立的入站流量
- 拒絕來自您辦公室非技術員工的IP地址到端口 22(SSH)的入站流量
- 接受來自您辦公室IP範圍的新建立的和已建立的入站流量到私有網絡接口的端口 22(SSH)
請注意,這些示例中的每個第一個詞要麼是“accept”(接受),要麼是“reject”(拒絕),要麼是“drop”(丟棄)。這指定了防火牆在網絡流量匹配規則時應採取的操作。Accept表示允許通過流量,reject表示阻止流量但回覆“無法訪問”錯誤,而drop表示阻止流量並且不發送回覆。每條規則的其餘部分包括每個封包要匹配的條件。
事實證明,網絡流量是按照順序或鏈中的防火牆規則列表進行匹配的,從第一個到最後一個。更具體地說,一旦匹配到一條規則,則將該規則相關聯的操作應用於相應的網絡流量。在我們的示例中,如果一個會計員試圖建立到服務器的SSH連接,則基於規則2,他們將被拒絕,甚至在檢查規則3之前就會被拒絕。然而,系統管理員將被接受,因為他們只會匹配規則3。
默認策略
通常,防火牆規則鏈不會明確涵蓋每種可能的情況。因此,防火牆鏈必須始終指定一個默認策略,該策略僅包含一個操作(接受、拒絕或丟棄)。
假設上述鏈的默認策略設置為拒絕。如果您辦公室外的任何電腦試圖與伺服器建立SSH連接,則流量將被拒絕,因為它不符合任何規則的條件。
如果默認策略設置為允許,則除您自己的非技術員工外,任何人都可以與伺服器上的任何開放服務建立連接。這將是一個非常糟糕配置的防火牆示例,因為它只排除了您員工的一部分。
傳入和傳出流量
從伺服器的角度來看,作為網絡流量的流入或流出,防火牆為每種情況維護一套不同的規則。來源於其他地方的流量,即流入流量,與伺服器發送的流出流量不同對待。伺服器通常會允許大多數流出流量,因為伺服器通常是自己可以信任的。儘管如此,流出規則集可用於在伺服器被攻擊者或惡意執行檔感染的情況下防止不必要的通信。
為了最大程度地提升防火牆的安全性好處,您應該識別所有您希望其他系統與您的伺服器互動的方式,創建明確允許它們的規則,然後拒絕所有其他流量。請記住,必須設置適當的傳出規則,以便伺服器允許自己向任何適當的傳入連接發送傳出確認。此外,由於伺服器通常需要為各種原因啟動自己的傳出流量,例如下載更新或連接到數據庫,因此在傳出規則集中包含這些情況是很重要的。
編寫傳出規則
假設我們的示例防火牆設置為默認拒絕傳出流量。這意味著我們的傳入接受規則將無法正常工作,除非有相應的傳出規則。
為了補充示例中的傳入防火牆規則(1和3),從防火牆規則部分,並允許這些地址和端口上的正確通信發生,我們可以使用以下傳出防火牆規則:
- 接受已建立的對公共網絡接口的傳出流量,端口為80和443(HTTP和HTTPS)
- 接受已建立的對私有網絡接口的傳出流量,端口為22(SSH)
請注意,我們無需明確為被丟棄的傳入流量寫規則(傳入規則2),因為伺服器不需要建立或確認該連接。
防火牆軟體與工具
既然我們已經了解了防火牆的工作原理,讓我們來看看可以幫助我們建立有效防火牆的常見軟體套件。儘管還有許多其他與防火牆相關的套件,但這些都是有效的,也是您最常遇到的。
Iptables
Iptables是大多數Linux發行版中默認包含的標準防火牆(一種現代變體稱為nftables將開始取代它)。它實際上是對可以操作Linux網路堆棧的內核級netfilter鉤子的前端。它通過將每個跨越網絡接口的封包與一組規則進行匹配來決定要做什麼。
要學習如何使用iptables實現防火牆,請查看以下鏈接:
UFW
UFW代表Uncomplicated Firewall,是一個用於簡化配置防火牆過程的iptables界面。
要了解更多有關使用UFW的信息,請查看此教程:如何在Ubuntu和Debian雲服務器上使用UFW設置防火牆。
FirewallD
FirewallD是一個完整的防火牆解決方案,在CentOS 7服務器上默認可用。巧合的是,FirewallD使用iptables來配置netfilter。
要了解更多有關使用FirewallD的信息,請查看此教程:如何配置FirewallD來保護您的CentOS 7服務器。
如果您正在运行 CentOS 7,但更喜欢使用 iptables,请按照本教程进行操作:如何从 FirewallD 迁移到 CentOS 7 上的 iptables。
Fail2ban
Fail2ban 是一种入侵防范软件,可以自动配置您的防火墙来阻止暴力登录尝试和 DDOS 攻击。
要了解更多关于 Fail2ban 的信息,请查看以下链接:
- Fail2ban 如何在 Linux 服务器上保护服务
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Nginx 服务器
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Apache 服务器
结论
現在您已經了解防火牆的運作原理,您應該研究一下如何通過使用上述教程來實施一個可以提高您伺服器設置安全性的防火牆。
如果您想進一步了解防火牆的運作原理,請查看以下鏈接:
Source:
https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work