Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811

什么是 防火墙IP TABLES


关注星融元


IP Tables相关名词释义

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

IP Tables的发展历史

目前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已在Linux内核中集成

IP Tables原理简介

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

数据包在内核中的处理路径

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

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

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创建出可靠的防火墙策略。

IP Tables的应用场景

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

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

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

IP Tables的部署实例

首先,简单了解下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表示初始令牌数量以及令牌桶的最大容量。

IP Tables的配置总结

IP Tables的配置

相关文章

在交换机上配置部署 RoCEv2 / EVPN-VXLAN / MC-LAG


关注星融元


本文主要描述如何在Asterfusion CX306P-48S(以下简称CX306P)搭建的模拟网络上部署如下解决方案:

  • RoCEv2:在模拟网络上承载RDMA应用,通过CX306P的PFC和ECN功能,为所承载的RDMA应用构建无损的RoCEv2环境。
  • BGP EVPN和VXLAN:在模拟网络上承载VXLAN网络,将原本在Open vSwitch上进行的封装、去封装全部从Server端卸载到CX306P内的VTEP上,并且在模拟网络上启动BGP EVPN,自动化地创建VXLAN隧道、传递虚拟网络路由。
  • MC-LAG:在模拟网络上为服务器创建一个高可靠环境,确保每台服务器都能通过标准LAG双上联到两台CX306P上,这两台CX306P通过MC-LAG被虚拟化成一台高可靠的交换节点。

如上解决方案共用一个物理拓扑,如图1所示:

CX-N的部署拓扑图

部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:

设备名称接口IP地址
交换机A管理口192.168.4.102
交换机B管理口192.168.4.105
Server1管理口192.168.4.2
Server2管理口192.168.4.133
Server3管理口192.168.4.150

RoCEv2 / EVPN-VXLAN / MC-LAG部署的硬件与软件环境

部署环境中涉及到的硬件和软件如下表所示:

名称型号硬件指标数量备注
交换机CX306P《参见产品彩页》2
服务器1、至少8G内存
2、磁盘不少于500G
3、Server1和Server3的BIOS开启CPU嵌套虚拟化(INTEL:VT-x, AMD:AMD-V)
3Server1和Server3各需要安装一块Mellanox ConnectX-4网卡(25G)
光模块10GSFP+12
100GQSFP284
光纤多模10G/25G适用6
多模100G适用2
软件版本备注
操作系统Centos7.6安装时选择Compute Node 模式,根目录/至少500G
iperf3可以直接yum install iperf3安装,3台server均需要安装
Mellanox网卡驱动4.7-3.2.9.0具体参考《解决方案-Mellanox网卡驱动安装-e-20200211-v1.1》
tcpdump可以直接yum install tcpdump

RoCEv2的配置部署

逻辑组网与配置思路

RoCEv2的配置部署 逻辑组网与配置思路

配置思路:

  • 为交换机A和交换机B配置IP和路由
  • 分别为Server1、Server2、Server3配置IP和路由网关
  • 配置Server1的PFC功能
  • 配置交换机A的ACL打标DSCP功能
  • 使能交换机A和交换机B的QOS功能
  • 先在Server1发送IB流量,观察队列流量
  • 停掉Server1上的流量发送,在Server2发送普通TCP背景流量,观察队列流量
  • 观察ACL规则匹配情况
  • 将Server1和Server2的流量都打起来,观察交换机B的出口拥塞情况
  • 配置交换机A和交换机B的PFC功能
  • 观察测试PFC功能
  • 关闭交换机A和交换机B的PFC功能,配置交换机B的ECN功能
  • 配置服务器ECN相关设置
  • 测试ECN功能

BGP EVPN和VXLAN配置部署

逻辑组网与配置思路

BGP EVPN和VXLAN配置部署逻辑组网与配置思路

配置思路:

  • 配置交换机A和交换机B的HOSTNAME
  • 配置交换机A的EVPN
  • 配置交换机B的EVPN
  • Server1上创建虚机和VLAN
  • Server3上创建虚机和VLAN
  • 测试Server1和Server3的连通性
  • 查看交换机A的路由信息
  • 查看交换机B的路由信息

MC-LAG的配置部署思路

逻辑组网与配置思路

MC-LAG的配置部署思路 逻辑组网与配置思路

配置思路:

  • 分别为Server1、Server3配置LAG
  • 交换机A创建PortChannel,并添加接口
  • 交换机A创建VLAN,并添加成员
  • 交换B创建PortChannel,并添加接口
  • 交换机B创建VLAN,并添加成员
  • 交换机A配置MC-LAG
  • 交换机B配置MC-LAG
  • 测试链路故障
  • 测试设备故障

全文请注册/登录后获取:https://asterfusion.com/d-20220617/

相关文章

对星融元产品感兴趣?

立即联系!

返回顶部

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