iptables命令简介

922986fb19308399a6af70fb39253d01.gif

正文共:3456 字 22 图,预估阅读时间:3 分钟

iptables/ip6tables命令,用于在Linux内核中设置、维护和检查IPv4和IPv6数据包过滤规则的表,从而实现IPv4/IPv6数据包过滤和NAT的管理工具。它可以定义多个不同的表,每个表中包含多个预定义的链,也可能包含用户自定义的链。每个链都是一个规则列表,用来匹配一组数据包,每个规则都指定如何处理匹配到的数据包,也被称为“目标”,它可能是跳转到同一个表中用户自定义的链。

本文基于iptables 1.4.21进行介绍。

f77a6db305446a50f4aa92949abb1485.png

匹配规则

e998a720ba244ffab9c9c5764473ac53.png

防火墙规则指定数据包和目标的标准。如果数据包不匹配,则检查链中的下一条规则;如果匹配,则下一个规则由目标的值指定,该值可以是用户自定义的链的名称、iptables扩展中描述的目标之一,或者特殊值ACCEPT、DROP或RETURN之一。

ACCEPT(接受)意味着让数据包通过,DROP(丢弃)的意思是把数据包丢弃,RETURN(返回)表示停止遍历此链,并在上一个(调用)链中的下一个规则处继续。如果到达了预定义链的末端,或者与目标为RETURN的预定义链中的规则匹配,则链策略指定的目标将决定数据包的命运。

91f8d65b97ce82be4d99e9abf08258b6.png

命令简介

iptables [-t table] {-A|-C|-D} chain rule-specification
ip6tables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

ad1bc49aef00c8da6af287421741b9cf.png

07c780b0f60b7e896cb9b73074bcd9ed.png

目前有五个独立的表(哪些表随时存在,取决于内核配置选项和存在哪些模块)。

-t, --table table

此选项指定命令应操作的数据包匹配表。如果内核配置了自动模块加载,则会尝试为该表加载适当的模块(如果该表尚未存在)。

各表如下:

00355740ef87a9e66926274746639235.png

filter

filter是默认表(如果未传递-t选项)。它包含预定义链INPUT(用于发往本地套接字的数据包)、FORWARD(用于通过设备路由的数据包)以及OUTPUT(用于本地生成的数据包)。

2838ffc9f673f8d4e2137be32ddbb82c.png

c122a6829fd2fb46fdcc0e3a365dd09f.png

nat

当遇到创建新连接的数据包时,将查阅此表。它由三个内置组件组成:PREROUTING(用于在数据包进入时立即更改数据包)、OUTPUT(用于在路由之前更改本地生成的数据包)和POSTROUTING(用于在即将离开时更改数据包)。IPv6 NAT支持从内核3.7开始提供。

3aa9afa09887003984f846776b4fe6f2.png

5bc71fa9ff158fb64951268546287916.png

mangle

此表用于专用数据包更改。在内核2.4.17之前,它有两个预定义链:PREROUTING(用于在路由之前更改传入数据包)和OUTPUT(用于在路由之前更改本地生成的数据包)。自内核2.4.18以来,还支持其他三个预定义链:INPUT(用于进入设备本身的数据包)、FORWARD(用于更改通过设备路由的数据包)和POSTROUTING(用于在数据包即将出去时更改数据包)。

d5d14365eb01193ec9ed7372789ef79a.png

b7871addfa32c93773b0b3f64f134812.png

raw

