Linux 下的 netfilter 认识与常规操作

Linux 下的 netfilter 认识与常规操作

前言

博客写到今天,1年7个月。可是包含所有写作经历,这个时间线可以达到三年。

上次更新了一篇 “镇站之宝” ,也是本站阅读量第一的文章。

推荐大家仔细阅读,受益匪浅 —— Linux 下Shell 脚本几种基本命令替换区别(6259)


还有一周多,就去参加 Redhat 工程师考试了。这几天在翻阅自己平时积累下来的文章集合,用搜索引擎找了一下发现居然没有 firewall-cmd 也没有 iptables 的相关文章。写过 systemd 架构下的 systemctl 系统状态管理器——systemd 之 systemctl ,以及 systemd-journald 日志审计查询器 —— systemd 之 journalctl

Let's Go TO the world of FIREWALL.

什么是防火墙

防火墙,是网络工程师和系统工程师的共同挡板。

它在 OSI 七层协议中的分别具有以下功能,高级协议包含低级协议。比如网络层的防火墙可以识别来往 IP 地址,亦可识别最底层链路层的 MAC 地址以及物理层传输的帧和 bit 信号(然鹅,通常物理层多数用在数据包封装类型)。

952608-20161204230151521-1702050865.png

早期在参加集团组织的 “网络搭建比赛” 时,写过这篇文章——CCNA学习 NAT网络地址转换

纵观整个网络架构:先有了中继器,用于增长传统网线只有一百米的长度限制(理论通过中继器达到无限);然后对于 “正常的网络架构” 来说,一个连接口只能连接一个网段。为了更好的实现网络连接,出现了 Hub 集线器,这样我们就可以连接俩个网段了;最后,因为 Hub 处于数据链路层只能识辨 MAC 地址并且只有一个 冲突域 ,所以需要全网进行广播代价太大。出现了当今流行的 Switch 交换机,除了带宽上的质变,它最多支持 48 口 将不同网段之间流量交换。并且全部可以处于不同的冲突域,不再需要全网广播仅需要按照 wlan 划分在一个冲突域。

上述都是主机的概念。对于网络来说,路由器也是最重要的组成部分(其实现在的三层交换机已经很强悍了,具有路由功能)。Windows 中 软件防火墙 位于应用层内,网络中的 硬件防火墙 可在第二层至第七层工作。

ipv4%20protocol%20data%20package%20analysis.jpg

Netfilter-packet-flow.svg

注意:如果有时间、有能力,建议仔细观看上图。每一层都被解释的非常透彻,下文会对单层单个程序做简单使用科普教程。

什么是 ebtables

  ebtables程序是一个基于linux的桥接防火墙的过滤工具。它能透明化过滤通过 Linux 桥的网络流量。过滤可能仅仅在链路层过滤以及在高网络层的基本过滤,高级日志记录,MAC DNAT / SNAT 和路由器设备也包括在内。

  ebtables工具可以结合其他 Linux 过滤工具(iptables,ip6tables和arptables)做一个桥接网络防火墙也可以过滤这些更高层次。这是通过 bridge-netfilter 架构是标准 Linux内核 的一部分。ebtables arptables 代码库是由 netfilter开发者 接管维护的软件。

提示: ebtablesiptables 区别在于前者走网桥上的二层流量,后者走路由层面上的三层流量。

1、基本过滤配置

ebtables -P FORWARD DROP
ebtables -A FORWARD -p IPv4 -j ACCEPT
ebtables -A FORWARD -p ARP -j ACCEPT
ebtables -A FORWARD -p LENGTH -j ACCEPT
ebtables -A FORWARD --log-level info --log-ip --log-prefix EBFW
ebtables -P INPUT DROP
ebtables -A INPUT -p IPv4 -j ACCEPT
ebtables -A INPUT -p ARP -j ACCEPT
ebtables -A INPUT -p LENGTH -j ACCEPT
ebtables -A INPUT --log-level info --log-ip --log-prefix EBFW
ebtables -P OUTPUT DROP
ebtables -A OUTPUT -p IPv4 -j ACCEPT
ebtables -A OUTPUT -p ARP -j ACCEPT
ebtables -A OUTPUT -p LENGTH -j ACCEPT
ebtables -A OUTPUT --log-level info --log-ip --log-arp --log-prefix EBFW -j DROP

