В статье используются следущие термины:
Инструкция из этой статьи позволяет заблокировать доступ виртуальных машин к определённому сайту или IP-адресу на уровне bridge-сети через nftables.
В статье рассмотрены следующие варианты блокировки:
- с сохранением после перезагрузки узла кластера — если требуется длительная блокировка IP-адреса;
- без сохранения после перезагрузки узла кластера — если требуется временная блокировка IP-адреса.
Подготовка
Определите IP-адрес сайта:
dig +short <адрес_сайта>Пример вывода
dig +short <адрес_сайта>
10.10.10.1
10.10.11.1Блокировка с сохранением после перезагрузки узла
- Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Создайте файл /etc/nftables/sets/blocked_sites.nft
vim /etc/nftables/sets/blocked_sites.nft - Добавьте содержимое файла:
ВажноПравило блокировки сайта в nftables будет обрабатываться раньше других правил (DNAT, REDIRECT, ACCEPT), потому что ему назначен более высокий приоритет (-100).table bridge blacklist { chain dropper { type filter hook prerouting priority -100; policy accept; ip daddr { 10.10.10.1, 10.10.11.1 } drop } }Пояснение - Добавьте в начало конфигурационного файла /etc/nftables/vmmgr.nft следующую строку:
include "/etc/nftables/sets/blocked_sites.nft"Пример Expand source# version=0.0.3 include "/etc/nftables/sets/blocked_sites.nft" table inet filter { ... }Это подключит созданный файл в основную конфигурацию.
- Примените изменения:
nft -f /etc/nftables/vmmgr.nft - Убедитесь, что правило добавлено:
nft list chain bridge blacklist dropper
Чтобы отключить блокировку, удалите таблицу bridge blacklist:
nft delete table bridge blacklistБлокировка без сохранения после перезагрузки узла
- Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Добавьте правило:
nft insert rule bridge nat PREROUTING ip daddr { 10.10.10.1, 10.10.11.1 } dropПояснения - Убедитесь, что правило применено:
nft list chain bridge nat PREROUTING
Чтобы отключить блокировку:
- Проверьте номер
handleдля правила блокировки IP-адреса:
nft -a list chain bridge nat PREROUTINGПример выводаip daddr { 10.10.10.1 } drop # handle <номер_handle>Пояснения - Удалите правило:
nft delete rule bridge nat PREROUTING handle <номер_handle>Пояснения