如何使用 Linux 防火墙阻止本地伪造地址

以下是如何使用 iptables 防火墙保护您的网络免受攻击者侵害的方法。
339 位读者喜欢这篇文章。
unspoken blockers

Opensource.com

攻击者正在找到复杂的方法来渗透甚至受入侵检测和防御系统保护的远程网络。没有 IDS/IPS 可以阻止或最大限度地减少决心接管您网络的黑客的攻击。不正确的配置允许攻击者绕过所有已实施的网络安全措施。

在本文中,我将解释安全工程师或系统管理员如何预防这些攻击。

几乎所有 Linux 发行版都带有内置防火墙,以保护在 Linux 主机上运行的进程和应用程序。大多数防火墙都设计为 IDS/IPS 解决方案,其主要目的是检测和阻止恶意数据包访问网络。

Linux 防火墙通常带有两个接口:iptables 和 ipchains。大多数人将这些接口称为“iptables 防火墙”或“ipchains 防火墙”。这两个接口都设计为数据包过滤器。Iptables 充当有状态防火墙,根据先前的数据包做出决策。Ipchains 不根据先前的数据包做出决策;因此,它被设计为无状态防火墙。

在本文中,我们将重点介绍 iptables 防火墙,它随内核版本 2.4 及更高版本一起提供。

使用 iptables 防火墙,您可以创建策略或有序的规则集,这些规则集向内核传达如何处理特定类别的数据包。内核内部是 Netfilter 框架。Netfilter 既是一个框架,也是 iptables 防火墙的项目名称。作为一个框架,Netfilter 允许 iptables 挂钩旨在对数据包执行操作的函数。简而言之,iptables 依赖 Netfilter 框架来构建防火墙功能,例如过滤数据包数据。

每个 iptables 规则都应用于表中的链。iptables 链是规则的集合,这些规则与具有相似特征的数据包进行比较,而表(例如 nat 或 mangle)描述了各种功能类别。例如,mangle 表会更改数据包数据。因此,更改数据包数据的专用规则应用于它,而过滤规则应用于 filter 表,因为 filter 表会过滤数据包数据。

Iptables 规则有一组匹配项以及一个目标,例如 DropDeny,用于指示 iptables 如何处理符合规则的数据包。因此,如果没有目标和一组匹配项,iptables 就无法有效地处理数据包。目标仅指如果数据包与规则匹配时要采取的特定操作。另一方面,匹配项必须由每个数据包满足,iptables 才能处理它们。

现在我们了解了 iptables 防火墙的运作方式,让我们看看如何使用 iptables 防火墙来检测和拒绝或丢弃伪造地址。

启用源地址验证

当我处理来自远程主机的伪造地址时,我作为安全工程师采取的第一步是在内核中启用源地址验证。

源地址验证是一项内核级功能,可丢弃伪装成来自您网络的数据包。它使用反向路径过滤器方法来检查接收到的数据包的来源是否可以通过其进入的接口访问。

要启用源地址验证,请使用下面的简单 shell 脚本,而不是手动执行

#!/bin/sh
#author’s name: Michael K Aboagye 
#purpose of program: to enable reverse path filtering
#date: 7/02/18
#displays “enabling source address verification” on the screen
echo -n "Enabling source address verification…"
#Overwrites the value 0 to 1 to enable source address verification
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo "completed"

前面的脚本在执行时,会显示消息 Enabling source address verification,而不附加新行。反向路径过滤器的默认值为 0.0,这意味着不进行源验证。因此,第二行只是将默认值 0 覆盖为 1。1 表示内核将通过确认反向路径来验证来源。

最后,您可以使用以下命令通过选择以下目标之一来丢弃或拒绝来自远程主机的伪造地址:DROPREJECT。但是,出于安全原因,我建议使用 DROP

将“IP-address”占位符替换为您自己的 IP 地址,如下所示。此外,您必须选择使用 REJECTDROP 中的一个;这两个目标不能一起使用。

   iptables -A INPUT -i internal_interface -s IP_address -j REJECT / DROP  

    iptables -A INPUT -i internal_interface -s 192.168.0.0/16  -j REJECT/ DROP

本文仅提供有关如何使用 iptables 防火墙防止来自远程主机的欺骗攻击的基础知识。

标签

7 条评论

哪个 IP 地址?计算机还是路由器?如果您有 wifi 扩展器怎么办?您是否输入两者?结尾部分需要更多解释,因为让我困惑的是,即使路由器是 192.168.0.#,我也从未见过最后一个数字是“0”,因此不知道如何解释它。

您好,感谢提问。*192.168.0.0* 只是一个网络标识符。它不可用。

回复 作者 TheOuterLinux (未验证)

引用 将“IP-address”占位符替换为您自己的 IP 地址 取消引用

您忘记同时声明“并将 'internal_interface' 替换为您自己的内部接口名称”(例如 eth0 或任何活动的接口)。

否则您将收到错误消息

iptables v1.6.0:接口名称 `internal_interface' 必须短于 IFNAMSIZ (15)
尝试 `iptables -h' 或 'iptables --help' 以获取更多信息。

并且不要忘记这仅保护 IPv4 免受欺骗 - 如果 IPv6 处于活动状态,那么也需要类似的保护。

好的,Nigel。非常感谢。下次,我会为 IPv6 留出空间,我不会再忘记了。

回复 作者 Nigel Barrage (未验证)

首先,您没有解释什么是伪造地址。您提供的 iptables 示例将阻止整个内部网络范围(糟糕的示例)。如何识别伪造地址?您也没有详细说明这一点。

此外,作为一名安全工程师,您应该意识到更改 /proc 文件系统下的值在系统重启后不会保留,因此始终使用“sysctl -w”。您没有为 IPv6 配置 RP 过滤器是有原因的吗?

话虽如此,您可能会发现以下文章内容丰富

https://www.lisenet.com/2015/kernel-sysctl-configuration-for-linux/

希望这有帮助。

谢谢,Tomas!您的博客包含一些很好的信息。继续保持良好的工作。

伪造地址简而言之就是“带有错误/虚假源 IP 地址的 IP 数据包”。您可以通过多种方式检测伪造地址,但我更喜欢使用路由方法来检测或识别伪造地址,尽管在非路由方法中使用 netlog 也很有效。

下次,我将“深入”细节。感谢您的关注。

回复 作者 Tomas (未验证)

如果您想编辑 rp_filter 值,您应该找到 /etc/sysctl.conf 文件并将引用的变量添加到该文件

echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.conf

然后告诉系统重新加载该配置文件

sysctl -p

一旦系统配置文件具有正确的配置值,此设置将在重启后持久存在。

在您执行此操作时,您可能需要确保禁用源路由
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0

命令“sysctl -a”将为您提供一堆可调参数及其当前值的列表。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.