这是一个基本的过滤器配置,只会让由 IPv4 和 ARP 协议构成的帧通过。同时在网络有了一些旧机器使用以太网帧协议字段作为一个长度字段(他们使用以太网 802.2 或 802.3 协议)。没有理由不让这些机器通过,更准确地来说是:我们有一个 理由/办法 让他们通过 :-) 。所以,这些框架的协议长度表示,它真的是一个被接受的长度字段。当然可以过滤了这些旧机器的 MAC 地址,所以没有其他的机器可以使用旧的以太网 802.2 或 802.3 协议。其他的所有帧被记录并删除。这个日志由协议版本,MAC 地址、ip / arp 信息(当然是ip / arp数据包)和出入接口构成。

2、将IP地址关联到MAC地址(反欺骗规则)

ebtables -A FORWARD -p IPv4 --ip-src 172.16.1.4 -s!00:11:22:33:44:55 -j DROP
iptables -A FORWARD -s 172.16.1.4 -m mac!--mac-source 00:11:22:33:44:55 -j DROP

如果你有很多这样的规则,你也可以使用among匹配来加速过滤。

ebtables -N MATCHING-MAC-IP-PAIR
ebtables -A FORWARD -p IPv4 --among-dst 00:11:22:33:44:55=172.16.1.4,00:11:33:44:22:55=172.16.1.5 \
-j MATCHING-MAC-IP-PAIR

我们首先创建一个新的用户自定义链,MATCHING-MAC-IP-PAIR并使用匹配将所有具有匹配的 MAC-IP 源地址对的流量发送到该链amongMATCHING-MAC-IP-PAIR链中的过滤可以假定 MAC-IP 源地址对是正确的。

3、MAC NAT

ebtables -t nat -A PREROUTING -d 00:11:22:33:44:55 -i eth0 -j dnat --to-destination 54:44:33:22:11:00

If you want to use IP NAT, use iptables.

注意:这个MAC NAT不在乎协议的更高层次。远东 IP 网络层时,主机的 MAC 地址 54:44:33:22:11:00 会发现目的地 IP地址 并不等同于自己的IP地址,可能会丢弃数据包(除非是路由器)。如果你想使用 IP NAT 使用 iptables。

4、只能将IPv4转发给特定的MAC地址

有人形容这种情况:“对于一个奇怪的设置(类半桥:-))我需要一个通用的基于MAC源的过滤器。我需要防止ARP和其他基于Layer2的数据包(DEC诊断数据包,netbios等)从一个 特定的MAC源过桥,防止环路“。...

ebtables -A FORWARD -s 00:11:22:33:44:55 -p IPV4 -j ACCEPT
ebtables -A FORWARD -s 00:11:22:33:44:55 -j DROP

5、Making a brouter

这里是一个 brouter (桥路器(桥接器和路由器的合成语,是一种同时拥有这两种功能的设备))的示例设置,具有以下情况:br0与port -> eth0和eth1。

ifconfig br0 0.0.0.0
ifconfig eth0 172.16.1.1 netmask 255.255.255.0
ifconfig eth1 172.16.2.1 netmask 255.255.255.0
ebtables -t broute -A BROUTING -p ipv4 -i eth0 --ip-dst 172.16.1.1 -j DROP
ebtables -t broute -A BROUTING -p ipv4 -i eth1 --ip-dst 172.16.2.1 -j DROP
ebtables -t broute -A BROUTING -p arp -i eth0 -d $MAC_OF_ETH0 -j DROP
ebtables -t broute -A BROUTING -p arp -i eth1 -d $MAC_OF_ETH1 -j DROP
ebtables -t broute -A BROUTING -p arp -i eth0 --arp-ip-dst 172.16.1.1 -j DROP
ebtables -t broute -A BROUTING -p arp -i eth1 --arp-ip-dst 172.16.2.1 -j DROP

如手册页中所述,实际上 broutes 框架在 BROUTING 链中的 DROP 目标。这意味着桥代码不会触摸 frame,它被发送到网络层就越高。这导致帧进入框架,就好像没有到达 Bridge 的端口而是设备本身。

