欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

零基础入门iptables

时间:2023-05-20

Iptables作为linux的一个服务,可以提供数据包过滤、网络地址转换(nat)、数据包内容修改等功能。但是其实准确的来说,这些功能并不是iptables本身实现的,而位于linux内核中的netfilter才是防火墙真正的安全框架,iptables可以理解成一个命令行工具。

本篇就来讲一讲iptables,也为了后面理解kubernetes网络做铺垫。

基础概念

首先要了解iptables的两个概念:链和表。

链:iptables中的规则称为链,多条规则通过链表的数据结构进行连接。

表:表则是相同功能规则的集合,例如数据包过滤功能的规则在filter表中,提供网络地址转换功能的规则在nat表中。除了常用的filter和nat表,iptables还提供了mangle表,提供拆解报文,修改并重新封装报文的功能。raw表,用来关闭nat表上启用的连接追踪机制。

理解了链和表的概念,那规则到底何时触发呢,下面这张图请牢牢记住

可以看到iptables提供了五个钩子函数,prerouting、input、forward、output、postrouting,数据包在不同的生命周期会匹配对应时机的钩子函数中的规则。

根据流程图可以看出各个钩子函数的执行时机:

PREROUTING 在数据包流入后,路由判断之前触发,存在于raw表,mangle表,nat表中。

INPUT 在数据包经路由判断流入本机上层协议栈之前触发,存在于mangle表,filter表,nat表中。

FORWARD 在数据包经路由判断需转发后触发,存在于mangle表,filter表中。

OUTPUT 在本机上层协议栈发出的数据包经过路由判断之后触发,存在于raw表mangle表,nat表,filter表中。

POSTROUTING 在数据包即将离开本机时触发,存在于mangle表,nat表中。

也可以从图中看出各表中规则执行的先后顺序 raw –> mangle –> nat –> filter

规则查看

了解了基本概念,下面通过实战进行学习。 输入查看命令

iptables -t filter -L

使用-t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则。所以,上述命令列出了filter表的所有规则。

你可以尝试去掉-t filter,iptables默认使用filter表。

输出的参数解释如下:

target:规则匹配成功后需要采取的措施,包括放行(accept)、拒绝(reject)和丢弃(drop)。

prot:表示规则对应的协议。

opt:表示规则对应的选项。

in、out表示流入流出的网卡。

source:表示规则对应的源地址,可以是一个IP,也可以是一个网段。

destination表示规则对应的目的地址,可以是一个IP,也可以是一个网段。

类似的,我们查看一下nat表,

iptables -t nat -vL

这次多加一个-v参数,就多了两列输出:

pkts:对应规则匹配到的包数。

bytes:对应匹配到的包大小总和。

另一个经常使用参数是-n,表示不对IP地址进行名称反解,直接显示IP地址。例如

iptables -t nat -nvL

可以看到,nat表中的规则中的anywhere变成了0.0.0.0/0

新增规则

继续实验,准备两台测试机,例如 192.168.249.11 和 192.168.249.12

清空iptables规则的命令如下,清空两台测试机的规则。

iptables -F

我们通过第二台12机器ping第一台11,发现可以ping通。

在第一台11上执行如下命令添加规则,将来自于192.168.249.12的数据包全部丢掉。

iptables -tfilter -A INPUT -s 192.168.249.12 -j DROP

再次从12 ping 11,发现已无相应,说明规则已生效。

我们再添加一条规则,

iptables -tfilter -I INPUT -s 192.168.249.12 -j ACCEPT

可以发现插入的命令从大a变成了大i,a代表append,表示从链表的结尾插入,i代表insert,表示从链表的开头插入。

再次ping实验,发现又可以ping通了。这说明链表是从前往后进行规则匹配,如果前面的规则对数据包进行了放行(accept),就不再匹配后面的规则。

删除规则

直接将插入命令的-A或-I换成-D,delete即可删掉相应的规则。例如

iptables -tfilter -D INPUT -s 192.168.249.12 -j ACCEPT

另一种方式可以先查看规则的num, 然后按num删除

iptables --line -nvLiptables -D INPUT 1

修改规则需要指明修改之后规则的全部属性,容易出错,所以一般不对规则进行修改,而是先删除旧规则再添加新规则。

保存规则

保存规则到文件中

iptables-save > ~/iptables

从文件中导入规则

iptables-restore < ~/iptables

总结

iptables 规则的增删改查需要考虑以下四个方面

1.表类型,根据表类型确定数据包被如何处理
2.钩子函数类型,根据钩子函数确定规则匹配的时机
3.匹配的参数,即流入流出网络接口、协议类型、来源目的地址、来源目的端口
4.匹配后的动作,放行、丢弃还是拒绝

 

参考 

https://www.zsythink.net/archives/1199

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。