网站搜索

如何执行数据包过滤、网络地址转换和设置内核运行时参数 - 第 2 部分


正如第 1 部分(“设置静态网络路由”)中所承诺的,在本文(RHCE 系列的第 2 部分)中,我们将首先介绍了解红帽企业 Linux 7 中的数据包过滤和网络地址转换 (NAT) 原理,然后深入了解设置运行时内核参数,以在某些条件发生变化或出现需求时修改正在运行的内核的行为。

RHEL 7 中的网络数据包过滤

当我们谈论数据包过滤时,我们指的是防火墙执行的过程,在该过程中,防火墙读取试图通过它的每个数据包的标头。然后,它根据系统管理员先前定义的规则采取所需的操作来过滤数据包。

您可能知道,从RHEL 7开始,管理防火墙规则的默认服务是firewalld。与 iptables 一样,它与 Linux 内核中的 netfilter 模块通信,以检查和操作网络数据包。与 iptables 不同,更新可以立即生效,而不会中断活动连接——您甚至不需要重新启动服务。

firewalld 的另一个优点是它允许我们根据预先配置的服务名称定义规则(稍后会详细介绍)。

第 1 部分中,我们使用了以下场景:

不过,您可能还记得,我们在路由器 #2 上禁用了防火墙以简化示例,因为我们尚未介绍数据包过滤。现在让我们看看如何启用发往目的地中特定服务或端口的传入数据包。

首先,我们添加一条永久规则以允许 enp0s3 (192.168.0.19) 到 enp0s8 (10.0.0.18) 的入站流量强>):

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

上面的命令会将规则保存到 /etc/firewalld/direct.xml

cat /etc/firewalld/direct.xml

然后启用规则使其立即生效:

firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

现在,您可以从 RHEL 7 机器远程登录到 Web 服务器,并再次运行 tcpdump 来监视两台计算机之间的 TCP 流量,这次使用路由器 #2 中的防火墙已启用。

telnet 10.0.0.20 80
tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

如果您只想允许从 192.168.0.18 到 Web 服务器(端口 80)的传入连接,并阻止来自 192.168.0.0/ 中其他源的连接,该怎么办? 24网络?

在Web服务器的防火墙中,添加以下规则:

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop' --permanent

现在,您可以从 192.168.0.18 以及 192.168.0.0/24 中的其他计算机向 Web 服务器发出 HTTP 请求。在第一种情况下,连接应该成功完成,而在第二种情况下,连接最终会超时。

为此,以下任何命令都可以解决问题:

telnet 10.0.0.20 80
wget 10.0.0.20

我强烈建议您查看 Fedora 项目 Wiki 中的 Firewalld Rich Language 文档,以获取有关丰富规则的更多详细信息。

RHEL 7 中的网络地址转换

网络地址转换 (NAT) 是为专用网络中的一组计算机(也可以只是其中一台)分配唯一的公共 IP 地址的过程。因此,它们在网络内部仍然由自己的私有 IP 地址唯一标识,但在外部看来它们“看起来”都是一样的。