前两个 ebtables 命令很容易解释:他们确保必须输入 IP 路由的 IP 数据包路由代码通过eth0 (resp.eth1)设备,而不是通过 br0设备。如果你想要 box 也与不同 MAC 目的地址的路由器路由交换,您需要使用重定向目标,改变目的地MAC地址桥的MAC地址(见后续的例子)。

最后四个命令是需要ARP工作的。 当brouter发送一个ARP请求时,比如说172.16.1.5,这个请求通过eth0或者eth1设备发送(我们假设没有使用输出设备br0的路由)。 如果没有第三个ebtables规则,就ARP代码而言,ARP应答将到达br0设备而不是eth {0,1}设备。 这个答复然后被ARP代码丢弃。有了第三条规则,答复到达eth0设备,ARP代码很开心。 所以需要第三条和第四条规则来使ARP代码使用ARP应答。 如果没有第三条规则,brouter将不会将IP数据包发送到172.16.1.5(除非它已经知道172.16.1.5的MAC地址,因此不会一开始就发送ARP请求)。 最后两条命令是需要的,以便172.16.1.1和172.16.2.1的ARP请求被回答。 您可以对ARP数据包使用更严格的匹配(例如,只匹配最后两条规则中的arp请求)。


6、自动负载或更新一个表

为什么我们希望能够自动加载或更新一个表吗?因为这样的表数据在一个步骤给内核。这有时是可取的,以防止当一次添加多个规则竞态条件。最明显的用例中,然而,当表最初填充规则。提交表一次内核可以节省大量上下文切换和内核时间,导致更快的配置。下面简要描述如何做到这一点。示例将使用nat表,当然,这适用于任何表。

最简单的情况是内核表已经包含正确的数据。我们可以做以下的事情:

首先我们把内核的表放入nat_table文件中:

ebtables  -t nat --atomic-file nat_table --atomic-save

然后,我们(可选)将文件中的规则计数器清零:

ebtables -t nat --atomic-file nat_table -Z

在启动时,我们使用以下命令一次将所有内容放入内核表中:

ebtables -t nat --atomic-file nat_table --atomic-commit

我们也可以在文件中建立完整的表格。我们可以使用环境变量 EBTABLES_ATOMIC_FILE

首先我们设置环境变量:

export EBTABLES_ATOMIC_FILE=nat_table

然后,我们用默认的表格初始化文件,默认的表格有空链和策略ACCEPT:

ebtables -t nat --atomic-init

然后,我们添加我们的规则,用户定义链,更改策略:

ebtables -t nat -A PREROUTING -j DROP

我们可以检查我们的表的内容:

ebtables -t nat -L --Lc --Ln

然后,我们使用下面的命令将所有内容都放入内核表中:

ebtables -t nat --atomic-commit

不要忘记取消设置环境变量:

unset EBTABLES_ATOMIC_FILE

现在所有的 ebtables 命令将再次执行到实际的内核表上,而不是在 nat_table 文件上。

7、使用ebtables过滤未被奴役的接口

如果你真的需要在一个接口上进行过滤,并且不能使用标准的方法(即协议没有标准的过滤工具),那么如果你只需要基本的过滤,就有一个解决方案。

我们认为这里的情况基本可路由协议组过滤是必要的。作为Linux没有可路由协议组过滤机制,我们需要别的东西。下面的例子是计算机也使用IP协议。显然,如果您只需要过滤IP的东西,只使用iptables。IP协议包含在这个,因为它给出了一个配置可能需要的其他协议(如可路由协议组)。如果电脑确实使用IP协议,那么以下IP的东西需要做的。

前三个命令确保ebtables将看到在eth0上输入的所有流量,这将是br0的桥接端口。其他命令纯粹是IP相关的。

首先做一个桥接设备:

brctl addbr br0

然后(也许)禁用该网桥上的生成树协议:

brctl stp br0 off

然后将物理设备eth0添加到逻辑网桥设备:

brctl addif br0 eth0

将eth0的IP地址提供给桥接设备,并将其从eth0中删除:

ifconfig br0 172.16.1.10 netmask 255.255.255.0
ifconfig eth0 0.0.0.0

路由表也必须修改,f.e。

route del -net 172.16.1.0 netmask 255.255.255.0 dev eth0
route add -net 172.16.1.0 netmask 255.255.255.0 dev br0
route del default gateway $DEFAULT_GW dev eth0
route add default gateway $DEFAULT_GW dev br0

所以,现在所有IP流量最初经历了eth0 将通过br0。注意,这是一种黑客:使用只有一个被奴役的桥梁设备。然而,现在ebtables将看到的所有流量通过eth0,因为eth0现在是港口设备br0的桥梁。

使用其他协议(例如可路由协议组)必须配置为接受br0的交通(而不是eth0)和传输流量br0 (而不是eth0)。

另外,这可以结合使用路由器的功能。过滤可路由协议组的一个现实生活中的例子,可以发现在现实生活中的例子部分,使用这种方法。由于性能的原因,最好是使用路由器的方法,看下面的例子来找出原因。

8、加速大桥本身的交通

在某些情况下,桥梁不仅可以作为桥接器,还可以与其他主机进行通话。到达桥接端口且到达桥接盒本身的数据包将默认进入INPUT带有逻辑桥接端口作为输入设备的iptables 链。这些数据包将被网络代码排队两次,这是在网络设备接收到它们之后的第一次排队。网桥代码第二次检查了目标MAC地址后,确定它是一个本地目的地的数据包,因此决定将帧传递给更高的协议栈。

让本地destinated数据包的方式进行排队,只有一次是在brouting他们BROUTING的链broute 表。假设br0有一个IP地址,br0的网桥端口没有IP地址。使用以下规则应使所有本地定向的流量只排队一次:

ebtables -t broute -A BROUTING -d $ MAC_OF_BR0 -p ipv4 -j重定向-redirect-target DROP

网桥的回应将通过br0设备发送出去(假设你的路由表是正确的,并且通过br0发送所有的流量),所以一切都保持工作状态,没有两次排队造成的性能损失。

重定向目标是必需的,因为网桥端口的MAC地址不一定等于网桥设备的MAC地址。目标MAC地址与网桥br0的目的MAC地址相同,目的地址必须改变为网桥端口的目的MAC地址。

9、使用mark匹配和目标

说有3种类型的流量要标记。最好的标记值是2的幂,因为这些转化为unsigned long标记值中的一个位。所以,由于我们有三种类型的流量,我们将使用标记值1,2和4.
我们如何标记流量?简单的,过滤掉你需要的确切流量,然后使用标记目标。例如:
在过滤表的FORWARD链中标记通过eth0以第二个标记值输入的所有IP流量; 让后来的规则有机会看到帧/数据包。

ebtables -A FORWARD -p ipv4 -i eth0 -j标记--set-mark 2  -  mark-target继续

假设我们想对所有标记有第一个标记值的帧做些什么:

ebtables -A FORWARD  - 标记1/1

假设我们想要对所有标记有第一个标记值或第三个标记值的帧做些什么:

ebtables -A FORWARD  - 标记/ 5

1 + 4 = 5。我们只指定mark掩码,这会导致帧的逻辑和标记值与指定的标记掩码相同,并检查结果是否为非零。所以,如果结果是非零的,也就是说标记值是1,无论是4还是5,规则都是匹配的。

请注意,iptables unsigned long为其mark匹配和MARK目标使用相同的值 。所以这使得ebtables和iptables之间的通信成为可能。确保iptables中使用的标记值和ebtables中使用的标记值不会相互冲突。

10、使用arpreplyarp请求并让arp请求填充arp缓存

arpreply目标只能在使用PREROUTING 所述的链nat表和它的默认目标是DROP。因此,下面的规则将阻止更新桥接器的arp缓存:

ebtables -t nat -A PREROUTING -p arp --arp-opcode请求-j arpreply \
--arpreply-mac 10:11:12:13:14:15

这可以通过将目标更改为ACCEPTCONTINUE:

ebtables -t nat -A PREROUTING -p arp --arp-opcode请求-j arpreply \
--arpreply-mac 10:11:12:13:14:15  - 准备好目标ACCEPT

11、将目标IP和MAC地址更改为相应的广播地址

这是不可能的一个标准的方式,但它是可能的一些技巧。假设你想要将流量引导到192.168.0.255,那么这应该工作:

