开放网络的先行者与推动者—星融元
技术支持(Support)  TEL:(+86)4000989811
技术
2022-06-07
关键词
技术

RoCEv2 / EVPN-VXLAN / MC-LAG的部署

2022-06-07

名词释义

  • iptablesiptables是一个用户空间工具,系统管理员可以通过它配置Linux内核防火墙的IP数据包的过滤规则,而这些规则的具体实现是由内核空间的netfilter完成的;
  • netfilternetfilter是4.x版本Linux内核开始引入的一个子系统,它作为一个通用的、抽象的框架,提供一套完整的hook函数管理机制,实现了诸如数据包过滤、网络地址转换和基于协议类型的连接跟踪等功能;
  • hook函数:Linux内核中的有一套hook函数机制,可在不同hook点位置监控网络数据包,并执行丢弃、修改等操作,Linux内核的网络防火墙就是通过此机制实现的。

发展历史

目前iptables已在2.4、2.6及3.0版本的Linux内核中集成,旧版的Linux内核则使用ipchains及ipwadm来达成类似的功能,而2014年1月19日起发行的新版Linux内核(3.13+)则使用nftables取代iptables。

  • Linux内核(2+):ipwadm;
  • Linux内核(2):ipchains;
  • Linux内核(4、2.6、3.0+):iptables;
  • Linux内核(13+):nftables。

iptables虽然强大但是不可能永远适用于当前的技术发展,任何技术都有其局限性。位于用户空间的iptables,也在被抛弃,RHEL7/CentOS7中已经不再直接使用iptables,而选择firewalld作为他的前端配置工具。

原理简介

管理工具iptables是与内核网络协议栈中有包过滤功能的5个hook交互来完成工作的,这些内核hook构成netfilter框架。每个进出网络的包在经过协议栈时都会触发这些hook,数据包在内核中的处理路径如下图所示。

通过iptables下发的规则,最终都会与上图中标注的5个hook点位关联。iptables将这些规则,按照不同的作用划分到不同的表中,按照划分常用的有raw、mangle、filter、nat四张表,即为四表。而关联在5个hook点位的有优先级顺序的规则链,即为五链。这种配置管理逻辑,也就是使用iptables的人都最为熟知的“四表五链”。

下面是iptables常用的四种table类型及其具体作用:

  • Filter table是最常用的table之一,用于判断是否允许一个包通过;
  • Nat table用于实现数据包的IP地址转换;
  • Mangle table用于修改包的IP头;
  • Raw tableiptables防火墙是有状态的,raw table其唯一目的就是让数据包绕过连接跟踪机制。

表和链的组织逻辑是:不同的表可以作用在不同的链(hook点位)中,在具体链中多种表之间又有优先级顺序,具体如下图所示,红色箭头方向表示各表的优先级顺序依次从高到低排列。

我们通过iptables下发的规则就放置在特定table的特定chain里面,当chain被触发调用的时候,包会依次匹配chain里面的规则,每条规则都有一个匹配部分和一个动作部分。规则的匹配部分指定了一些条件,数据包必须满足这些条件才会和将要执行的动作进行关联。匹配系统非常灵活,还可以通过iptables extension扩展其功能。规则可以匹配协议类型、源目地址、源目端口、源目网段、接收或发送的网卡、协议头、连接状态等条件。这些综合起来,能够组合成非常复杂的规则来区分不同的网络流量。

总结

netfilter包过滤框架和iptables是Linux服务器上大部分防火墙解决方案的基础。其中,netfilter的内核hook与Linux内核协议栈配合得足够紧密,提供了数据包在经过系统时的强大控制能力。而iptables正是基于这些能力提供了一个灵活的、可扩展的、将策略需求转化到内核的方法。理解了这些不同部分是如何联系到一起的,就可以使用iptables创建出可靠的防火墙策略。

应用场景

