Я пытаюсь создать таблицу, цепочку и набор правил для 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
Не удается добавить политику в мою пользовательскую цепочку в nftables через Python libnftables. Можете ли вы сказать мн ⇐ Python
Программы на Python
1728331545
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" )
Подробнее здесь: [url]https://stackoverflow.com/questions/79063476/adding-a-policy-to-my-custom-chain-in-nftables-via-python-libnftables-is-failing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия