防火墙与iptables

防火墙是一组规则。当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会根据防火墙规则进行检测,以确定是否允许其通过。

防火墙与iptables_第1张图片
一方面, iptables 是 Linux 机器上管理防火墙规则的工具。

另一方面,firewalld 也是 Linux 机器上管理防火墙规则的工具。

另外一种工具,叫做 nftables。

这一切都从 Netfilter 开始,它在 Linux 内核模块级别控制访问网络栈。几十年来,管理 Netfilter 钩子的主要命令行工具是 iptables 规则集。

因为调用这些规则所需的语法看起来有点晦涩难懂,所以各种用户友好的实现方式,如 ufw 和 firewalld 被引入,作为更高级别的 Netfilter 解释器。然而,ufw 和 firewalld 主要是为解决单独的计算机所面临的各种问题而设计的。构建全方面的网络解决方案通常需要 iptables,或者从 2014 年起,它的替代品 nftables (nft 命令行工具)。

iptables 没有消失,仍然被广泛使用着。事实上,在未来的许多年里,作为一名管理员,你应该会使用 iptables 来保护的网络。但是 nftables 通过操作经典的 Netfilter 工具集带来了一些重要的崭新的功能。

防火墙四表

filter:过滤,防火墙
nat :network address translation 网络地址转换
mangle:拆解报文,作出修改,封装报文
raw: 关闭nat表上启用的链接追踪机制

规则表间的优先顺序:
raw → mangle → nat → filter

防火墙与iptables_第2张图片防火墙五链

PREROUTING :数据包进入路由之前
INPUT :目的地址为本机
FORWARD :实现转发
OUTPUT :原地址为本机,向外发送
POSTROUTING :发送到网卡之前

数据在链中的流动顺序

但是在链中要按表的优先顺序,如在prerouting表时的顺序:
匹配raw中的prerouting → 匹配mangle中的pretouting → 匹配nat中的prerouting
防火墙与iptables_第3张图片
数据包在iptables中的流动顺序

iptables 的表和链:

现在,让我们看看当一个数据包到达时它是怎么依次穿过各个链和表的。基本步骤如下:

1. 数据包到达网络接口,比如 eth0。
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。
3. 如果进行了连接跟踪,在此处理。
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。
6. 决定路由,看是交给本地主机还是转发给其它主机。

到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过:

7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前, 我们仍然可以对数据包进行某些修改。
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。
11. 进入出去的网络接口。完毕。

另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:

7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。
9. 交给本地主机的应用程序进行处理。
10. 处理完毕后进行路由决定,看该往那里发出。
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。
12. 连接跟踪对本地的数据包进行处理。
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。
15. 再次进行路由决定。
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。
19. 进入出去的网络接口。完毕。

各参数的作用

    -t<表>:指定要操纵的表;
    -A:	向规则链中添加条目;
    -D:	从规则链中删除条目;
    -i:	向规则链中插入条目;
    -R:	替换规则链中的条目;
    -L:	显示规则链中已有的条目;
    -F:	清楚规则链中已有的条目;
    -Z:	清空规则链中的数据包计算器和字节计数器;
    -N:	创建新的用户自定义规则链;
    -P:	定义规则链中的默认目标;
    -h:	显示帮助信息;
    -p:	指定要匹配的数据包协议类型;
    -m:	加载其他模块功能;
    -s:	指定要匹配的数据包源ip地址;
    -j<目标>:		指定要跳转的目标;
    -i<网络接口>:	指定数据包进入本机的网络接口;
    -o<网络接口>:	指定数据包要离开本机所使用的网络接口。

iptables配置语句规则

防火墙与iptables_第4张图片防火墙与iptables_第5张图片

! 含义 取反

你可能感兴趣的:(Linux)