此表主要用于结合NOTRACK目标配置连接跟踪豁免。它以较高的优先级在netfilter挂钩处注册,因此在ip_contrack或任何其他ip表之前调用。它提供以下预定义链:PREROUTING(用于通过任何网络接口到达的数据包)、OUTPUT(用于本地进程生成的数据包。

04f0cff29da8b3f888db3ef932ee5984.png

6891a9484eb6a45914d93c44794b4c9f.png

security

此表用于**强制访问控制(Mandatory Access Control,MAC)网络规则,如SECMARK和CONNSECMARK目标启用的规则。强制访问控制由Linux安全模块(如SELinux)实现。security表在filter表之后调用,允许filter表中的所有任意访问控制(Discretionary Access Control,DAC)**规则在MAC规则之前生效。该表提供了以下预定义链:INPUT(用于进入设备本身的数据包)、OUTPUT(用于在路由之前更改本地生成的数据包)以及FORWARD(用于更改通过设备路由的数据包)。

1113af6eda5e6eb6c38f1cffc29f3d8a.png

eacf1cc088881a1a4a4dadbf2513886a.png

操作选项

91043ac3f17781ff17c7c178bab8ce4e.png

iptables和ip6tables识别的选项可以分为几个不同的组。

fdf0450028891e0ae41042877918a173.png

命令

这些选项指定要执行的所需操作。除非下面另有说明,否则只能在命令行中指定其中一个。对于命令和选项名称的长版本,您只需要使用足够的字母,以确保iptables可以将其与所有其他选项区分开来。

-A, --append chain rule-specification

将一个或多个规则附加到选定链的末端。当源和/或目标名称解析为多个地址时,将为每个可能的地址组合添加一个规则。

-C, --check chain rule-specification

检查所选链中是否存在与规范匹配的规则。该命令使用与-D相同的逻辑来查找匹配条目,但不会更改现有的iptables配置,并使用其退出代码来指示成功或失败。

-D, --delete chain rule-specification
-D, --delete chain rulenum

从选定链中删除一个或多个规则。此命令有两个版本:规则可以指定为链中的数字(第一个规则从1开始)或要匹配的规则。

-I, --insert chain [rulenum] rule-specification

在选定的链中插入一个或多个规则作为给定的规则编号。因此,如果规则号为1,则在链的开头插入一条或多条规则。如果未指定规则编号,则使用默认值。

-R, --replace chain rulenum rule-specification

替换选定链中的规则。如果源和/或目标名称解析为多个地址,则该命令将失败。规则编号从1开始。

-L, --list [chain]

列出选定链中的所有规则。如果未选择任何链,则会列出所有链。

bf423ae05a1a6bab2bc1912363d50a6c.png

与其他所有iptables命令一样,它适用于指定的表(默认是filter),如果要查看NAT规则表,则使用命令iptables -t nat -n -L。

56d666393a8c76989978e8926ace8320.png

请注意,它通常与-n选项一起使用,以避免长时间反向DNS查找。指定-Z(零)选项也是合法的,在这种情况下,链将自动列出并归零。确切的输出受其他给定参数的影响。确切的规则将被抑制,除非使用iptables -L -v命令。

227c0b709c3f00cdff3b6188472567f4.png

-S, --list-rules [chain]

打印选定链中的所有规则。如果没有选择链,则所有链都会像iptables-save一样打印。与其他所有iptables命令一样,它适用于指定的表(默认为filter)。

2a496541bad242197c5eebcaa4638e35.png

-F, --flush [chain]

刷新选定的链(如果未给出任何链,则表中的所有链)。这相当于逐个删除所有规则。

dac1448d9c12e351f81d93956de4ee49.png

-Z, --zero [chain [rulenum]]

将所有链中的数据包和字节计数器归零,或者只将给定链归零,或只将给定规则归零。也可以指定-L,–list(list)选项,以便在计数器被清除之前立即查看计数器。

234d86d99fd27b7c1ced049bc3b350fe.png

-N, --new-chain chain

按给定名称创建新的用户自定义链。必须没有该名称的目标。

1946aa03120036a802da331abdaa8394.png

-X, --delete-chain [chain]

删除指定的可选用户自定义链。不能有对链的引用。如果存在,则必须删除或替换引用规则,然后才能删除链。链必须为空,即不包含任何规则。如果没有给出参数,它将尝试删除表中的每个非预定义链。

7f272575cb5e8502e7fffb71ad7c05fb.png

-P, --policy chain target

将链的策略设置为给定的目标。只有内置(非用户自定义)链才能有策略,预定义链和用户自定义链都不能是策略目标。

-E, --rename-chain old-chain new-chain

将用户指定的链重命名为用户提供的名称。这是装饰性的,对表的结构没有影响。

38345cd9e54bfbeb31b02700ac8c7bbf.png

-h Help

给出命令语法的描述(目前非常简短)。

ecf106837bb65727c4e8b374e35dc633.png

1ec0b8daebabdf68731669e034c9175c.png

参数

dc1392ec69f655fdd2e9853d2090c037.png

以下参数构成了规则规范(在add、delete、insert、replace和append命令中使用)。

-4, --ipv4

此选项在iptables和iptables-restore中无效。如果使用-4选项的规则与ip6tables restore一起插入(并且仅与),它将被默默忽略。任何其他使用都会引发错误。

此选项允许将IPv4和IPv6规则放在一个规则文件中,用于iptables-restore和ip6tables restore。

-6, --ipv6

如果使用-6选项的规则与iptables-restore(并且仅与iptables-restore)一起插入,它将被默默忽略。任何其他使用都会引发错误。此选项允许将IPv4和IPv6规则放在一个规则文件中,用于iptables-restore还原和ip6tables-restore。此选项在ip6tables和ip6tables-restore中无效。

[!] -p, --protocol protocol

要检查的规则或数据包的协议。指定的协议可以是tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh或特殊关键字“all”中的一个,也可以是表示这些协议之一或不同协议的数值。还允许使用/etc/protocols中的协议名称。协议前面带“!”参数反转测试。数字0等于所有。

“all”将与所有协议匹配,如果省略此选项,则默认为“all”。请注意,在ip6tables中,不允许使用除esp之外的IPv6扩展头。esp和ipv6-nonext可以与内核2.6.11或更高版本一起使用。数字0等于全部,这意味着您不能直接测试协议字段的值0。要在HBH头上匹配,即使是最后一个,也不能使用-p 0,但始终需要-m HBH。

c2381ed28ee78cdb2c7ca4566eaf6dbe.png

[!] -s, --source address[/mask][,...]

指定源地址。地址可以是网络名称、主机名、网络IP地址(带/mask)或普通IP地址。在规则提交给内核之前,主机名将只解析一次。请注意,使用远程查询(如DNS)指定要解析的任何名称是一个非常糟糕的主意。掩码可以是ipv4网络掩码(用于iptables),也可以是掩码位数(在网络掩码的左侧指定1的数目)。因此,iptables掩码24等于255.255.255.0。指定地址之前的“!”参数表示反转地址。标志–src是此选项的别名。可以指定多个地址,但这将扩展到多个规则(使用-A添加时),或将导致多个规则被删除(使用-D)。

7ecb706946a907efd1caf938df745da5.png

[!] -d, --destination address[/mask][,...]

指定目的地址。有关语法的详细描述,请参见-s(source)标志的描述。标志–dst是此选项的别名。

ca3937008312bda29d86101a7d65eec6.png

-m, --match match

指定要使用的匹配项,即测试特定属性的扩展模块。匹配集构成了调用目标的条件。匹配将按照命令行上的指定先求值后求值,并以短路方式工作,即如果一个扩展产生错误,求值将停止。

-j, --jump target

这指定了规则的目标;例如,如果数据包与之匹配,该怎么办。目标可以是一个用户自定义的链(除了此规则所在的链)、一个立即决定数据包命运的特殊内置目标或一个扩展(参见下面的扩展)。如果在规则中省略了这个选项(并且没有使用-g),那么匹配规则将不会影响数据包的转发,但是规则上的计数器将增加。

-g, --goto chain

这指定处理应在用户指定的链中继续。与–jump选项不同,返回不会在这个链中继续处理,而是在通过–jump调用我们的链中继续。

[!] -i, --in-interface name

接收数据包的接口名称(仅适用于进入INPUT、FORWARD和PREROUTING链的数据包)。当“!”参数在接口名称之前使用,意义颠倒。如果接口名称以“+”结尾,则以该名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。

0d8f428ad105f54b14afd2a390baecdd.png

[!] -o, --out-interface name

将通过其发送数据包的接口的名称(对于进入FORWARD、OUTPUT和POSTROUTING链的数据包)。当“!”参数在接口名称之前使用,意义颠倒。如果接口名称以“+”结尾,则以该名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。

42cb35dd8c6c98ff7175162c4269bc71.png

[!] -f, --fragment

这意味着该规则只涉及分段数据包的第二个和更多的IPv4片段。由于无法告知此类数据包(或ICMP类型)的源端口或目的端口,因此此类数据包将与指定它们的任何规则不匹配。当“!”参数位于“-f”标志之前,则该规则将仅匹配头部片段或未分段的数据包。此选项特定于IPv4,在ip6tables中不可用。

-c, --set-counters packets bytes

这使管理员能够初始化规则的数据包和字节计数器(在INSERT、APPEND和REPLACE操作期间)。

558ae36a4d67a8c326b41aaf947a7bd8.png

其它选项

可以指定以下附加选项:

-v, --verbose

详细输出。此选项使list命令显示接口名称、规则选项(如果有)和TOS掩码。还列出了数据包和字节计数器,后缀“K”、“M”或“G”分别表示1000、1000000和1000000000乘数(但请参见-x标志以更改此情况)。对于附加、插入、删除和替换,这将导致打印规则的详细信息。可以多次指定-v参数以可能发出更详细的调试语句。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

自学提升又不知道该从何学起的朋友。**

[外链图片转存中…(img-qfrh8ili-1715880838380)]

[外链图片转存中…(img-iSrvLKVi-1715880838381)]

[外链图片转存中…(img-savNoRyB-1715880838381)]

[外链图片转存中…(img-qHRuvFEo-1715880838381)]

[外链图片转存中…(img-3bYQCDYp-1715880838382)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值