ufw iptables 跳转规则错误“无法加载日志记录规则”

ufw iptables 跳转规则错误“无法加载日志记录规则”

我正在尝试在 ufw 中设置 iptables 规则,但我似乎误解了它的工作原理。除了描述的一般语法之外,我找不到任何可靠的文档这里。这是我的问题的简化版本:

/etc/ufw/after.rules我附加:

*filter
:ufw-user-input - [0:0]
:FOO-CHAIN - [0:0]
-A FOO-CHAIN -j ufw-user-input
-A FOO-CHAIN -j DROP
COMMIT

这个想法是FOO-CHAIN,仅允许已允许的数据包ufw allow,否则丢弃。

问题 - 当我ufw reload一次时,规则被应用,但在第二次重新加载时,我开始得到一个常量ERROR: Could not load logging rules。我发现的唯一解决办法是刷新整个表(iptables -F && iptables -X)。

后续问题:

  • 相反,使用它ufw-user-forward不会在重新加载时出现错误。这是为什么?
  • 为什么我必须通过 via:ufw-user-input - [0:0]或其他face来定义链ERROR: No such file or directory?因为这是after.rules文件,所以它应该在 后运行user.rules,这意味着ufw-user-input应该已经定义了。如果我将跳转更改为ufw-before-input,我可以省略定义它,并且不会出现错误。

答案1

我遇到了同样的问题,我发现UFW内部检查iptables中是否存在ufw-user-input链,以了解ufw是否处于启用或禁用状态。

使用ufw-user-inputin-A FOO-CHAIN -j ufw-user-input将防止ufw-user-input在执行ufw reload或时删除 do ufw disable,该链仍然存在,因为 iptables 不接受更改。那么UFW状态就会变得混乱甚至ufw status崩溃。

ufw disable您需要确保您的规则在或之后正确清理ufw reload

最简单的方法是添加iptables -F FOO-CHAIN || true或类似删除ufw-user-input中提到链的所有行/etc/ufw/before.init

/etc/ufw/before.init

set -e

case "$1" in
start)
    # typically required
    ;;
stop)
    # typically required
    iptables -F FOO-CHAIN || true
    # You may want to add other lines here to reset your chain in a desirable state if UFW is disabled like 
    # iptables -A FOO-CHAIN -j RETURN || true
    ;;
status)
    # optional
    ;;
flush-all)
    # optional
    ;;
*)
    echo "'$1' not supported"
    echo "Usage: before.init {start|stop|flush-all|status}"
    ;;
esac

不要忘记before.init使用chmod +x /etc/ufw/before.init.

我确认你需要:ufw-user-input - [0:0],这是由于UFW的内部,我认为ufw-user-input是插入在after.rules.

相关内容