解包 IPTables:通过命令和演示了解其内部工作原理

主要观点:

  • 互联网通过发送和接收称为“数据包”的小块数据工作,早期数据包可自由传输,后因安全问题出现各种问题,iptables 试图解决其中一些问题。
  • NetFilter 为 iptables 提供了内核级基础,通过在数据包处理的关键阶段引入钩子点和注册回调函数,实现了防火墙、NAT 等功能。
  • iptables 可视为前端,NetFilter 为后端,使用表和链来组织和管理规则,以实现数据包过滤、NAT 等功能。
  • 通过虚拟机(如 VMware Fusion 或 Vagrant)可方便地演示 iptables 的使用。

关键信息:

  • 早期 Linux 系统的基本网络工具存在局限性,如 ipfwadm 只有基本数据包过滤能力且不支持状态检测,ipchains 虽有改进但仍不完美。
  • NetFilter 的关键阶段包括 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING,可注册回调函数。
  • iptables 的表包括 Filter(默认,用于数据包过滤)、nat(用于网络地址转换)、mangle(用于数据包修改)。
  • 链用于保持规则的顺序和模块化,包括内置链(INPUT、OUTPUT、FORWARD)和可创建的自定义链。
  • 在虚拟机环境中,可使用命令查看 iptables 规则,通过添加规则(如 DROP、REJECT)可控制数据包的处理,还可创建自定义链用于日志记录等。

重要细节:

  • iptables 使用 API 接口进行注册,如 nf_register_net_hooknf_register_net_hooks
  • 在虚拟机设置中,使用 sudo iptables -L -v -n 查看当前规则,-A 用于追加规则,-p 指定协议,–icmp-type 匹配 ICMP 类型,-s 指定源 IP 地址,-j 指定目标动作。
  • tcpdump 操作在数据链路层或 IP 层,能捕获到达网络接口卡的数据包,即使 iptables 后丢弃它们也能看到。
  • 可通过 sudo iptables -N 创建自定义链,使用 sudo iptables -A 添加规则到自定义链,log-prefix 用于日志记录,log-level 设定日志级别。
  • 通过 sudo iptables -D 可删除规则,sudo dmesg | grepsudo tail -f /var/log/kern.log 可查看日志。

结论:iptables 是基础技术但已接近过时,新的技术如 nftableseBPF 正在取代它。

阅读 21
0 条评论