导读 | 几乎全部的 Linux 发行版都带着一个内建的防火墙来保护运行在 Linux 主机上的进程和应用程序。大多数防火墙都按照 IDS/IPS 解决方案设计,这样的设计的主要目的是检测和避免恶意包获取网络的进入权。 |
如何使用 iptables 防火墙保护你的网络免遭黑客攻击。html
即使是被入侵检测和隔离系统所保护的远程网络,黑客们也在寻找各类精巧的方法入侵。IDS/IPS 不能中止或者减小那些想要接管你的网络控制权的黑客攻击。不恰当的配置容许攻击者绕过全部部署的安全措施。linux
在这篇文章中,我将会解释安全工程师或者系统管理员该怎样避免这些攻击。安全
几乎全部的 Linux 发行版都带着一个内建的防火墙来保护运行在 Linux 主机上的进程和应用程序。大多数防火墙都按照 IDS/IPS 解决方案设计,这样的设计的主要目的是检测和避免恶意包获取网络的进入权。网络
Linux 防火墙一般有两种接口:iptables 和 ipchains 程序(LCTT 译注:在支持 systemd 的系统上,采用的是更新的接口 firewalld)。大多数人将这些接口称做 iptables 防火墙或者 ipchains 防火墙。这两个接口都被设计成包过滤器。iptables 是有状态防火墙,其基于先前的包作出决定。ipchains 不会基于先前的包作出决定,它被设计为无状态防火墙。架构
在这篇文章中,咱们将会专一于内核 2.4 以后出现的 iptables 防火墙。框架
有了 iptables 防火墙,你能够建立策略或者有序的规则集,规则集能够告诉内核该如何对待特定的数据包。在内核中的是Netfilter 框架。Netfilter 既是框架也是 iptables 防火墙的项目名称。做为一个框架,Netfilter 容许 iptables 勾连被设计来操做数据包的功能。归纳地说,iptables 依靠 Netfilter 框架构筑诸如过滤数据包数据的功能。设计
每一个 iptables 规则都被应用到一个表中的链上。一个 iptables 链就是一个比较包中类似特征的规则集合。而表(例如 nat 或者 mangle)则描述不一样的功能目录。例如, mangle 表用于修改包数据。所以,特定的修改包数据的规则被应用到这里;而过滤规则被应用到 filter 表,由于 filter 表过滤包数据。htm
iptables 规则有一个匹配集,以及一个诸如 Drop 或者 Deny 的目标,这能够告诉 iptables 对一个包作什么以符合规则。所以,没有目标和匹配集,iptables 就不能有效地处理包。若是一个包匹配了一条规则,目标会指向一个将要采起的特定措施。另外一方面,为了让 iptables 处理,每一个数据包必须匹配才能被处理。blog
如今咱们已经知道 iptables 防火墙如何工做,让咱们着眼于如何使用 iptables 防火墙检测并拒绝或丢弃欺骗地址吧。接口
打开源地址验证
做为一个安全工程师,在处理远程的欺骗地址的时候,我采起的第一步是在内核打开源地址验证。
源地址验证是一种内核层级的特性,这种特性丢弃那些假装成来自你的网络的包。这种特性使用反向路径过滤器方法来检查收到的包的源地址是否能够经过包到达的接口能够到达。(LCTT 译注:到达的包的源地址应该能够从它到达的网络接口反向到达,只需反转源地址和目的地址就能够达到这样的效果)
利用下面简单的脚本能够打开源地址验证而不用手工操做:
#!/bin/sh #做者: Michael K Aboagye #程序目标: 打开反向路径过滤 #日期: 7/02/18 #在屏幕上显示 “enabling source address verification” echo -n "Enabling source address verification…" #将值0覆盖为1来打开源地址验证 echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter echo "completed"
上面的脚本在执行的时候只显示了 Enabling source address verification 这条信息而不会换行。默认的反向路径过滤的值是 0,0 表示没有源验证。所以,第二行简单地将默认值 0 覆盖为 1。1 表示内核将会经过确认反向路径来验证源地址。
最后,你可使用下面的命令经过选择 DROP 或者 REJECT 目标之一来丢弃或者拒绝来自远端主机的欺骗地址。可是,处于安全缘由的考虑,我建议使用 DROP 目标。
像下面这样,用你本身的 IP 地址代替 IP-address 占位符。另外,你必须选择使用 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
这篇文章只提供了如何使用 iptables 防火墙来避免远端欺骗攻击的基础知识。