iptables
iptables 是 Linux 系统中用于配置防火墙、网络过滤、地址转换等功能的核心工具,它通过定义一系列规则来控制数据包的流向和处理。要深入理解 iptables 的原理,我们需要从数据包的流转过程、各个表和链的设计、以及规则的匹配机制等多个方面进行详细解析。
iptables实现原理--Netfilter
iptables 实际上是 Linux 内核网络栈的一部分,它通过 Netfilter 框架来实现数据包的过滤和处理。Netfilter 是 Linux 内核中的一个模块化框架,允许内核通过不同的钩子(hook)对网络数据包进行处理。iptables 就是利用这些钩子来进行数据包的匹配、修改和路由。
相关信息
四个表:filter(过滤)、nat(NAT)、mangle(修改)、raw(绕过连接追踪)。
五个链:每个表中有不同的链,处理数据包的顺序和不同阶段。
filter 表:INPUT、OUTPUT、FORWARD
nat 表:PREROUTING、POSTROUTING、OUTPUT
mangle 表:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
raw 表:PREROUTING、OUTPUT
五个链:每个表中有不同的链,处理数据包的顺序和不同阶段。
filter 表:INPUT、OUTPUT、FORWARD
nat 表:PREROUTING、POSTROUTING、OUTPUT
mangle 表:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
raw 表:PREROUTING、OUTPUT
选项 | 描述 | 示例 |
---|---|---|
-A | 添加规则到指定链中 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
-D | 删除指定链中的规则 | iptables -D INPUT -p tcp --dport 80 -j ACCEPT |
-I | 将规则插入到指定链的最前面 | iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT |
-R | 替换指定链中的规则 | iptables -R INPUT 1 -p tcp --dport 443 -j ACCEPT |
-L | 列出指定链中的规则 | iptables -L INPUT |
-F | 清空指定链中的所有规则 | iptables -F INPUT |
-Z | 重置指定链的计数器(数据包计数和字节计数) | iptables -Z INPUT |
-t | 指定操作的表 | iptables -t nat -L |
-p | 指定协议类型(如 TCP、UDP、ICMP) | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--dport | 指定目标端口(与 -p 一起使用,通常用于 TCP/UDP) | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--sport | 指定源端口(与 -p 一起使用,通常用于 TCP/UDP) | iptables -A INPUT -p tcp --sport 22 -j ACCEPT |
-j | 指定目标动作(如 ACCEPT、DROP、REJECT、LOG 等) | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--source | 指定源 IP 地址 | iptables -A INPUT -s 192.168.1.1 -j ACCEPT |
--destination | 指定目标 IP 地址 | iptables -A INPUT -d 192.168.1.100 -j ACCEPT |
-i | 指定输入接口 | iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT |
-o | 指定输出接口 | iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT |
-s | 指定源地址,支持 CIDR 表达式 | iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT |
-d | 指定目标地址,支持 CIDR 表达式 | iptables -A INPUT -d 192.168.1.100 -j ACCEPT |
-m | 使用扩展模块(如 state 、limit 、multiport 等) | iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT |
--state | 配合 -m state 使用,指定连接状态(如 NEW 、ESTABLISHED 等) | iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT |
--limit | 限制特定时间内的数据包处理速率 | iptables -A INPUT -p tcp --dport 80 -m limit --limit 5/min -j ACCEPT |
--sport /--dport | 指定源端口或目标端口(与 -p 协议一起使用) | iptables -A INPUT -p tcp --sport 22 --dport 80 -j ACCEPT |
-v | 显示更详细的规则信息(包括数据包计数和字节计数) | iptables -L -v |
-n | 不解析 IP 地址或端口为域名和服务名称 | iptables -L -n |
--log | 启用日志功能,记录匹配到规则的数据包到系统日志 | iptables -A INPUT -j LOG --log-prefix "IPTables Input: " |
--reject-with | 配置拒绝数据包时返回的 ICMP 错误消息类型(如 port-unreachable 等) | iptables -A INPUT -p tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable |
本文作者:lzix
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!