iptables基础

举报
黄生 发表于 2022/07/17 19:44:08 2022/07/17
【摘要】 Iptables为用户空间,Netfilter为内核空间。iptables工具操作netfilter数据包过滤表/规则集。Iptables工作原理图:创建一条iptables规则的语法:iptables [-t table] command [match] [target]规则表有3个:filter, nat, mangle。默认为filter。filter包含3个内建的规则链Chain:I...

Iptables为用户空间,Netfilter为内核空间。iptables工具操作netfilter数据包过滤表/规则集。

创建一条iptables规则的语法:

iptables [-t table] command [match] [target]

规则表有3个:filter, nat, mangle。默认为filter。

  1. filter 过滤
    包含3个内建的规则链Chain:INPUT, FORWARD, OUTPUT.
    处理动作是过滤,如DROP, LOG, ACCEPT, REJECT等

  2. nat IP地址转换
    处理遇到了产生新的连接的包,3个内置规则链:PREROUTING, OUTPUT, POSROUTING.
    PREROUTING是把访问重定向到其他机器上,即改变目的地址。

  3. mangle 修改IP业务标志
    改变包的TOS, TTL, MARK等特性。使用率不高。

内建的规则链,和我新建的规则链有什么不同呢?
当然是有不同的,我觉得默认的规则链是与路由相连的,从名字上就可以理解他们与路由的关系。

command用来操作规则,比如插入/添加(-Insert -Append)、删除(-Del -Replace -Flush)、查看规则(-List)、新建规则链(-New)等。

如:
-D INPUT 1 (规则从1开始数起,不是从0开始)

match用来定义匹配的特征,比如源、目的地址,协议等。

如:
-A INPUT ! -i eth0 -j DROP (本机ping自己eth0的IP也不通的,其他机器可以ping通)
-A INPUT ! -s 192.168.109.4 -p tcp --dport 80 -j REJECT
用非!逻辑运算符时,要放在匹配表达式的最前面。看一下:

Chain INPUT (policy ACCEPT 981 packets, 168K bytes)
 pkts bytes target     prot opt in     out     source               destination
   12  1008 DROP       all  --  !eth0  *       0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     tcp  --  *      *      !192.168.109.4        0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

我们经常可以看到下面这样的配置。
它的作用是为了抵御来自外网的网络连接(可能的攻击),所以会丢弃NEW和INVALID状态的包,
但是并不禁止内部发起的连接和后续的通信。

-A INPUT -i eth0 -m state -state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -j DROP

target是执行的动作,用-j指定。如ACCEPT, REJECT, DROP, REDIRECT, MASQUERADE, LOG等。
比如ACCEPT是将封包放行,不再匹配本链中其他规则,跳往下一个规则链。

来看一下数据流动时,netfilter的处理过程。
在IPv4中定义有5个HOOK,位置如下:

image.png

  1. NF-IP-PRE-ROUTING 刚刚进入网络层的数据包通过这里,源地址转换在这里进行
  2. NF-IP-LOCAL-IN 经过路由查找后,送往本机的数据包通过这里。filter > INPUT链在这里进行匹配过滤
  3. NF-IP-FORWARD 经过路由查找后,要转发的数据包通过这里。filter > FORWARD链在这里进行匹配过滤
  4. NF-IP-POST-ROUTING 所有马上要通过网络设备出去的数据包经过这里。内置的源地址转换功能(包括地址伪装)在这里进行。
  5. NF-IP-LOCAL-OUT 本机进程发出的数据包通过这里。filter > OUTPUT链在这里进行匹配过滤

可以看到,5在4之前,同时注意2次ROUTE(路由处理)的位置。
(参考 <网络运维与管理 2014> 管理局域网流量)

这个图有链名称,更清晰一点:
image.png

还有这个,加上了对应的表和链:
image.png

查看当前规则,可以用:iptables -L
其输出比较简单,有时候有些细节没有展示,会觉得规则难以理解,需要展示详细信息,并且直接展示端口号:iptables -L -n -v。这样的话会展示in out的网络接口,有些规则可能指定了只在某些接口上生效,比如lo,还有规则匹配到的封包数、字节数这些流量信息也有展示。
iptables-save可以保存当前系统中生效的规则。
-P选项可以设置Policy,即默认规则,只能是ACCEPT或DROP。
比如iptables -P INPUT DROP 表示默认不接收任何流入的数据包。
再比如 -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT 用的 -I 会插入作为第一条规则。

iptables can use extended packet matching modules with the -m or --match options, followed by the matching module name.
iptables-extensions — list of extensions in the standard iptables distribution
set This module matches IP sets which can be defined by ipset.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。