#假设没有路由到192.168.0.0呢
路由add -net 192.168.0.0 netmask 255.255.255.0 dev br0
ifconfig br0 0.0.0.0
arp -s 192.168.0.255 ff:ff:ff:ff:ff:ff
iptables -t nat -A PREROUTING -j DNAT  - 到目的地192.168.0.255

桥接设备的地址范围不应该在192.168.0.0/24范围内,因为如果这样做,路由选择代码将不会决定通过桥接设备发送数据包。

12、将数据包复制到用户空间进行日志记录

ulog观察者将分组传送到使用网络链路多播套接字用户空间日志守护进程。这与日志观察者的不同之处在于,完整的数据包被发送到用户空间而不是描述性文本,并且使用netlink组播套接字而不是syslog。这个观察者启用用户空间程序解析数据包。发送这个信息给用户空间很简单,只需使用ulog观察者。物理网桥的输入和输出端口也包含在netlink消息中。

例如,下面的规则将所有被转发的数据包发送到侦听网络链路组编号为5的用户空间程序,然后丢弃数据包:

ebtables -A FORWARD --ul-nlgroup 5 -j DROP

要读取发送到用户空间的数据包,需要编写一个程序。在examples/ulog/ ebtables目录下,您可以在C中找到一个工作示例,查找ICMP回应请求和回复。请参阅INSTALL汇编。

Gustavo JAM Carneiro <gjc_at_inescporto.pt>编写了一些Python代码,可以使用Python代码查看数据。这些是他发布的文件:ebtulogmodule_CC.culog_GC.c

13、启用支持同时运行ebtables工具

更新ebtables内核表是一个两阶段的过程。首先,用户空间程序将新表发送到内核,并接收旧表中规则的包计数器。在第二阶段,用户空间程序使用这些计数器值来确定已经在内核中激活的新表的初始计数器值。这些值被发送到内核,将这些值添加到内核的计数器值。由于这个两阶段过程,当多个实例同时运行时,可能会混淆ebtables用户空间工具。请注意,即使在一个阶段的过程中,也可能会混淆工具。

ebtables工具支持一个名为的选项--concurrent,这使ebtables工具在读取和更新内核表之前首先获取特定文件的锁定。只要确保所有ebtables进程在启用此选项的情况下运行,就不会同时运行ebtables进程。如果您的防火墙脚本可以同时运行,请确保启用此选项。

另一种方法是flock在脚本中使用该工具。

当ebtables进程在按住文件锁的同时意外崩溃时,程序的后续执行将无法获得该锁。在这种情况下,您将需要显式删除锁定文件/var/lib/ebtables/lock

14、用多个网络关闭IP安全漏洞

当网桥被配置为允许iptables或ip6tables过滤桥接通信时,必须小心,以防止不可预见的安全漏洞。遍历所有网桥上的所有IP数据包的iptables链。如果有多个网桥,则必须确保由不同网桥转发的数据包不会干扰iptables规则。避免这种情况的一个简单方法是,为每个桥接网络使用不同的IP子网。当然这并不总是可能的。当您允许iptables过滤封装在vlan或pppoe标头中的桥接IP流量时,类似的担心会引起注意。

多桥情况尤其是连接跟踪的潜在问题,因为这不考虑输入和输出接口。对于所有其他IP流量,vlan / pppoe场景也是一个潜在的问题,因为iptables本身不知道vlan id或pppoe会话id。

但是,可以让iptables通过使用ebtables的标记目标来间接地了解这些细节。在下面的示例中,我们使用netfilter的连接跟踪区域机制来分隔具有vlan id 1和vlan 5的桥接vlan流量之间的连接跟踪。

#设置连接跟踪区域
iptables -t raw -A PREROUTING -m标记 - 标记1 -j CT  - 区域1
iptables -t raw -A PREROUTING -m标记 - 标记2 -j CT --zone 2
#根据vlan id标记报文
ebtables -t nat -A PREROUTING -p 802_1Q --vlan-id 1 -j mark --mark-set 1
ebtables -t nat -A PREROUTING -p 802_1Q --vlan-id 5 -j mark --mark-set 2

什么是 firewalld

ebtables 和 iptables 是 netfilter 框架中的两个部分。 FirewallD 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:

  1. FirewallD 使用区域和服务而不是链式规则。
  2. 它动态管理规则集,允许更新规则而不破坏现有会话和连接。