通过上文可以清楚地了解到,iptables其实是存在于操作系统应用层,作为配置内核中安全框架netfilter的一个客户端。通过iptables可以实现常规防火墙的几乎所有的功能,包括但不限于:

  • 提供基于状态的源目IP地址、源目端口、访问时间等维度的访问控制;
  • 提供双向NAT能力,配合Linux的网络工具可以在网络出口实现链路负载均衡功能;
  • 利用iptables的limit模块,可以实现轻量的DDoS攻击防护;
  • 利用iptables的connlimit模块,可以防护CC攻击;
  • 利用iptables的string模块,对数据包中的内容进行检查,实现报文深度过滤或者数据脱敏功能;
  • 按需管理iptables的日志,可以为不同规则设置不同的日志标识,以便灵活记录数据流日志。

除了作为常规的主机/网络防火墙外,iptables也作为重要的网络组成部分,存在于Docker、K8S、OpenStack的Neutron项目以及众多成熟且应用广泛的开源项目中。

部署实例

首先,简单了解下iptables命令的语法格式,命令格式可分解为如下几部分。

iptables -t <table> <cmd> <pattern> <action>

其中,-t <table>或–table <table>选项用来指定要查看或修改的表(raw、mangle、nat、filter),命令行在不使用-t参数时默认为filter表。<cmd>部分可选择对规则要进行的操作,即增删改查操作,<pattern>为规则的匹配部分,<action>为安全规则的动作部分,对匹配到的数据包做指定的动作。

  1. 屏蔽指定IP地址:

若发现某个恶意攻击者并确定其IP地址,此时可以使用如下命令将指定IP的数据包丢弃。

BLOCK_THIS_IP=”x.x.x.x”

iptables -A INPUT -i eth0 -p tcp -s “$BLOCK_THIS_IP” -j DROP

此命令行,<cmd>部分使用-A INPUT参数将屏蔽规则插入到filter表(默认)的INPUT链尾。

  1. 网卡流量转发:

如果在某些场景下使用服务器作为网关,则可能需要两张网卡分别接内网和公网,然后需要将内网的网卡流量转发到连接到公网的网卡中,可以使用iptables实现此功能,命令行如下所示。

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

  1. 端口流量转发:

若需要进行端口级别的流量转发,使用iptables同样可以完成,此命令会将2222端口流量转发到22。

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.5 –dport 2222 -j DNAT –to 192.168.1.5:22

  1. 使用扩展模块实现WEB流量简单负载:

下面将使用nth扩展模块,将80端口流量负载均衡到三台服务器。

iptables -A PREROUTING -i eth0 -p tcp –dport 80 -m state –state NEW -m statistic –mode nth –every 3 –packet 0 -j DNAT –to-destination 192.168.1.11:80

iptables -A PREROUTING -i eth0 -p tcp –dport 80 -m state –state NEW -m statistic –mode nth –every 2 –packet 0 -j DNAT –to-destination 192.168.1.12:80

iptables -A PREROUTING -i eth0 -p tcp –dport 80 -m state –state NEW -m statistic –mode nth –every 1 –packet 0 -j DNAT –to-destination 192.168.1.13:80

在上面的命令行中,采用statistic模块的nth模式来实现轮询的负载均衡效果,参数含义如下:

–every n表示每n个命中就会真正执行一次;

–packet p表示在这条规则的第几次命中时真正执行(0<=p<=n-1)。

需要注意的是,每条规则有独立的计数器,因此-m statistic –mode nth –every 3 –packet 0表示每三个包触发一次动作,在第0次命中时执行动作,在第1次和第2次命中后不触发动作,而是将数据包交给下一条规则处理。同理,第二个包的匹配规则为-m statistic –mode nth –every 2 –packet 0,第三个包的匹配规则为-m statistic –mode nth –every 1 –packet 0。

  1. 使用扩展模块实现DDoS流量清洗:

下面将使用limit扩展模块,来实现简单的DDoS攻击流量清洗。

iptables -A INPUT -p tcp –dport 80 -m limit –limit 5/minute –limit-burst 100 -j ACCEPT

       关于limit限速模块,各参数的含义如下:

–limit n/s表示s时间段内会新签发n个令牌,时间单位有秒、分、时、天;

       –limit-burst m表示初始令牌数量以及令牌桶的最大容量。

配置总结

关注我们

对星融元产品感兴趣?

立即联系我们

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2