🛡️Sentry Node

Технология для защиты валидатора против DDoS атаки

Теория

Валидатор в обязательном порядке должен обеспечить безопасность своего узла, так как несёт ответственность не только за свои деньги.

Один из вариантов атак на ноды - это DDoS. Атака на вычислительную систему с целью довести её до отказа.

Для того чтобы обезопасить сервер - нужна The Sentry Node Architecturearrow-up-right. При которой нода валидатора подключается только к проверенным полным узлам, которые прописываются в файл config.toml. Надо прописать несколько Sentry Nods, чтобы при отказе одного узла остальные, валидатор имел доступ к сети через оставшиеся узлы.

Где взять Sentry Node? Мы должны сами её создать - арендовать сервер, установить на него блокчейн Axelar, засинхронизировать (без валидатора) и настроить таким образом, чтобы она была прослойкой между общей сетью и нашим валидатором.

При такой настройке сети для валидатора, он остается приватным, защищенным от DDoS атак. Атакуются только Sentry Nodes, которые видны в общей сети. И именно поэтому сторожевых узлов должно быть несколько!

Теперь перечислим параметры, которые надо настроить для корректной работы Sentry Node архитектуры. Как я говорил выше, эти параметры меняются в файле config.toml

1) pex Этот параметр отвечает за работу gossip протокола (обмен между пирами сети). pex=false - gossip protocol отключен. Нода будет коннектиться только к пирам (нодам) из списка persistent_peers. И не будет "сплетничать" с общедоступной сетью. pex=true - означает, что нода будет общаться со всей сетью. Кроме того, что нода сможет синхронизироваться от любого public узла, она еще расскажет всей сети об узлах из списка persistent_peers, и к ним сможет подключиться каждый.

2) persistent_peers - список приоритетных для подключения узлов, которым доверяет валидатор, считает что они будут безотказно работать, и он сможет к ним подключаться. -Если pex=true,то persistent_peers нужны при первом запуске, чтобы нода начала синхронизироваться с указанных узлов. Но когда "peer exchange reactor" заполнит список доступных узлов, то persistent_peers уже будут не нужны. -Если pex=false то у ноды единственная возможность синхронизироваться - это с узлов, указанных в persistent_peers.

Записывается таким образом: <nodeid>@<ip>:<port>,<nodeid>@<ip>:<port>,...

Где: <nodeid> - id ноды, который можно посмотреть по адресу ~/.axelar_testnet/.core/keyring-file

<ip> - ip сервера, на котором установлена нода <port> - порт который используется для подключения. Посмотреть какой порт используется для пиров можно в файле config.toml:

3) private_peer_ids - список пиров, адреса которых запрещается выдавать в сеть, для общего пользования. Другими словами, ноде запрещается о них сплетничать в сети.

При pex=true это поле надо обязательно заполнить. При pex=false этот параметр можно оставить пустым, так как gossip protocol отключен.

Записывается так-же: <nodeid>@<ip>:<port>,<nodeid>@<ip>:<port>,...

4) addr_book_strict для начала посмотрим на подсказку из config.toml

addr_book_strict = true - "строгая" адресная книга включена. Что означает, для подключения, ваша нода будет рассматривать только публичную сеть (общедоступные ноды). То есть коннекта к приватным сетям быть не может. addr_book_strict = false - "строгая" адресная книга выключена. Кроме публичных сетей, у ноды появляется возможность работать в приватных/локальных сетях. Это как раз то что нам нужно. Так как мы должны настроить приватную сеть для валидатора. Sentry nods тоже должны иметь настройку addr_book_strict = false так как для настройки приватного взаимодействия, false должна быть на всех участниках приватной сети.

Настройка Sentry нод

Шаги по настройки ноды: Установка Axelar, изменение config.toml, настройка firewall, перезагрузка ноды.

Установка Axelar

После того, как мы арендовали новый сервер, нам надо так же, как и для ноды валидатора настроить безопасность сервера.

Затем установить на него блокчейн Axelar, и синхронизировать до состояния false. Валидатора созданать на этой ноде не нужно. Для этого сделайте все шаги из раздела Quick sync, кроме Получения AXL токенов. И переходим к изменению config.toml.

Editing config.toml

Вводим команду для открытия конфиг файла в редакторе nano:

Изменения проводятся в разделе файла:

Параметры изменения для Sentry Nodes:

circle-info

pex = true - Sentry ноды должны быть подключены к общей сети блокчейна. Иметь возможность пользоваться общей address book, а значит gossip протокол должен быть включен!

persistent_peers = "<nodeid>@<ip>:<port>,<nodeid>@<ip>:<port>" - список адресов Валидатора и ваших Sentry Nodes. Можно добавить Sentry Node команды или проверенных участников сети.

private_peer_ids = "<nodeid_VAL>@<ip_VAL>:26656" - Вставляем nodeid и ip ноды валидатора, чтобы запретить Sentry нодам распространять информацию о валидаторе.

addr_book_strict = false - это параметр разрешающий Sentry нодам работать в приватной сети. В публичной они тоже смогут работать

Настройка firewall

Мы уже настроили firewall в разделах "открытие портов" и "изменение ssh порта". Поэтому можно ничего не изменять.

Рестарт

Сделаем рестарт ноды, для вступления в силу изменений, которые мы провели в config.toml.

Проверим логи:

Если у вас настроено "сжатие" блокчейна, а именно log_level = "warn", то возможно удобнее посмотреть, подгружаются ли блоки введя несколько раз команду:

Теперь переходим к настройке валидатора.

Настройка ноды валидатора

Шаги по настройки ноды: Изменение config.toml, настройка firewall, перезагрузка ноды.

Editing config.toml

Вводим команду для открытия конфиг файла в редакторе nano:

Изменения проводятся в разделе файла:

Параметры изменения для Валидатора:

circle-info

pex = false - Нода будет подключаться только к пирам Sentry Nodes из списка persistent_peers, а так же не будет распространять свой адрес в сеть. Тем самым ограничив трафик.

persistent_peers = "<nodeid>@<ip>:<port>,<nodeid>@<ip>:<port>" - список адресов ваших Sentry Nodes, для возможности подключения к ним.

private_peer_ids = "" - Ничего не вписываем, так как gossip protocol отключен, и нода не будет выдавать в общую сеть никаких пиров. Тем более Sentry Node работают не только в приватной но и в публичной сети.

addr_book_strict = false - параметр разрешающий валидатору работать в приватной сети.

Настройка firewall

Мы уже настроили firewall в разделах "открытие портов" и "изменение ssh порта". Поэтому можно ничего не изменять.

Единственное, что сейчас порт 26656 открыт для всех. И можно его закрыть, и разрешить подключение только к IP серверов с вашими Sentry Nods. Делается это так:

Где <ip_1>, <ip_2>,..., <ip_n> - это ip серверов с установленной на них Sentry Node.

Рестарт

Сделаем рестарт ноды, для вступления в силу изменений, которые мы провели в config.toml:

Проверим логи:

Если у вас настроено "сжатие" блокчейна, а именно log_level = "warn", то возможно удобнее посмотреть, подгружаются ли блоки введя несколько раз команду:

Теперь все готово! 🎉 Ваш Валидатор защищен от DDoS атак.

Ссылки: https://medium.com/@kidinamoto/tech-choices-for-cosmos-validators-27c7242061eaarrow-up-right https://forum.cosmos.network/t/sentry-node-architecture-overview/454arrow-up-righthttps://github.com/cosmos/gaia/blob/main/docs/validators/security.mdarrow-up-right https://github.com/bitfishlabs/cosmos-validator-designarrow-up-right

Last updated