Linux命令-iptables(配置防火墙规则的核心工具)

🧭 说明

iptables是Linux系统中配置防火墙规则的核心工具,它通过控制数据包的流动来保障系统安全。下面这个表格汇总了它的基本语法结构和常见命令选项。

组件类型 可选值 说明
表(-t) filter, nat, mangle, raw 定义规则功能,如包过滤或地址转换。不指定时默认为filter表。
命令 -A(追加), -I(插入), -D(删除), -L(查看), -F(清空), -P(设置默认策略) 对指定链进行操作的主要命令。
INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING 数据包在防火墙中的路径点,不同表包含不同的链。
匹配条件 -p(协议), -s(源地址), -d(目标地址), --sport/--dport(端口), -i(入站网卡), -o(出站网卡) 用于筛选数据包的条件,可以组合使用。
动作(-j) ACCEPT(接受), DROP(丢弃), REJECT(拒绝并回应), LOG(记录日志) 数据包匹配规则后要执行的操作。

🛠️ 常用操作指南

  • 查看现有规则

    使用 iptables -L 可以查看当前规则。为了信息更完整,建议加上详细和数字格式选项。

    bash 复制代码
    iptables -L -n -v  # 详细列出所有规则,以数字形式显示IP和端口
    iptables -L -n --line-numbers  # 显示规则的行号,便于后续删除或修改
  • 设置默认策略

    默认策略决定了没有规则匹配时数据包的命运。为安全起见,通常先将链的默认策略设置为DROP

    bash 复制代码
    iptables -P INPUT DROP    # 默认拒绝所有进入的数据包
    iptables -P FORWARD DROP  # 默认拒绝所有转发的数据包
    iptables -P OUTPUT ACCEPT # 默认允许所有发出的数据包。如果担心主机被控制,也可设置为DROP,但需配置允许的出站规则
  • 配置基本规则

    设置好默认策略后,需要添加规则来允许正常的通信。

    bash 复制代码
    # 允许本地回环通信,这是许多本地服务所必需的
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    
    # 允许已建立的和相关的连接进入,这对响应外部请求至关重要(如浏览网页后接收数据)
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # 开放特定服务端口,例如允许SSH连接
    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
    
    # 屏蔽特定IP地址
    iptables -A INPUT -s 123.45.6.7 -j DROP
    # 屏蔽整个IP段
    iptables -A INPUT -s 123.45.0.0/16 -j DROP
  • 删除与清空规则

    如果配置有误,需要知道如何撤销。

    bash 复制代码
    iptables -D INPUT 3          # 删除INPUT链中的第3条规则(先用`--line-numbers`查看行号)
    iptables -D INPUT -s 123.45.6.7 -j DROP  # 根据规则内容精确删除
    iptables -F                  # 清空指定链的所有规则,不指定链则清空所有链
    iptables -F INPUT            # 仅清空INPUT链的规则
    iptables -X                  # 删除用户自定义的空链
    iptables -Z                  # 将指定链的所有计数器归零

💡 实用进阶示例

一些更具体的使用场景,可以解决实际问题。

  • 多端口设置:一次开放多个相关端口(如SSH, HTTP, HTTPS),规则更简洁。

    bash 复制代码
    iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
  • 端口转发:将到达本机8080端口的流量转发到内网另一台机器的80端口。

    bash 复制代码
    # 在PREROUTING链做目标地址转换(DNAT)
    iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
    # 在POSTROUTING链做源地址转换(SNAT),使返回包能正确回来
    iptables -t nat -A POSTROUTING -j MASQUERADE
  • 防止DoS攻击:对某一端口的连接请求进行速率限制。

    bash 复制代码
    iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

⚠️ 重要提醒

  • 规则顺序至关重要 :iptables规则按从上到下的顺序匹配,一旦匹配成功便不再继续。所以更具体的规则应放在前面
  • 谨慎操作远程连接 :在配置远程服务器的防火墙时,务必先设置允许SSH连接的规则,再设置默认策略为DROP,或者设置一个定时任务,在若干分钟后清空所有规则(如 sleep 60; iptables -F),以防将自己锁在服务器外。
  • 保存规则 :通过命令行配置的规则默认是临时的,重启后失效。务必记得保存。
    在CentOS/RHEL等系统上通常可以使用 service iptables save。在Debian/Ubuntu等系统上,则需使用 iptables-save > /etc/iptables/rules.v4 来手动保存,并通过 iptables-restore < /etc/iptables/rules.v4 在启动时恢复。
相关推荐
悠悠121384 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck5 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商5 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_741484815 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS6 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿6 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog7 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞7 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲7 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz7 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试