Iptables 认识笔记

2023年 9月 28日 39.1k 0

linux iptables是由两个组件组成:Netfilter和Iptables组成:

Netfilter

Netfilter称为内核空间,是linux内核的一部分,用于拦截和操作数据的一套框架。框架内容包括三部分:

  • 为网路协议(ipv4/ipv6)定义几个hook函数
  • 内核模块都可以注册hook函数。注册且到了该网络协议节点时,系统会调用注册的hook函数
  • 处理时,数据包会传入用户空间去进行处理(这里不会来回切换用户/内核态嘛?)
  • 共有五个节点

    • NF_IP_PRE_ROUTING,在报文作路由以前执行;
    • NF_IP_FORWARD,在报文转向另一个NIC以前执行;(转发处理前)
    • NF_IP_POST_ROUTING,在报文流出以前执行;(转发处理后)
    • NF_IP_LOCAL_IN,在流入本地的报文作路由以后执行;(流入本地后)
    • NF_IP_LOCAL_OUT,在本地报文做流出路由前执行。(本地要发送的数据流出前)

    流程图:
    image.png

    Iptables用户空间工具

    iptable是一种工具,也称用户空间。它使得插入/修改/删除表中规则变得容易。

    Table 表

    filter表

    该表的作用主要用于包过滤。它在LOCAL_IN,FORWARD,LOCAL_OUT三处HOOK函数进行了注册。

    Nat表

    该表的作用主要用于地址转换。它在PRE_ROUTING,POST_ROUTING两处HOOK函数进行了注册。k8s中的kube-proxy就是基于此表做的k8s的基础原理

    Mangle表

    该表的作用是进行数据包内容的修改。它在Netfilter的所有5个HOOK函数进行了注册。

    Chain 链

    Chain链是实现hook函数调用的实现方式,

    table chain
    Filter INPUT
    Filter FORWARD
    Filter OUTPUT
    Nat PREROUTING
    Nat OUTPUT
    Nat POSTOUTING
    Mangle PREROUTING
    Mangle INPUT
    Mangle OUTPUT
    Mangle FORWARD
    Mangle POSTOUTING

     链INPUT=HOOK函数 LOCALIN

     链OUTPUT=HOOK函数 LOCALOUT

     链PREROUTING=HOOK函数 PREROUTING

     链POSTROUTING=HOOK函数 POSTROUTING

     链 FORWARD=HOOK函数 FORWARD

    Target 目标

    链的每个规则都会有一个目标,目标决定了该规则对数据包如何处理。

    常用目标:

    ACCEPT:允许

    DROP:拒绝

    REJECT:同DROP一样,不过它会向发送方返回个错误信息

    iptables命令

    常用命令

    • iptables -P INPUT DROP :设置 INPUT 链默认策略为 DORP 其他链

    • ~:显示详细信息

    • iptables -A INPUT -p tcp -d 192.168.175.7 --dport 22 -j ACCEPT 放行目标 ip 为 192.168.175.7 协议为 tcp 22 端口的入站流量

    • iptables -A INPUT -d 192.168.175.7 -p icmp -j ACCEPT 放行目标 ip 为 192.168.175.7 的 icmp 协议流量

    • iptables -t filter -A OUTPUT -p tcp -s 192.168.175.7 -j ACCEPT 放行源 ip 为 192.168.175.7 的出站流量

    • iptables -A INPUT -p icmp -d 192.168.175.7 --icmp-type 0 -j ACCEPT 放行 icmp 的 echo reply 入站流量

    • iptables -L -n --line-num :查看链上的规则不反解并显示规则编号

    • iptables -D INPUT 1:删除 INPUT 链上的第一条规则

    • iptables -R INPUT 2 -d 192.168.175.7 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT

    • iptables -R INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

    • iptables -A INPUT –p icmp -m limit –limit 10/second -j ACCEPT

    • -t table:

      filter,nat,mangle,raw(省略时为 filter)

    • 链管理

      -F:flush,清空规则链,省略链表示清空指定表上的所有的链(不指定链则默认为 filter)

      -N:new,创建自定义规则链

      -X:drop,删除用户自定义的空的规则链

      -Z:zero,置零规则计数器

      -P:policy,为指定链设置默认策略,对 filter 表中的链而言,默认策略通常有 ACCEPT,DROP,REJECT;

      -E:rename,重命名自定义链,引用计数不为 0 的自定义链无法改名,也无法删除

      • L:显示规则
    • 规则管理:

      -A:append,将新规则追加于指定链的尾部

      -I:insert,将新规则插入指定链的指定位置

      -D:delete,删除指定链上的指定规则,有两种指定方式(1)指定匹配条件(2)指定规则的编号

      -R:replace,替换指定链上的指定规则

    • 查看

      -L:list,列出指定链上所有规则

      ​ -n:numberic,以数字格式显示地址和端口号,不反解

      ​ -v:verbose,显示详细信息

      ​ --line-numbers:显示规则编号

      ​ -x:exactly:显示计数器计数结果的精确值

    • 目标

      -j TARGET:jump 至指定的 TARGET

      ​ ACCEPT:接受

      ​ REJECT:拒绝

      ​ DROP:丢弃

      ​ RETURN:返回调用链

      ​ REDIRECT:端口重定向

      ​ LOG:记录日志

      ​ MARK:做防火墙标记

      ​ SNAT: 源地址转化

      ​ DNAT:目标地址转换

      ​ MASQUERADE:地址伪装

      ​ ….

      ​ 自定义链:由自定义链上的规则进行匹配检查

    • 基本匹配:

    • [!] -s,--src,--source IP | Netaddr :检查报文中的源 IP 地址是否符合此处指明的地址范围
    • [!] -d,--dst,--destination IP | Netaddr: 检查报文中源 IP 地址是否符合此处指定的地址范围
    • [!] -p,--protocol {tcp|udp|icmp} : 检查报文中的协议,即 IP 首部中的 protocols 所标识的协议
    • [!] -i,--in-interface INTERFACE:数据报文的流入接口,仅能用于 PREROUTING,INPUT 及 FORWARD 链上
    • [!] -o,--out-interface INTERFACE:数据报文的流出接口,仅能用于 FORWARD,OUTPUT 及 POSTROUTING 上

    参考和引用

    • blog.51cto.com/whyxx/56091…
    • my.oschina.net/u/4256145/b…

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论