firewalld - Нет такого файла или каталога

После обновления с Ubuntu 20.04 до 20.10 я хочу, наконец, начать работу с firewalld вместо старого ручного подхода iptables, но все, что я получаю от службы, это следующее, что также нарушает любую сетевую интеграцию с Docker:

      Feb 13 13:28:20 myhost firewalld[36390]: ERROR: 'python-nftables' failed: internal:0:0-0: Error: Could not process rule: No such file or directory

Это сообщение об ошибке не очень полезно, поскольку оно не говорит, что «что» не может быть найдено.

Я также попытался выполнить большой двоичный объект JSON (из journalctl --unit firewalld --no-pager) с использованием nftкоманду напрямую, но это просто дает одно и то же сообщение об ошибке, на самом деле несколько раз. Таким образом, сообщение об ошибке исходит от libnftables1.

1 ответ

После просмотра небольшого количества кода Python здесь и здесь стало ясно, что мне нужно разобрать большой двоичный объект JSON и посмотреть, какие именно инструкции не работают, что привело меня к следующему (после сохранения двоичного объекта JSON в ~/nftables.json):

      jq '.nftables | length' ~/nftables.json

... чтобы получить количество записей (в моем случае 225), а затем:

      for i in $(seq 1 224); do \
    jq --argjson index "$i" '{"nftables": [.nftables[0], .nftables[$index]]}' ~/nftables.json | tee nft.json; \
    sudo nft --json --file nft.json || break; \
done

... который не удался только для первой записи:

      {
  "nftables": [
    {
      "metainfo": {
        "json_schema_version": 1
      }
    },
    {
      "add": {
        "chain": {
          "family": "inet",
          "table": "firewalld",
          "name": "raw_PREROUTING",
          "type": "filter",
          "hook": "prerouting",
          "prio": -290
        }
      }
    }
  ]
}
internal:0:0-0: Error: No such file or directory

Поскольку это просто добавление цепочки, единственное, что здесь может быть не так, — это отсутствующая таблица, что было подтверждено:

      $ sudo nft list tables
table bridge filter
table bridge nat

... поэтому нам нужно добавить его:

      sudo nft add table inet firewalld

После еще нескольких подобных неудач я закончил тем, что вручную добавил только следующие таблицы:

      table inet firewalld
table ip firewalld
table ip6 firewalld
Другие вопросы по тегам