一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux怎么用iptables封禁IP地址

时间:2026-07-06 08:00:47 编辑:袖梨 来源:一聚教程网

iptables封IP必须加-s和-j DROP,顺序不能错;漏-s或误用-d会导致规则不匹配,-j DROP不可随意替换为-j REJECT,否则可能被扫描器误判为端口开放。

iptables封IP必须加 -s 和 -j DROP,顺序不能错

直接执行 iptables -A INPUT -s 192.168.1.100 -j DROP 就能生效,但很多人漏掉 -s(源地址)或写成 -d(目标地址),结果规则不匹配;-j DROP 也不能换成 -j REJECT 后不测试——前者静默丢包,后者会发 RST 包,某些扫描器反而会把它当“端口开放”信号继续试探。

常见错误现象:

  • 执行命令没报错,但 IP 仍能连 SSH:多半是忘了 -s 或写错了链名(比如用了 OUTPUT 而不是 INPUT
  • 封完后自己也连不上:规则插太靠前,挡住了本机回环或已建立连接,建议在 ESTABLISHED 规则之后再加封禁规则

封单个IP和封网段用法不同,/24 不等于 “最后一位改成0”

封单个 IP:iptables -I INPUT -s 203.0.113.45 -j DROP;封网段必须用 CIDR 表示法,比如封整个 C 段要写 203.0.113.0/24,而不是 203.0.113.*203.0.113.0/255.255.255.0——iptables 只认斜杠格式。

参数差异:

  • /24 → 覆盖 256 个地址(0–255)
  • /16 → 覆盖 65536 个地址(如 192.168.0.0/16
  • 别用 /32 封单个 IP,虽然语法合法,但语义冗余,直接写 IP 更清晰

规则删不掉?先看行号,再用 -D + 编号,别硬记完整规则

执行 iptables -L INPUT -n --line-numbers,输出里第一列就是编号。想删第 3 条,直接 iptables -D INPUT 3。如果用 -D 加完整规则(如 iptables -D INPUT -s 203.0.113.45 -j DROP),必须确保参数顺序、空格、大小写和原始添加时完全一致——哪怕多一个空格也会失败。

容易踩的坑:

  • 误删其他规则:编号会随增删动态变化,删之前务必重新 --line-numbers 查一次
  • 删了没生效:规则还在内存里,但没保存,重启就恢复——这不是删失败,是忘了持久化

重启后规则消失?不同系统保存方式完全不同

Debian/Ubuntu 装 iptables-persistent,保存命令是 iptables-save > /etc/iptables/rules.v4;CentOS 7 用 service iptables save;CentOS 8+ 默认没 iptables 服务,得装 iptables-services 或切到 nftables

性能影响:

  • 规则越多,匹配越慢,超过 50 条建议改用 ipset(尤其要封几百个散 IP 时)
  • 别在 FORWARD 链乱加 DROP——你不是路由器,大概率不需要碰这条链
实际操作中,最常被忽略的是规则加载顺序和持久化机制。封 IP 看似一行命令,但生效依赖链位置、保存动作、以及是否与其他规则冲突——光加一条 DROP 远不够。

热门栏目