主要观点:
- 互联网通过发送和接收称为“数据包”的小块数据工作,早期数据包可自由传输,后因安全问题出现各种问题,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_hook
和nf_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 | grep
或sudo tail -f /var/log/kern.log
可查看日志。
结论:iptables 是基础技术但已接近过时,新的技术如 nftables
、eBPF
正在取代它。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。