Не удается добавить политику в мою пользовательскую цепочку в nftables через Python libnftables. Можете ли вы сказать мнPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Не удается добавить политику в мою пользовательскую цепочку в nftables через Python libnftables. Можете ли вы сказать мн

Сообщение Anonymous »

Я пытаюсь создать таблицу, цепочку и набор правил для nft в Python, чтобы они действовали как белый список.
Поэтому мне нужна цепочка с политикой «удаления», чтобы удалить все исходящие пакеты, которые не соответствуют утвержденным пунктам назначения, указанным в правилах этой цепочки.
Я хочу использовать пользовательскую таблицу, чтобы упростить обслуживание и чтобы Fail2ban и другие утилиты могли работать параллельно с этим. белый список (который будет предназначен только для пакетов, поступающих только с одного конкретного интерфейса).
Я использую Python и библиотеку nft json, я вижу, что создается моя таблица, цепочка и правило, но никакая политика не указана в выводе набора правил после запуска моей программы, поэтому я предполагаю, что по умолчанию она будет «принята».
Я использую строку json для настройки новой таблицы и цепочки внутри, в настоящее время у него есть очень простое правило для целей тестирования. Он проходит проверку libnftables, но когда я перечисляю набор правил после запуска кода Python, я вижу таблицу, цепочку и правила, но никакая политика не применяется вообще.
вот строка настройки:< /p>
{'nftables':
[{'add': {'table': {'family': 'ip', 'name': 'O365'}}},
{'add': {'chain': {'family': 'ip', 'table': 'O365', 'name': 'O365WhiteList', 'policy': 'drop'}}},
{'add': {'rule': {'family': 'ip', 'table': 'O365', 'chain': 'O365WhiteList',
'expr': [{'match': {'op': '==', 'left': {'payload': {'protocol': 'tcp', 'field': 'dport'}}, 'right': 22}}, {'accept': None}
]
}}}]}

А вот результат набора правил:
# Warning: table ip filter is managed by iptables-nft, do not touch!
table ip filter {
chain f2b-sshd {
counter packets 92105 bytes 13096562 return
}

chain INPUT {
type filter hook input priority filter; policy accept;
meta l4proto tcp tcp dport 22 counter packets 132201 bytes 15881220 jump f2b-sshd
}
}
# Warning: table ip nat is managed by iptables-nft, do not touch!
table ip nat {
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oifname "ens19" counter packets 983 bytes 70843 masquerade
}
}
table ip O365 {
chain O365WhiteList {
tcp dport 22 accept
}
}

Как видите, я еще не подключаюсь к своей таблице, я просто хочу сначала убедиться, что она создана правильно. Таблица, цепочка и правило есть, но политика не указана.
Есть идеи? Насколько я вижу, справочная страница libnftables-json бесполезна, поскольку «политика» указана только как STRING.
Ниже приведен полный код вышеизложенного:
import json
import nftables

#some objects to be turned into json for nftables to apply as commands

delTable = {"nftables": [{ "delete": { "table": { "family": "ip", "name": "O365" }}}]}

setupTablesCmds= """
{ "nftables": [
{ "add": { "table": { "family": "ip", "name": "O365" }}},
{ "add": { "chain": {
"family": "ip",
"table": "O365",
"name": "O365WhiteList",
"policy": "drop"
}}},
{ "add": { "rule": {
"family": "ip",
"table": "O365",
"chain": "O365WhiteList",
"expr": [
{ "match": {
"op": "==",
"left": { "payload": {
"protocol": "tcp",
"field": "dport"
}},
"right": 22
}},
{ "accept": null }
]
}}}
]}
"""

nft = nftables.Nftables()
try:
nft.json_validate(json.loads(setupTablesCmds))
except Exception as e:
print(f"ERROR: failed validating initial setup json schema: {e}")
exit(1)
print(" base config data passed validation, yay!" )
print()
print("Removing old O365 table")

rc, output, error = nft.json_cmd(delTable)
if rc != 0:
# error here is probably because table doesn't exist, which is fine, so no exit on error for now
print(f"ERROR: running json cmd: {error}")

print(" setting up new O365 table " )
print( "json commands = :", json.loads(setupTablesCmds))

rc, output, error = nft.json_cmd(json.loads(setupTablesCmds))
if rc != 0:
print(f"ERROR: running json cmd: {error}")
exit(1)

if len(output) != 0:
print(f"WARNING: output: {output}")

print(" Base config applied ok, O365 table created" )



Подробнее здесь: https://stackoverflow.com/questions/790 ... is-failing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»