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参数以可能发出更详细的调试语句。

7e5ddcf2c16897ff2c8281f3369dab15.png

-w, --wait [seconds]

等待xtables锁定。为了防止程序的多个实例同时运行,将尝试在启动时获得独占锁。默认情况下,如果无法获得锁,程序将退出。此选项将使程序等待(无限期或可选秒),直到可以获得独占锁。

-W, --wait-interval microseconds

每次迭代的等待间隔。当运行对延迟敏感的应用程序时,等待xtables锁延长持续时间可能是不可接受的。此选项将使每次迭代占用指定的时间。默认间隔为1秒。此选项仅适用于-w。

-n, --numeric

数字输出。IP地址和端口号将以数字格式打印。默认情况下,程序将尝试将它们显示为主机名、网络名或服务(只要适用)。

-x, --exact

展开数字。显示数据包和字节计数器的精确值,而不是仅以K(1000的倍数)、M(1000K的倍数)或G(1000M的倍数)表示的四舍五入数。此选项仅与-L命令相关。

--line-numbers

列出规则时,将行号添加到每个规则的开头,对应于该规则在链中的位置。

b98094a87f64ee5d461838188293a404.png

--modprobe=command

在链中添加或插入规则时,使用命令加载任何必要的模块(目标、匹配扩展等)。

35c3049e63edbf352124a13fe44aba78.png

匹配和目标模块扩展

iptables可以使用扩展包匹配和目标模块,请参考iptables-extensions手册页中提供的列表信息。

5160f91cd8082411177fe9c5daaf5889.png

诊断信息

将各种错误消息打印为标准错误。退出代码为0,表示正常工作。似乎由无效或滥用的命令行参数引起的错误导致退出代码为2,其他错误导致退出码为1。

ef195e1fecef849bcab07afcec01149e.png

与IPCHAINS的兼容性

这个iptables与Rusty Russell的ipchains非常相似。主要的区别是,链INPUT和OUTPUT仅针对分别进入本地主机和来自本地主机的数据包进行遍历。因此,每个数据包只通过三个链中的一个(环回口流量除外,环回流量同时涉及INPUT和OUTPUT链);之前,转发的分组将通过所有三个。

另一个主要区别是-i表示输入接口,-o表示输出接口,两者都可用于进入FORWARD链的数据包。

各种形式的NAT已被分离出来;当使用默认的“filter”表时,iptables是一个纯数据包过滤器,带有可选的扩展模块。这应该可以简化以前对IP伪装和数据包过滤组合的混淆。因此,以下选项的处理方式不同:

-j MASQ
-M -S
-M -L

4a802f280d09291f139cfe159deaaec2.png

相关命令

0ad93308987f07ee7a88b1de8eb1a9a3.png

iptables-apply、iptables-save、iptables-restore、iptables-extensions。

packet-filtering-HOWTO详细说明了iptables在数据包过滤中的使用,NAT-HOWTO详细说明了NAT,netfilter-extensions-HOWTO详细介绍了不在标准发行版中的扩展,而netfilter-hacking-HOWTO详细描述了netfilter内部。可以参阅:http://www.netfilter.org/。

45566619e4ef24d57d081d9dbc4e6d94.gif

长按二维码
关注我们吧

3601aaac49575f6ee6e8a3209d466da4.jpeg

317091a028afb7c84563199945ded488.png

Wireguard配置文件详解

Wireshark如何解密IPSec报文?

听说你想收集HCL的设备版本?好吧,成全你!

Ubuntu 18.04开启远程桌面连接

还在到处找Win11镜像?自己动手,丰衣足食!

某国产化台式机产品介绍及维护(上)

某国产化台式机产品介绍及维护(下)

strongSwan之ipsec.secrets配置手册

基于TCP的DNS传输:实施要求

什么是NaaS?哪里冒出来的网络即服务?

基于TCP的DNS传输:操作要求

互联网密钥交换 (IKEv2) 协议中的多重认证交换

配置Wireguard的几个进阶玩法

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
iptables命令是用于配置Linux系统的防火墙规则的工具。默认情况下,iptables的默认规则是ACCEPT,即允许所有的网络流量通过。然而,为了提高系统的安全性,我们可以设置INPUT,OUTPUT和FORWARD这些链的默认规则为DROP,即拒绝所有的网络流量。可以使用以下命令来设置默认规则为DROP:iptables -P INPUT DROP,iptables -P FORWARD DROP,iptables -P OUTPUT DROP。\[1\] 除了设置默认规则,iptables还有其他常用的命令。例如,使用iptables -L命令可以查看当前的规则链;使用iptables -F命令可以清除预设表filter中的所有规则链的规则,但要慎用;使用iptables -D num命令可以删除指定的规则;使用service iptables save命令可以保存iptables配置;使用service iptables restart命令可以重启iptables使配置生效。\[2\] 如果你需要清空默认规则或已有规则,可以使用iptables -F或iptables --flush命令来满足你的需求。\[3\] #### 引用[.reference_title] - *1* *3* [25个常用的iptables命令](https://blog.csdn.net/weixin_34205076/article/details/92205200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [iptables命令介绍](https://blog.csdn.net/qq_22543449/article/details/127094308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值