iptables

iptables

iptables的底层实现是netfilter,其架构是在整个网络流程的若干位置放置一些钩子,并在每个钩子上挂载一些处理函数进行处理。它作为一个通用的、抽象的框架,提供一整套hook函数的管理机制,是的数据包过滤、包处理(设置标志位、修改TTL)、地址伪装、网络地址转换、透明代理、访问控制、基于协议类型的链接跟踪,甚至带宽限速等功能成为可能。

  • 5 chain

    IP层的5个钩子点的位置,对应iptables就是5条内置链,分别是PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWAR。支持用户自定义链。

    • PREROUTING:可以在此处进行DNAT(destination NAT POSTROUTING,用于互联网访问局域网)
    • POSTROUTING:可以在此处进行SNAT(source NAT POSTROUTING,用于局域网访问互联网)
    • INPUT:处理输入本地进程的数据包
    • OUTPUT:处理本地进程的输出数据包
    • FORWARD:处理转发到其他机器/network namespace的数据包
  • 5 table

    优先级从高到低为:raw、mangle、nat、filter、security,不支持用户自定义表。

    • filter表:用于控制到达某条链上的数据包是否继续放行、直接丢弃(drop)或拒绝(reject)
    • nat标:用于修改数据包的源和目的地址
    • mangle表:用于修改数据包的IP头信息
    • raw表:iptables是有状态的,即iptables对数据包有链接追踪(connection tracking)机制,而raw是用来去除这种追踪机制的
    • security表:用于在数据包上应用SELinux

    不是每个链上都拥有这5个表:

    • raw存在于PREROUTING和OUTPUT。对应输入和输出经过的第一条链。
    • mangle存在于所有链中。
    • nat(SNAT)存在于POSTROUTING和INPUT。
    • nat(DNAT)存在于PREROUTING和OUTPUT。
    • filter、security存在于FORWARD、INPUT、OUTPUT。
  • rule

    iptables的表示所有规则的5个逻辑集合,一跳iptables规则包含两部分信息:匹配条件和动作。

    匹配条件,即匹配数据包被这条iptables规则“捕获”的条件,例如协议类型、源IP、目的IP、源端口、目的端口、连接状态等。每条iptables规则允许多个匹配条件任意组合,从而实现多条件的匹配,多条件之间是逻辑与关系。

    常见动作有:

    • DROP:直接将数据包丢弃。应用场景:不让某个数据源意识到系统的存在,可以用来模拟宕机。
    • REJECT:给客户端返回connection refused或destination unreachable报文,应用场景:不让某个数据源访问系统,提示这里没有想要的服务内容。
    • QUEUE:将数据包放入用户空间的队列,供用户空间的程序处理。
    • RETURN:跳出当前链,该链后续规则不再执行。
    • ACCEPT:统一数据包通过,继续执行后续的规则。
    • JUMP:跳转到其他用户自定义的链继续执行。

你可能感兴趣的:(iptables)