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. 基础过滤
  • 允许本地 SSH 访问:
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  • 禁止所有入站流量(需谨慎):
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    
2. NAT 配置
  • 共享上网(MASQUERADE):
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    
  • 端口转发(将 80 转发到 8080):
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    
3. 状态检测
  • 允许已建立连接的流量:
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
4. 日志记录
  • 记录丢弃的数据包:
    iptables -A INPUT -j LOG --log-prefix "Dropped: "
    iptables -A INPUT -j DROP
    
5. 自定义链
  • 创建和调用自定义链:
    iptables -N WEB_TRAFFIC
    iptables -A WEB_TRAFFIC -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -j WEB_TRAFFIC
    
注意事项
  1. 规则顺序:规则按顺序执行,匹配后跳过后续规则。
  2. 持久化保存:规则重启后失效,需使用 iptables-save > /etc/iptables.rules 和 iptables-restore < /etc/iptables.rules。
  3. IPv6 支持:ip6tables 与 iptables 语法相同,仅处理 IPv6 流量。
  4. NAT 限制:IPv6 的 NAT 支持需内核 3.7+。
  5. 性能优化:高频匹配的规则应放在链前部,减少遍历次数。
  6. 调试建议:使用 -v 和 -n 参数查看详细规则(如 iptables -L -n -v)。
退出状态
  • 0:成功。
  • 1:语法错误或规则不存在。
  • 2:内核错误(如权限不足、无效参数)。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