1、实例

irewallD 可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。 默认支持的服务的配置文件位于 /usr/lib /firewalld/services,用户创建的服务文件在 /etc/firewalld/services 中。

要查看默认的可用服务:

sudo firewall-cmd --get-services

比如,要启用或禁用 HTTP 服务:

sudo firewall-cmd --zone=public --add-service=http --permanentsudo firewall-cmd --zone=public --remove-service=http --permanent
允许或者拒绝任意端口/协议

比如:允许或者禁用 12345 端口的 TCP 流量。

sudo firewall-cmd --zone=public --add-port=12345/tcp --permanentsudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
端口转发

下面是在同一台服务器上将 80 端口的流量转发到 12345 端口。

sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

要将端口转发到另外一台服务器上

1、 在需要的区域中激活 masquerade。

sudo firewall-cmd --zone=public --add-masquerade

2、 添加转发规则。例子中是将本地的 80 端口的流量转发到 IP 地址为 :123.456.78.9 的远程服务器上的 8080 端口。

sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

要删除规则,用 --remove 替换 --add。比如:

sudo firewall-cmd --zone=public --remove-masquerade
用 FirewallD 构建规则集

例如,以下是如何使用 FirewallD 为你的服务器配置基本规则(如果您正在运行 web 服务器)。

  1. eth0 的默认区域设置为 dmz。 在所提供的默认区域中,dmz(非军事区)是最适合于这个程序的,因为它只允许 SSH 和 ICMP。
sudo firewall-cmd --set-default-zone=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0

2、 把 HTTP 和 HTTPS 添加永久的服务规则到 dmz 区域中:

sudo firewall-cmd --zone=dmz --add-service=http --permanentsudo firewall-cmd --zone=dmz --add-service=https --permanent

3、 重新加载 FirewallD 让规则立即生效:

sudo firewall-cmd --reload

如果你运行 firewall-cmd --zone=dmz --list-all, 会有下面的输出:

dmz (default)  interfaces: eth0  sources:  services: http https ssh  ports:  masquerade: no  forward-ports:  icmp-blocks:  rich rules:

这告诉我们,dmz 区域是我们的默认区域,它被用于 eth0 接口中所有网络的源地址端口。 允许传入 HTTP(端口 80)、HTTPS(端口 443)和 SSH(端口 22)的流量,并且由于没有 IP 版本控制的限制,这些适用于 IPv4 和 IPv6。 不允许IP 伪装以及端口转发。 我们没有 ICMP 块,所以 ICMP 流量是完全允许的。没有丰富Rich规则,允许所有出站流量。

2、进阶

高级配置

服务和端口适用于基本配置,但对于高级情景可能会限制较多。 丰富Rich规则和直接Direct接口允许你为任何端口、协议、地址和操作向任何区域 添加完全自定义的防火墙规则。

丰富规则

丰富规则的语法有很多,但都完整地记录在 firewalld.richlanguage(5) 的手册页中(或在终端中 man firewalld.richlanguage)。 使用 --add-rich-rule--list-rich-rules--remove-rich-rule 和 firewall-cmd 命令来管理它们。

这里有一些常见的例子:

允许来自主机 192.168.0.14 的所有 IPv4 流量。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

列出你目前的丰富规则:

sudo firewall-cmd --list-rich-rules
iptables 的直接接口

对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个直接Direct接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 --permanent

要查看添加到 FirewallD 的所有自定义链或规则:

firewall-cmd --direct --get-all-chainsfirewall-cmd --direct --get-all-rules

讨论 iptables 的具体语法已经超出了这篇文章的范围。如果你想学习更多,你可以查看我们的 iptables 指南

什么是 ip-rule

“ip-rule” 操纵路由策略数据库中的规则控制路由选择算法。简单来说是:控制路由选择的过程。

参考鸣谢:

TUNA

ebtables 官方手册

CentOS 上的 FirewallD 简明指南

OSI模型中,一个协议应该属于哪一层是以什么为标准划分的?

转载于:https://www.cnblogs.com/itxdm/p/Linux_several_firewalls_iptables_arptables_ebtables_awareness_and_general_operation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值