You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Linux中的iptables规则不可修改(内存中运行的规则)

保护内存中iptables规则不被修改的方案

以下是几种比文件对比更高效、更难绕过的解决方案:

1. 锁定iptables锁文件

这是最简单直接的方法,利用iptables自身的锁机制阻止修改操作:

  • 先加载好所有需要的iptables规则,确保内存中的规则符合预期
  • 找到iptables的锁文件(多数发行版位于/run/xtables.lock,部分旧版本在/var/run/xtables.lock)
  • 执行chattr +i /run/xtables.lock给文件添加不可修改属性,此时任何进程(包括root)都无法修改或删除该锁文件
  • 当有人尝试执行iptables -D、-F、-A等修改命令时,iptables会因无法获取锁而报错,无法修改内存中的规则
  • 若需临时修改规则,先执行chattr -i /run/xtables.lock解除锁定,修改完成后重新添加不可修改属性

2. 用AppArmor/SELinux限制iptables操作

通过强制访问控制(MAC)系统精细限制iptables的权限,只允许读取操作,禁止修改:

  • 以AppArmor为例,创建配置文件/etc/apparmor.d/sbin.iptables:
    /sbin/iptables {
        # 允许执行命令本身
        /sbin/iptables r,
        # 允许读取规则相关的proc文件
        /proc/net/ip_tables_names r,
        /proc/net/ip_tables_targets r,
        /proc/net/ip_tables_matches r,
        # 禁止写入锁文件(阻止修改操作)
        deny /run/xtables.lock w,
        # 禁止其他可能的修改路径
        deny /sys/class/net/*/iptables_* w,
    }
    
  • 执行apparmor_parser -r /etc/apparmor.d/sbin.iptables加载配置并强制生效
  • 此方法能阻止root执行修改类iptables命令,即使锁文件被篡改也能生效

3. 内核级规则保护

如果需要最彻底的保护,可以使用第三方内核模块拦截修改iptables的系统调用:

  • 例如iptables-protect模块(需自行编译安装),它会拦截iptables_set等内核函数,只允许指定进程或用户修改规则
  • 该方法能绕过用户空间的限制,但需要具备内核编译和模块维护能力,适合对安全性要求极高的场景

注意事项

  • 所有方法都无法完全阻止拥有物理访问权限或内核级漏洞的攻击者,但能有效防止误操作、非特权用户篡改,以及绕过文件对比的攻击
  • 若使用锁文件方法,需确保锁文件路径与发行版匹配,可通过strace iptables -L查看锁文件位置

内容的提问来源于stack exchange,提问作者amirsalimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:15:22