IPTABLES:另一个应用程序当前正在持有 xtables 锁

IPTABLES:另一个应用程序当前正在持有 xtables 锁

我管理一台安装了 ispconfig 3 的 Ubuntu 服务器 (14.04)。该服务器用于邮件、网络和数据。在我之前的系统管理员启用了 fail2ban 和 ufw,但我们今天一整天都遇到了 dovecot 身份验证问题。当我尝试访问防火墙时,我不断收到错误消息:

错误:运行 iptables 时出现问题:另一个应用程序当前正在持有 xtables 锁。也许您想使用 -w 选项?

尝试软重启导致服务器冻结,而硬重启又使问题再次出现。

然后,经过进一步调查lsof -p $(pidof iptables),我得到以下输出:

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
iptables 1526 root  cwd    DIR                9,1     4096       2 /
iptables 1526 root  rtd    DIR                9,1     4096       2 /
iptables 1526 root  txt    REG                9,1    87768  261694 /sbin/xtables-multi
iptables 1526 root  mem    REG                9,1     6336 1180648 /lib/xtables/libxt_standard.so
iptables 1526 root  mem    REG                9,1    14664 1180071 /lib/x86_64-linux-gnu/libdl-2.19.so
iptables 1526 root  mem    REG                9,1  1840928 1180085 /lib/x86_64-linux-gnu/libc-2.19.so
iptables 1526 root  mem    REG                9,1    47712 1181161 /lib/libxtables.so.10.0.0
iptables 1526 root  mem    REG                9,1    31520 1179359 /lib/libip6tc.so.0.1.0
iptables 1526 root  mem    REG                9,1    27392 1179360 /lib/libip4tc.so.0.1.0
iptables 1526 root  mem    REG                9,1   149120 1180078 /lib/x86_64-linux-gnu/ld-2.19.so
iptables 1526 root    0r  FIFO                0,8      0t0   21609 pipe
iptables 1526 root    1u   CHR                1,3      0t0    1029 /dev/null
iptables 1526 root    2u   CHR                1,3      0t0    1029 /dev/null
iptables 1526 root    3u  unix 0xffff880190eabb80      0t0  686890 @xtables
iptables 1526 root    4u   raw                         0t0  686891 00000000:00FF->00000000:0000 st=07
iptables 1526 root    5w   REG                9,1   242173  917201 /var/log/fail2ban.log
iptables 1526 root    6r  0000                0,9        0    7704 anon_inode
iptables 1526 root    7r  0000                0,9        0    7704 anon_inode
iptables 1526 root    8r  0000                0,9        0    7704 anon_inode
iptables 1526 root    9r  FIFO                0,8      0t0   20579 pipe
iptables 1526 root   10w  FIFO                0,8      0t0   20579 pipe

欢迎提供关于什么是锁定 xtables 以及如何最好地解决的任何指示。

答案1

这个答案-n表明 DNS 查找速度慢可能会造成延迟,通过在命令行中包含 可以避免这种情况iptables。也许您可以使用straceltrace来调查活动iptables进程正在做什么(输出中的 pid 1526),或者至少通过 之类的命令检查命令ps -fp $(pidof iptables)是否iptables包含-n

答案2

我在使用一长串 iptables 命令脚本时也遇到了同样的问题。这个问题的发生相当随机,并且因系统而异。我怀疑存在竞争条件。

对于这种情况,错误消息提供了自己的解决方案:使用 -w 标志将导致 iptables 等待锁可用而不是失败。

如果不直接使用 iptables,而是使用管理软件,则必须对软件进行相应的修补。如果某些原因导致锁失效,则显然存在 iptables 无限期挂起的风险。

答案3

首先,你需要在服务器上输入命令 #lsof -n 2>/dev/null | grep /run/xtables.lock 然后使用以下命令删除文件 /run/xtables.lockrm -f /运行/xtables.lock

答案4

在 Ubuntu 22.04 中发现了这个问题,其中 Webmin 2.013 同时配置了 IPv4 和 IPv6 规则以在启动时激活。

该服务webmin-ip6tables(用于 IPv6)锁定xtables.lock文件,同时该服务webmin-iptables(用于 IPv4)尝试加载其规则集,因此被阻止(我使用systemctl status webmin-iptablessystemctl status webmin-ip6tables来检查这一点)。

解决方案webmin-ip6tables.service:编辑了下面的文件中针对 IPv6 的服务,/etc/systemd/system/multi-user.target.wants/在行中添加了五秒的延迟ExecStart,结果是:

[Unit] Description=Load ip6tables save file

[Service] ExecStart=/bin/sh -c 'sleep 5; /sbin/ip6tables-legacy-restore </etc/webmin/firewall6/ip6tables.save' ExecStop=/sbin/ip6tables -t filter -F ; /sbin/ip6tables -t nat -F ; /sbin/ip6tables -t mangle -F ; /sbin/ip6tables -t filter -P INPUT ACCEPT ; /sbin/ip6tables -t filter -P OUTPUT ACCEPT ; /sbin/ip6tables -t filter -P FORWARD ACCEPT ; /sbin/ip6tables -t nat -P PREROUTING ACCEPT ; /sbin/ip6tables -t nat -P POSTROUTING ACCEPT ; /sbin/ip6tables -t nat -P OUTPUT ACCEPT ; /sbin/ip6tables -t mangle -P PREROUTING ACCEPT ; /sbin/ip6tables -t mangle -P OUTPUT ACCEPT Type=oneshot RemainAfterExit=yes

[Install] WantedBy=multi-user.target

不幸的是,我发现 Webmin 防火墙配置中的延迟并不适用于启动操作,所以我无法在那里解决问题。

此更改使 IPv6 规则集加载等待 5 秒,从而为 IPv4 规则集成功加载提供足够的时间。

警告:如果在 Webmin 中禁用启动时激活规则,然后再次启用,则服务文件可能会被覆盖,但没有理由在配置后进行禁用/启用循环,只需修改规则集并应用更改。

相关内容