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