简单来说,防火墙是一种安全系统,它根据一组预定义的规则(例如数据包目的地/来源或流量类型等)控制网络中的进出流量。

在本文中,我们将回顾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
除此之外,还请记得查看当前系列的审查基本命令和系统文档-第1部分,在这里我描述了您可以获取有关您的
使用Iptables控制网络流量
您可能想要参考配置Iptables防火墙-第8部分来刷新您对Linux基金会认证工程师(LFCE)系列中iptables内部的了解,然后再继续。这样,我们就可以直接进入示例。
示例1:允许进出的Web流量
Apache Web服务器使用TCP端口80和443来处理普通(HTTP)和安全(HTTPS)的Web流量。您可以通过以下方式允许在enp0s3接口上的这两个端口上的进出的Web流量:
# 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:将入站流量重定向到另一个目标
如果您将您的RHEL 7盒子不仅用作软件防火墙,而且用作实际的基于硬件的防火墙,以便它位于两个不同的网络之间,则您的系统中必须已经启用了IP转发。如果没有,请编辑/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
在下面的示例中,public区域是活动的,并且enp0s3接口已自动分配给它。要查看有关特定区域的所有信息:
# firewall-cmd --zone=public --list-all

由于您可以在 RHEL 7安全指南中了解有关区域的更多信息,因此我们只会在此处列出一些具体示例。
示例4:允许服务通过防火墙
要获取受支持的服务列表,请使用
# firewall-cmd --get-services

要立即和在后续引导中允许http和https的Web流量通过防火墙,请执行以下操作:
# 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
如果省略了code> -zone,将使用默认区域(可以使用 firewall-cmd –get-default-zone 进行检查)。
要删除规则,请在上述命令中将单词add替换为remove。
示例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中配置防火墙的有用FirewallD示例
结论
在本文中,我们解释了什么是防火墙,介绍了在RHEL 7中实施防火墙的可用服务,并提供了一些示例,可以帮助您开始执行此任务。如果您有任何评论、建议或问题,请随时使用下面的表单告诉我们。提前感谢您!
Source:
https://www.tecmint.com/firewalld-vs-iptables-and-control-network-traffic-in-firewall/