Weathermap-History — это HTML-страница которая позволяет просмотреть анимированные GIF-файлы на основе выбранной даты. Данная страница является дополнением к переработанному Weathermap плагину для LibreNMS, но может использоваться и для обычного везермап.
За основу взял готовое решение и изменил чтобы гифки генерились для всех карт, а также для удобства добавил линк на карты в подменю Weathermap плагина в LibreNMS. Измененный код с мануалом доступен по ссылке
В прошлой статье мы подготовили docker-контейнер для FastNetMon’a и настроили мониторинг в Grafana. Тестирование показало что трафик мониторится коректно, нагруженные и служебные подсети были перенесы в отдельные группы. Пришло время расширить функционал контейнера и добавить ExaBGP.
ExaBGP это инструмент для внедрения произвольных маршрутов в сеть, включая IPv6 и FlowSpec. Вместе с FastNetMon позволяет автоматически детектить и блокировать DDoS-атаки. Варианты использования инструмента описаны на страничке проекта. В моем случае оборудованиие не поддерживает FlowSpec, поэтому все настраивается под анонсы в blackhole-community.
FastNetMon — один из сервисов который позволяет найти и предотвратить атаку на сеть. На сайте проекта описаны различные варианты установки и настройки мониторинга, также есть хорошая документация на русском. Мне нужен вариант с анализатором sflow-пакетов, и так как источников с которого летят сии пакеты более одного, решил остановиться на docker-контейнере.
Единственное что не устраивало в официальной реализации контейнера, то что собран он на базе ubuntu. Потому поискал любительские сборки на базе Alpine и наткнулся на докерфайл Сборка делалась достаточно давно и код FastNetMon’a уже изрядно поменялся, плюс компиляция крашилась из-за неявно указаных модулей в коде. Поэтому пришлось подправить напильником. В результате контейнер собрался и работает. Правда в последствии я в него добавил еще curl для отправки нотификаций в telegram. Файлик доступен по ссылке
Как правило сервер должен светить в мир или локальную сеть ограниченным списком портов и доступ к серверу необходим ограниченному списку сетей. Также включать и настраивать файрвол как правило лень и это часто откладывается на потом. Решил упростить себе жизнь и сделал простой скрипт который открывает доступ к определенным портам для определенных сетей. Для других сетей сервер будет не доступен. Можно изменить скрипт чтобы некоторые порты были доступны для всех, но на текущий момент мне такое не требуется.
Cкрипт сбрасывает в дефолт текущие настройки файрвола и создает правила для списка IP и портов, которые указаны в переменных ALLOW_IP и ALLOW_PORT. Сам скрипт ниже:
#!/usr/bin/env bash
n=$(tput sgr0);
bold=$(tput bold);
red='\033[0;31m'
if [ "$1" != "yes" ]
then
echo -e ${red}${bold}"This script reconfigure your firewall. Please, before running check variables ALLOW_IP and ALLOW_PORT"
echo "Also script must be run from root user"
echo "For running script enter in terminal ./en-ufw-firewall.sh yes"${n}
exit
fi
ALLOW_IP='10.111.60.0/24 10.111.63.252 192.168.200.165 10.27.0.0/24 10.1.0.0/16'
ALLOW_PORT='22 443 8080 10050'
ufw reset
#load default settings
sudo ufw default deny incoming
sudo ufw default allow outgoing
#
# create rules for IPs
#
for IP in $ALLOW_IP; do
#
# add allowed ports to allowed IPs
#
for PORT in $ALLOW_PORT; do
ufw allow from $IP to any port $PORT
done
done
ufw enable
ufw status numbered
При работе со старыми IPMI-консолями серверов, периодически возникает проблема с невозможностью запуска старых версий джава-апплетов на последней версии openjdk. Самый простой путь решения проблемы — установить дополнительно старую версию java.
1. Установим Java
# основное ставим из официальных репозиториев
apt install -y icedtea-8-plugin icedtea-netx icedtea-plugin openjdk-8-jdk
# старенькую джаву скачиваем по ссылке:
# http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
# (требуется регистрация)
# И распаковываем архив
tar xvzf jdk-7u80-linux-x64.tar.gz
# переносим к остальным джава-машинам
mv jdk1.7.0_80 /usr/lib/jvm/
# и добавляем старую версию java в альтернативы
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_80/bin/javaws 1
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_80/bin/java 1
Время от времени возникает ситуация когда необходимо распараллелить приём sflow потоков на несколько анализаторов, для последующей обработки оных. Дабы реализовать возникшую потребность воспользуемся утилитой Samplicator.
Эта маленькая программа слушает заданный порт и форвардит приходящий поток на требуемые адреса назначения. Более полное описание возможностей можно прочесть на странице проекта.
Устанавливаем программу:
cd /opt
git clone https://github.com/sleinen/samplicator.git
cd samplicator
./autogen.sh
# PS Для запуска скрипта требуются automake и autoconf, если
# скрипт завершиться с ошибкой установите их и перезапустите оный
./configure
make
make install
Перестроение большого software RAID в Linux может занимать длительное время. Скорость синхронизации mdraid зависит от заданных параметров в proc-переменных /proc/sys/dev/raid/speed_limit_max и /proc/sys/dev/raid/speed_limit_min, задающих максимальную и минимальную пропускную способность синхронизации данных.
По умолчанию значения этих переменных выставлены в 200000 и 1000 (Кб). Манипулируя данными параметрами можно существенно увеличить скорость перестроения RAID-массива. Подобрать оптимальные значения можно в зависимости от производительности текущей дисковой системы, чем выше скорость синхронизации, чем меньше ресурсов остается для обработки текущих дисковых операций.
Установим минимальную скорость в 20 Мб/сек, а максимальную в 300 Мб/cек:
Данный вариант не прентендует на правильность, возможно куда более правильно просто добавить в ВМ еще один диск. В примере исправим GPT и увеличим размер LVM.
Если вам по какой либо причине понадобилось изменить размер системного диска на сервере, перед разбивкой и дальнейшей разметкой необходимо исправить таблицу GPT чтобы операционная система увидела дополнительное место.
После загрузки ОС проверяем информацию о диске: fdisk -l или gdisk -l /dev/sda
fdisk -l
GPT PMBR size mismatch (146800639 != 2097151999) will be corrected by w(rite).
Disk /dev/sda: 1000 GiB, 1073741824000 bytes, 2097152000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 47A7D05D-BC6C-486A-853B-5388B9732ECD
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2101247 2097152 1G Linux filesystem
/dev/sda3 2101248 146798591 144697344 69G Linux filesystem
=============================================================
gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 2097152000 sectors, 1000.0 GiB
Model: QEMU HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 47A7D05D-BC6C-486A-853B-5388B9732ECD
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 146800606
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02
2 4096 2101247 1024.0 MiB 8300
3 2101248 146798591 69.0 GiB 8300
Из примера выше видно что система видит 2097152000 секторов, но использовать может только 146800606 Исправим раздел GPT: parted -l