iptables 和 ip6tables 是用于配置Linux内核防火墙的命令行工具,它们分别处理IPv4和IPv6网络协议。通过这些工具,可以定义规则集来过滤进入、离开以及转发的数据包。以下是关于这两个命令的基本介绍和常用操作。
基本语法
iptables [-t 表名] { -A | -C | -D } 链名 规则定义
ip6tables [-t 表名] { -A | -C | -D } 链名 规则定义
iptables [-t 表名] -I 链名 [规则序号] 规则定义
iptables [-t 表名] -R 链名 规则序号 规则定义
iptables [-t 表名] -F [链名]
iptables [-t 表名] -L [链名] [选项]
iptables [-t 表名] -N 自定义链名
iptables [-t 表名] -X [自定义链名]
iptables [-t 表名] -P 链名 目标动作
核心概念
1. 表(Table)
| 表名 | 功能 |
|---|
| filter | 默认表,用于数据包过滤(如 INPUT, FORWARD, OUTPUT 链)。 |
| nat | 网络地址转换(如 PREROUTING, POSTROUTING, OUTPUT 链)。 |
| mangle | 修改数据包(如 TTL、TOS 字段)。 |
| raw | 配置连接跟踪豁免(如 NOTRACK)。 |
| security | 强制访问控制(如 SELinux 的 SECMARK)。 |
2. 链(Chain)
- 内置链:由表自动创建(如
INPUT, FORWARD)。 - 自定义链:用户创建并调用的链(需通过
-N 创建)。
3. 目标动作(Target)
- ACCEPT:允许数据包通过。
- DROP:丢弃数据包。
- REJECT:拒绝数据包并返回错误(仅限 IPv4)。
- RETURN:停止当前链处理,返回上一级链。
- JUMP:跳转到自定义链(如
-j CUSTOM_CHAIN)。
常用命令
| 命令 | 描述 |
|---|
-A, --append | 在链末尾追加规则(如 iptables -A INPUT -p tcp --dport 22 -j ACCEPT)。 |
-I, --insert | 在指定位置插入规则(如 iptables -I INPUT 1 -s 192.168.1.100 -j DROP)。 |
-D, --delete | 删除指定规则(如 iptables -D INPUT -p tcp --dport 80 -j DROP 或 iptables -D INPUT 3)。 |
-R, --replace | 替换指定规则(如 iptables -R INPUT 2 -s 192.168.1.0/24 -j ACCEPT)。 |
-L, --list | 列出链中的规则(如 iptables -L -n -v 显示数字格式和详细信息)。 |
-F, --flush | 清空链中所有规则(如 iptables -F INPUT)。 |
-N, --new-chain | 创建自定义链(如 iptables -N CUSTOM_CHAIN)。 |
-X, --delete-chain | 删除自定义链(如 iptables -X CUSTOM_CHAIN)。 |
-P, --policy | 设置链的默认策略(如 iptables -P INPUT DROP)。 |
-S, --list-rules | 导出规则(如 iptables -S > rules.txt)。 |
常用参数
1. 匹配条件(Matches)
| 参数 | 描述 |
|---|
-p, --protocol | 协议类型(如 -p tcp, -p udp, -p icmp)。 |
-s, --source | 源地址(如 -s 192.168.1.0/24)。 |
-d, --destination | 目标地址(如 -d 10.0.0.1)。 |
-i, --in-interface | 入站接口(如 -i eth0)。 |
-o, --out-interface | 出站接口(如 -o eth1)。 |
--sport, --dport | 源端口/目标端口(如 --dport 80)。 |
-m matchname | 扩展匹配模块(如 -m state --state RELATED,ESTABLISHED)。 |
2. 目标扩展(Targets)
| 目标 | 描述 |
|---|
-j ACCEPT/DROP | 允许/丢弃数据包。 |
-j REJECT | 拒绝数据包并发送 ICMP 错误(IPv4)。 |
-j LOG | 记录日志(如 -j LOG --log-prefix "FW_DROP")。 |
-j SNAT | 源地址转换(用于 nat 表,如 -j SNAT --to-source 192.168.1.1)。 |
-j DNAT | 目标地址转换(如 -j DNAT --to-destination 10.0.0.100)。 |
-j MASQUERADE | 动态 SNAT(适用于拨号连接)。 |
常见示例
1. 基础过滤
2. NAT 配置
3. 状态检测
4. 日志记录
5. 自定义链
注意事项
- 规则顺序:规则按顺序执行,匹配后跳过后续规则。
- 持久化保存:规则重启后失效,需使用
iptables-save > /etc/iptables.rules 和 iptables-restore < /etc/iptables.rules。 - IPv6 支持:
ip6tables 与 iptables 语法相同,仅处理 IPv6 流量。 - NAT 限制:IPv6 的 NAT 支持需内核 3.7+。
- 性能优化:高频匹配的规则应放在链前部,减少遍历次数。
- 调试建议:使用
-v 和 -n 参数查看详细规则(如 iptables -L -n -v)。
退出状态
- 0:成功。
- 1:语法错误或规则不存在。
- 2:内核错误(如权限不足、无效参数)。
所有评论(0)