iptables命令及详解总结笔记

iptables 是 Linux 系统中最常用的防火墙工具,它基于 Netfilter 框架,用于管理网络数据包的过滤、网络地址转换(NAT)等。以下是 iptables 的常用命令及其详解:


一、基本概念

1. 表(Tables)

  • filter 表:默认表,用于数据包过滤。

  • nat 表:用于网络地址转换(如端口转发、IP 伪装)。

  • mangle 表:用于修改数据包(如 TTL、TOS)。

  • raw 表:用于连接跟踪豁免。

2. 链(Chains)

  • INPUT:处理进入本机的数据包。

  • OUTPUT:处理从本机发出的数据包。

  • FORWARD:处理经过本机转发的数据包。

  • PREROUTING(nat/mangle):数据包进入时立即处理。

  • POSTROUTING(nat/mangle):数据包发出前处理。


二、常用命令详解

1. 查看规则

iptables -L                    # 列出所有规则
iptables -L -n                # 以数字形式显示(不解析域名)
iptables -L -v                # 显示详细信息(包/字节计数)
iptables -L -t nat            # 查看指定表(如 nat 表)
iptables -S                   # 以 iptables-save 格式显示规则

2. 清空规则

iptables -F                   # 清空所有规则
iptables -F INPUT            # 清空指定链(如 INPUT)
iptables -t nat -F           # 清空指定表的规则
iptables -X                  # 删除用户自定义链
iptables -Z                  # 重置包/字节计数器

3. 设置默认策略

iptables -P INPUT DROP       # 设置 INPUT 链默认策略为 DROP
iptables -P FORWARD ACCEPT   # 设置 FORWARD 链默认策略为 ACCEPT
iptables -P OUTPUT ACCEPT    # 设置 OUTPUT 链默认策略为 ACCEPT

4. 添加规则

# 允许特定端口(如 80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 允许特定 IP 访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 允许特定网段
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

# 允许回环接口(localhost)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和相关的数据包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

5. 插入与删除规则

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT   # 在 INPUT 链第 1 条插入规则
iptables -D INPUT 2                               # 删除 INPUT 链第 2 条规则
iptables -D INPUT -p tcp --dport 80 -j ACCEPT     # 删除匹配的规则

6. 网络地址转换(NAT)

# 源地址转换(SNAT)用于共享上网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

# 目的地址转换(DNAT)用于端口转发
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080

# 本地端口转发(重定向)
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080

7. 限制连接数

# 限制每 IP 对 SSH 的连接数(每分钟 3 个)
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT

8. 记录日志

iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP-ACCESS: "

三、常用参数说明

参数 说明
-A 在链末尾添加规则
-I 在指定位置插入规则
-D 删除规则
-P 设置链的默认策略
-s 源 IP 地址
-d 目标 IP 地址
-p 协议(tcp/udp/icmp)
--dport 目标端口
--sport 源端口
-i 输入网卡(如 eth0)
-o 输出网卡
-j 动作(ACCEPT/DROP/REJECT/LOG)
-m 加载扩展模块(state/limit/multiport)

四、实用示例

1. 基本防火墙配置

# 清空现有规则
iptables -F

# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH(22 端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP 和 HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许 Ping
iptables -A INPUT -p icmp -j ACCEPT

2. 保存与恢复规则

# 保存规则(CentOS/RHEL)
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

# 恢复规则
iptables-restore < /etc/sysconfig/iptables

# 保存规则(Ubuntu/Debian)
iptables-save > /etc/iptables/rules.v4

五、注意事项

  1. 谨慎操作:错误的规则可能导致无法远程连接服务器。

  2. 测试规则:建议在本地测试后再应用到生产环境。

  3. 保存规则:iptables 规则默认重启后失效,需手动保存。

  4. 使用脚本:复杂的防火墙配置建议使用脚本管理。


以上是 iptables 的常用命令及详解,掌握这些基础命令可以满足大部分防火墙配置需求。对于更复杂的需求,可以进一步学习 iptables 的扩展模块和高级功能。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部
×
问题求助