簡單來說,防火牆是一個基於一組預定義規則(例如,封包的目的地/來源或流量類型)來控制網絡中的進出流量的安全系統。

本文將回顧firewalld的基礎知識,這是默認的動態防火牆守護程序在Red Hat Enterprise Linux 7中,以及iptables服務,這是Linux上大多數系統和網絡管理員熟悉的傳統防火牆服務,也可在RHEL 7中使用。
A Comparison Between FirewallD and Iptables
從內部來看,firewalld和iptables服務通過相同的接口與內核中的netfilter框架進行通信,並且都使用iptables命令。然而,與iptables服務不同的是,firewalld可以在正常系統運行期間更改設置,而不會丟失現有的連接。
Firewalld應該默認安裝在您的RHEL系統中,但可能未運行。您可以使用以下命令進行驗證(firewall-config是用戶界面配置工具):
# yum info firewalld firewall-config

和,
# systemctl status -l firewalld.service

另一方面,iptables服務不是默認包含的,但可以通過安裝。
# yum update && yum install iptables-services
這兩個守護程序都可以使用通常的systemd命令啟動並在啟動時啟用。
# systemctl start firewalld.service | iptables-service.service # systemctl enable firewalld.service | iptables-service.service
閱讀更多: 管理 Systemd 服務的有用指令
就配置文件而言,iptables 服務使用 /etc/sysconfig/iptables
(如果該套件未安裝在您的系統上,則該文件將不存在)。在作為叢集節點使用的 RHEL 7 系統上,此文件如下所示:

而 firewalld 則將其配置存儲在兩個目錄中:/usr/lib/firewalld
和 /etc/firewalld
:
# ls /usr/lib/firewalld /etc/firewalld

在本文稍後,我們將更深入地研究這些配置文件,此時我們在此處添加一些規則即可。現在,只需提醒您,您始終可以通過下列方式獲取有關這兩個工具的更多信息:
# man firewalld.conf # man firewall-cmd # man iptables
除此之外,請記得查看本系列的 回顧基本指令和系統文檔-第一部分,在該部分中,我描述了幾個可獲取有關您的 RHEL 7 系統上安裝的套件信息的來源。
使用 Iptables 控制網絡流量
您可能想要參考配置Iptables防火牆-第8部分,以便在繼續之前刷新您對Linux Foundation認證工程師(LFCE)系列和iptables內部的記憶。因此,我們將能夠直接進入示例中。
示例1:允許進出網絡流量
Apache Web服務器使用TCP端口80和443來處理正常(HTTP)和安全(HTTPS)的網絡流量。您可以通過以下方式允許進出enp0s3接口的網絡流量:
# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
示例2:阻止特定網絡的所有(或部分)入站連接
有時您需要阻止來自特定網絡(例如192.168.1.0/24)的所有(或部分)類型的流量:
# iptables -I INPUT -s 192.168.1.0/24 -j DROP
將丟棄來自192.168.1.0/24網絡的所有封包,而
# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
只會允許通過22端口的入站流量。
示例3:將入站流量重定向到另一個目的地
如果您不仅将您的/etc/sysctl.conf
并将net.ipv4.ip_forward的值设置为1,如下所示:
net.ipv4.ip_forward = 1
然后保存更改,关闭文本编辑器,最后运行以下命令以应用更改:
# sysctl -p /etc/sysctl.conf
例如,您可能已经在内部框上安装了一个打印机,其IP为192.168.0.10,CUPS服务在端口631上侦听(在打印服务器和防火墙上都是如此)。为了将来自防火墙另一侧的客户端的打印请求转发,您应该添加以下iptables规则:
# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
请记住,iptables按顺序读取其规则,因此请确保默认策略或稍后的规则不会覆盖上述示例中概述的规则。
开始使用FirewallD
Firewalld引入的变化之一是区域。此概念允许将网络分隔为不同的区域,用户已决定将设备和该网络内的流量置于其中的信任级别。
列出活动区域:
# firewall-cmd --get-active-zones
在下面的示例中,公共区域处于活动状态,并且enp0s3接口已自动分配给它。要查看有关特定区域的所有信息:
# firewall-cmd --zone=public --list-all

由於您可以在 RHEL 7安全指南中了解更多關於區域的資訊,因此我們在這裡僅列出一些具體的例子。
範例4:允許通過防火牆的服務
要獲取支援的服務清單,請使用。
# firewall-cmd --get-services

立即和在後續引導中允許通過防火牆的http和https網路流量:
# firewall-cmd --zone=MyZone --add-service=http # firewall-cmd --zone=MyZone --permanent --add-service=http # firewall-cmd --zone=MyZone --add-service=https # firewall-cmd --zone=MyZone --permanent --add-service=https # firewall-cmd --reload
如果省略代碼 -zone,則使用默認區域(可以使用firewall-cmd –get-default-zone檢查)。
若要刪除規則,請在上述命令中將單詞添加替換為刪除。
範例5:IP / 端口轉發
首先,您需要找出所需區域是否啟用了偽裝:
# firewall-cmd --zone=MyZone --query-masquerade
在下面的圖像中,我們可以看到偽裝已經啟用了外部區域,但未啟用公共:

您可以為公共啟用偽裝:
# firewall-cmd --zone=public --add-masquerade
或在外部使用偽裝。以下是我們使用firewalld來複製範例3的操作:
# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
別忘了重新加載防火牆。
您可以在RHCSA系列的第9部分找到更多的示例,我们在那里解释了如何允许或禁用通常由Web服务器和FTP服务器使用的端口,以及如何在这些服务的默认端口更改时更改相应的规则。此外,您可能希望参考firewalld wiki获取更多示例。
结论
在本文中,我们解释了防火墙的概念,介绍了在RHEL 7中可用的实施防火墙的服务,并提供了一些示例,可以帮助您开始进行此任务。如果您有任何评论、建议或问题,请随时使用下方的表单告诉我们。非常感谢!
Source:
https://www.tecmint.com/firewalld-vs-iptables-and-control-network-traffic-in-firewall/