September 21, 2022

Система захисту та оповіщення для валідатора HAQQ

Fail2Ban

Fail2Ban — програма захисту серверів від атаки грубою силою. Написана мовою програмування Python, може працювати на POSIX-системах що мають інтерфейс до системи контролю пакетів або файервола, наприклад, iptables або TCP Wrapper.

Метод «грубої сили» (від англ. brute force; або повний перебір) — метод рішення криптографічної задачі шляхом перебору всіх можливих варіантів ключа. Складність повного перебору залежить від кількості всіх можливих рішень задачі. Якщо простір рішень дуже великий, то повний перебір може не дати результатів протягом декількох років або навіть століть.

Принцип роботи

Fail2ban сканує файли журналів (наприклад, /var/log/apache2/error.log) і забороняє IP-адреси, активність з яких виявляє шкідливі ознаки — велика кількість спроб увійти з неправильно введеним паролем, виконати небезпечні або безглузді дії тощо. В разі виявлення таких аномальних дій, Fail2Ban оновлює правила брандмауера для блокування такої IP-адреси на певний проміжок часу. Програма може бути налаштована і на виконання іншої дії (наприклад, відправлення електронного листа).

TenderDuty v2 - моніторинг та оповіщення

Tenderduty - це комплексний інструмент моніторингу мереж Tendermint. Детальніше можна ознайомитися тут

Цей моніторинг TenderDuty v2 дає змогу здійснювати контроль за нодами і, зокрема, бачити висоту мережі, статус валідатора, аптайм, підписані та пропущені блоки. Також можливе підключення сповіщень у телеграм і дискорд.

Встановлення можливе різними способами, але я буду використовувати встановлення через Docker, хоча немає принципової різниці.

Отже, нам знадобиться окремий сервер (що однозначно дає плюс безпеки) або сервер з уже встановленою нодою (нодами). Також потрібно буде знайти відкриті RPC або відкрити свою на основній (не бажано) або резервній ноді.

Підготовка сервера

# оновлюємо репозиторії
sudo apt update && sudo apt upgrade -y
# встановлюємо необхідні утиліти
sudo apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y

File2Ban

# встановлюємо і копіюємо конфіг, який матиме більший пріоритет
apt install fail2ban -y && \ 
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \ 
nano /etc/fail2ban/jail.local
# розкоментувати і додати свій IP: ignoreip = 127.0.0.1/8 ::1 <ip>
systemctl restart fail2ban
# перевіряємо status 
systemctl status fail2ban
# перевіряємо, які jails активні (за замовчуванням тільки sshd)
fail2ban-client status
# перевіряємо статистику по sshd
fail2ban-client status sshd
# дивимося логи
tail /var/log/fail2ban.log
# зупиняємо роботу і видаляємо з автозавантаження
systemctl stop fail2ban && systemctl disable fail2ban

Встановлення docker

apt update && \ 
apt install apt-transport-https ca-certificates curl software-properties-common -y && \ 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
apt update && \ 
apt-cache policy docker-ce && \ 
sudo apt install docker-ce -y && \ 
docker --version

Налаштування

Встановлюємо tenderduty

tmux new-session -s tenderduty 
mkdir tenderduty && cd tenderduty 
docker run --rm ghcr.io/blockpane/tenderduty:latest -example-config >config.yml

Тепер можна завантажити конфіг з російською мовою і відредагувати його

wget -O $HOME/tenderduty/config.yml "https://raw.githubusercontent.com/lesnikutsa/lesnik_utsa/main/monitoring/TenderDuty(ru)/config.yml" 
nano $HOME/tenderduty/config.yml

Для простого моніторингу без сповіщень достатньо змінити в конфігурації:

  • ім'я мережі:
  • chain-id:
  • valoper_address:
  • url:

Зміни які потрібно внести для HAQQ:

1. Рядок:

# Удобное для пользователя имя, которое будет использоваться для меток. Настоятельно рекомендую заключить в кавычки
замість aura пишемо haqq.

2. Рядок:

# chain_id проверяется на соответствие при подключении к конечной точке RPC, также используется в качестве метки в нескольких местах
в chain-id замість euphoria-1 пишемо haqq_54211-2

3. Рядок:

# Ура, в версии v2 мы выводим valcons из запросов abci, так что вам не придется прыгать через обручи, чтобы выяснить, как преобразовывать ключи ed25519 в соответствующий адрес bech32
valoper_address: auravaloper10… вписуєте свій валопер (haqqvaloper….), знайти його можна тут:https://haqq.explorers.guru/)

4. Рядок:

# URL-адрес конечной точки. Должен включать protocol://hostname:port тут замість https://snapshot-1.euphoria.aura.network:443 вставляємо наш RPC http://142.132.202.50:11601/

5. Рядок:

# Должны ли мы отправить предупреждение, если этот хост не отвечает?Замість yes пишемо no.

Зберігаємо файл (Ctrl+O ENTER CTRL+X)

Після налаштування конфіга запускаємо

docker run -d --name tenderduty -p "8888:8888" -p "28686:28686" --restart unless-stopped -v $(pwd)/config.yml:/var/lib/tenderduty/config.yml ghcr.io/blockpane/tenderduty:latest

# дивимося логи

docker logs -f --tail 20 tenderduty

Тепер саме час перевірити інформацію у браузері:

# дізнаємося адресу і вставляємо в браузер
echo -e "\033[0;32mhttp://$(wget -qO- eth0.me):8888/\033[0m"
# http://108.108.108.108:8888/

Вивід:

Для того щоб виконати завдання "False alarm!" надішліть посилання на написаний вами публічний гайд.

HAQQ
Web

Discord
Github

Посилання на джерела з статті:

  1. https://teletype.in/@lesnik13utsa
  2. https://uk.wikipedia.org/wiki/Fail2ban