iptables 的历史变更,发展趋势,和其他技术的关联我也曾花了不少时间去了解,可以说还是很不全面,就不献丑了(或者以后再来说说)。
这里就单单讲一下 iptables。
基本思想
在网络数据传输过程中有几个关键点埋上钩子,每个钩子上绑定了一个规则链(CHAIN)。
我们在这些链上注册一些处理规则(RULE),也就是 条件 加 操作。
网络包走到埋点的地方时,内核会逐个规则检查,如果符合条件就会执行预定操作。
此外:
- 这些处理规则按照不同类型,分成了五类,存在五张不同的表中。
- 每个规则链可以设置一个预定的操作(文档中称之为:策略 Policy)。
五个点
PREROUTING
路由:内核收到网络包之后,判断该包是否是自己的,应该给哪个程序INPUT
用户程序收到包之前(内核判断是自己的包之后,传输到用户程序)OUTPUT
程序往外发包FORWARD
这个包不是自己的,然后需要中转出去POSTROUTING
路由:系统判断该包应该怎么发出
PS:可以自定义新的链,然后再别的链中引用。我所处理的任务都没有到需要创建新链的地步,所以没有接触过。
五张表
应该说是五个功能。
- filter 过滤,即判断这个包。默认
- nat 地址转换
- mangle 数据包修改,日常网络管理应该不会用到
- raw 数据包修改(在内核处理之前)
- security unknown
操作类型
ACCEPT
放行DROP
拦截REJECT
拦截,但是告知对方MARK
加标记
NAT
SNAT
源地址转换DNAT
目的地址转换REDIRECT
端口转换
参考资料与拓展阅读
- 微信公众号,码洞,Linux 网络瑞士军刀 iptables 基本原理 —— 高端必备
- 微信公众号,一口Linux,深入理解 netfilter 和 iptables