> For the complete documentation index, see [llms.txt](https://surftest.gitbook.io/axelar-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://surftest.gitbook.io/axelar-wiki/russian/sentry-node.md).

# Sentry Node

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

## Теория

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

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

Для того чтобы обезопасить сервер - нужна [The Sentry Node Architecture](https://forum.cosmos.network/t/sentry-node-architecture-overview/454). При которой нода валидатора подключается только к проверенным полным узлам, которые прописываются в файл config.toml. Надо прописать несколько Sentry Nods, чтобы при отказе одного узла остальные, валидатор имел доступ к сети через оставшиеся узлы.&#x20;

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

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

![](https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2FpvtGmI6nr2GxdDmvv2i2%2FSentry%20Nodes%20Architecture4.png?alt=media\&token=44e7b6fb-e2bf-4f11-8447-906d27377115)

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

1\) **`pex`** Этот параметр отвечает за работу gossip протокола (обмен между пирами сети).\
&#x20;`pex=false` - gossip protocol отключен. Нода будет коннектиться только к пирам (нодам) <mark style="color:green;">из списка persistent\_peers</mark>. И не будет "сплетничать" с общедоступной сетью. \
&#x20;`pex=true` - означает, что нода будет общаться со всей сетью. Кроме того, что нода сможет синхронизироваться от любого public узла, она еще расскажет всей сети об узлах <mark style="color:green;">из списка persistent\_peers</mark>, и к ним сможет подключиться каждый.

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

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

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

<img src="https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2F1etLKwE6Sxcm9FOsqKvm%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%BE%D1%82%202022-03-27%2023-50-27.png?alt=media&amp;token=cc3d3bc1-f822-4e50-88ca-2bec4c5f81a6" alt="" data-size="original">\
`<ip>` - ip сервера, на котором установлена нода\
`<port>` - порт который используется для подключения. Посмотреть какой порт используется для пиров можно в файле config.toml:\
![](https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2FCf2MjMsG2a1zGSZvSjxL%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%BE%D1%82%202022-03-27%2019-26-21.png?alt=media\&token=be558390-b95d-4c7c-ad9f-c84218df1bc2)

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

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

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

4\) **`addr_book_strict`** для начала посмотрим на подсказку из config.toml![](https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2FjtFsFAoLWfH1o9C4hLhS%2Fimage.png?alt=media\&token=e7c139fa-30f2-4d1c-a48a-7d135c9e6d9c)

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

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

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

### Установка Axelar

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

Затем установить на него блокчейн Axelar, и синхронизировать до состояния false. Валидатора созданать на этой ноде не нужно. Для этого сделайте все шаги из раздела [Quick sync](/axelar-wiki/russian/ustanovka-axelar/full-setup-testnet.md#quick-sync), кроме  [Получения AXL токенов](/axelar-wiki/russian/ustanovka-axelar/full-setup-testnet.md#get-axl-tokens-from-the-faucet). \
И переходим к изменению config.toml.

### Editing config.toml

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

```python
nano ~/.axelar_testnet/.core/config/config.toml
```

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

```
###################################
###  P2P Configuration Options  ###
###################################
```

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

```python
# Сделаем узел видимым в сети, включив gossip protocol 
pex = true

# Для Axelar вместо <port> подставляем 26656
# Вставляем параметры Валидатора, а также всех ваших Sentry Nodes через запятую
persistent_peers = "<nodeid>@<ip>:26656,<nodeid>@<ip>:26656"

# Сторожевые узлы должны держать валидатора в секрете от сети
private_peer_ids = "<nodeid_VAL>@<ip_VAL>:26656"

# Set false for private or local networks
addr_book_strict = false

```

{% hint style="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 нодам работать в приватной сети. В публичной они тоже смогут работать
{% endhint %}

### Настройка firewall

Мы уже настроили firewall в разделах "[открытие портов](/axelar-wiki/russian/nastroika-servera/otkrytie-portov.md)" и "[изменение ssh порта](/axelar-wiki/russian/bezopasnost/izmenenie-ssh-porta.md)". Поэтому можно ничего не изменять.

### Рестарт

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

```python
# Остановим ноду:
kill -9 $(pgrep -f "axelard start")

# Возобновим работу ноды Axelar.
# Напомню, что вместо my-secret-password надо вставить свой keyring пароль:
KEYRING_PASSWORD='my-secret-password' ./scripts/node.sh -n testnet

```

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

```python
ulimit -n 16384
tail -f ~/.axelar_testnet/logs/axelard.log
```

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

```python
ulimit -n 16384
curl localhost:26657/status | jq '.result.sync_info'
```

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

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

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

### Editing config.toml

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

```python
nano ~/.axelar_testnet/.core/config/config.toml
```

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

```
###################################
###  P2P Configuration Options  ###
###################################
```

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

```python
# Сделаем узел приватным, отклячив gossip protocol 
pex = false

# Для Axelar вместо <port> подставляем 26656
# Вставляем параметры всех ваших Sentry Nodes через запятую
persistent_peers = "<nodeid>@<ip>:26656,<nodeid>@<ip>:26656"

# Ничего не меняем, оставляем пустым
private_peer_ids = ""

# Set false for private or local networks
addr_book_strict = false

```

{% hint style="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** - параметр разрешающий валидатору работать в приватной сети.
{% endhint %}

### Настройка firewall

Мы уже настроили firewall в разделах "[открытие портов](/axelar-wiki/russian/nastroika-servera/otkrytie-portov.md)" и "[изменение ssh порта](/axelar-wiki/russian/bezopasnost/izmenenie-ssh-porta.md)". Поэтому можно ничего не изменять.

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

```python
sudo ufw deny 26656/udp
sudo ufw allow from <ip_1> to any port 26656/udp
sudo ufw allow from <ip_2> to any port 26656/udp
sudo ufw allow from <ip_n> to any port 26656/udp

sudo ufw status verbose
```

Где \<ip\_1>, \<ip\_2>,..., \<ip\_n> - это ip серверов с установленной на них Sentry Node.

### Рестарт

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

```python
# Остановим ноду:
kill -9 $(pgrep -f "axelard start")

# Возобновим работу ноды Axelar.
# Напомню, что вместо my-secret-password надо вставить свой keyring пароль:
cd ~/axelarate-community
KEYRING_PASSWORD='my-secret-password' ./scripts/node.sh -n testnet
```

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

```python
ulimit -n 16384
tail -f ~/.axelar_testnet/logs/axelard.log
```

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

```python
ulimit -n 16384
curl localhost:26657/status | jq '.result.sync_info'
```

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

Ссылки:\
<https://medium.com/@kidinamoto/tech-choices-for-cosmos-validators-27c7242061ea>\
<https://forum.cosmos.network/t/sentry-node-architecture-overview/454><https://github.com/cosmos/gaia/blob/main/docs/validators/security.md>\
<https://github.com/bitfishlabs/cosmos-validator-design>
