iptabels预定义了4表,分别是raw表,mangle表,nat表,filter表,不同的表拥有不同的功能。
以filter表为例,它主要进行数据包的过滤,比如允许哪些IP地址访问,拒绝哪些IP地址;允许访问哪些端口,禁止访问哪些端口,filter会根据我们定义的规则进行过滤。
查看filter表中的规则
-t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则
上图中,显示出三条链:INPUT链、OUTPUT链、FORWARD链,每条链中都有自己的规则;
例如,我们需要禁止某个IP地址访问我们的主机,则需要在INPUT链上定义规则;在生产环境中,在哪条链上定义规则,取决于实际的工作场景,所以,如果我们想要禁止某些报文发往本机,我们只能在PREROUTING
和INPUT
链中定义规则;但是PREROUTING
链并不存在于filter
表中,换句话说就是,PREROUTING链本身就没有过滤数据包的能力,所以我们只能在INPUT链中定义规则。
查看指定链的规则,省略-t选项默认为filter表
使用-v选项查看更多、更详细的内容:
字段的含义:
pkts # 对应规则匹配到的报文的个数
bytes # 对应匹配到的报文包的大小总数
target # 规则对应的“动作”,即规则匹配成功后需要采取的措施
prot # 规则对应的协议,是否只针对某些协议应用此规则
opt # 规则对应的选项
in # 表示数据包由哪个网卡流入,可以设置通过哪块网卡流入的报文需要匹配的规则
out # 表示数据包由哪个网卡流出,可以设置通过哪块网卡流出的报文需要匹配的规则
source # 规则对应的源地址,IP、网段
destination # 规则对应的目标地址,IP或网段
图中的源地址和目标地址都为anywhere,iptables默认为我们进行了地址解析,但是在规则非常多的情况下如果进行地址解析,效率会比较低,所以可以使用-n选项,表示不对IP地址进行解析,直接显示IP地址。
--line-numbers可显示规则的编号,如下:
可以看到图中每个链的括号中都有一些信息,分别表示什么呢?
1.policy:表示当前链的默认策略,policy ACCEPT表示上图中INPUT链的默认动作为ACCEPT,默认接受通过INPUT链的所有请求;
我们在配置INPUT链的具体规则是,应该将需要拒绝的请求配置到规则中,设置“黑名单”机制。
2.packets:表示当前链默认策略匹配到的包的数量;0 packets表示默认策略匹配到0个包。
3.bytes:表示当前链默认策略匹配到的所有包的大小总和。
命令总结
1.iptables -t [表名] -L
查看对应表的所有规则,-t指定表,可省略,默认为filter表;-L表示列出规则
2.iptables -t [表名] -L [链名]
查看指定表中指定链中的规则
3.iptables -t [表名] -v -L
查看指定表中所有规则,并显示出更详细的信息
4.iptables -t [表名] -n -L
查看表中所有规则,-n选项表示不进行IP地址解析
5.iptables -t [表名] -L --line-numbers
查看表中所有规则,--line-numbers选项表示显示规则的序号,可简写为--line