安全工程师基础!如何使用Linux防火墙阻止本地欺骗地址
黑客和攻击者正在寻找复杂的方法来渗透受入侵检测和防御系统保护的远程网络。没有IDS/IPS完全可以停下或减少黑客决心控制你的网络的意图。不正确的配置允许攻击者绕过所有实施的网络安全措施。本文将解释安全工程师或系统管理员如何防止这些攻击。
几乎所有的Linux发行版都带有内置的防火墙,以保护在Linux主机上运行的进程和应用程序。大多数防火墙都被设计成IDS/IPS解决方案,其主要目的是检测并阻止恶意数据包访问网络。
Linux防火墙通常带有两个接口:iptables和ipchains。大多数人将这些接口称为“iptables防火墙”或“ipchains防火墙”。两个接口都被设计为数据包过滤器。Iptables充当状态防火墙,根据以前的数据包做出决定。ipchains不会根据以前的数据包做出决定;因此,它被设计成无状态防火墙。
我们将重点介绍内核版本为2.4及更高版本的iptables防火墙。
使用iptables防火墙,你可以创建策略或有序规则集,这些规则与内核通信如何处理特定类型的数据包。内核内部是Netfilter框架。Netfilter既是一个框架,也是iptables防火墙的项目名称。作为一个框架,Netfilter允许iptables拦截旨在对数据包执行操作的函数。简而言之,iptables依靠Netfilter框架来构建防火墙功能,例如过滤分组数据。
每个iptables规则都应用于表中的链。iptables链是与具有相似特性的数据包进行比较的规则集合,而表(例如nat或mangle)描述不同类别的功能。例如,一个mangle表会改变分组数据。因此,将改变分组数据的专用规则应用于它,并且过滤规则应用于过滤器表,因为过滤器表过滤分组数据。
iptables规则有一组匹配,以及一个目标,比如Drop或Deny,指示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"
前面的脚本在执行时会显示消息启用源地址验证而不添加新行。反向路径过滤器的默认值是0.0,这意味着没有源验证。因此,第二行简单地将默认值0覆盖为1. 1表示内核将通过确认反向路径来验证源。
最后,通过选择以下任一目标,你可以使用以下命令删除或拒绝来自远程主机的欺骗地址:DROP或REJECT。不过,出于安全原因,我建议使用DROP。
用你自己的IP地址替换“IP地址”占位符,如下所示。此外,你必须选择使用REJECT或DROP;这两个目标不能一起工作。
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