Easy-RSA 3 и OpenVPN. Создаем сертификаты.

OpenVPN — популярный сервер для создания VPN-туннелей использующих аутентификацию и шифрование на основе протокола SSL/TLS. Туннели очень часто с одной стороны заканчиваются Mikrotik’ом и логичнее пожалуй генерировать сертификаты «не отходя от кассы», но в случае если туннелей и микротов много, считаю что лучше воспользоваться общим центром сертификации. В этом случае на помощь приходит Easy-RSA. На текущий момент версия 3. Скачать последний релиз можно на Github-странице проекта или установить из репозиториев Ubuntu (18 и выше) и Debian (10 и выше). Я предпочитаю гитхаб.

Создаем центр сертификации

Скачиваем и распаковываем последнию версию пакета. Изменяем рабочую папку на папку приложения и… С дефолтными настройками Easy-RSA готов к работе, но если вы хотете добавить чуть больше подробностей в сертификат необходимо внести правки в файл конфига vars

cp vars.example vars

Откроем файл vars на редактирование и найдем опцию EASYRSA_DN, она предусматривает два режима: упрощенный cn_only, при котором сертификат содержит только CN (имя того, кому выдан сертификат) и стандартный org, при котором заполняются все реквизиты организации. Для OpenVPN можно использовать любой режим. Я выбираю org, после чего убираем # со следующих строк и вносим свои данные:

set_var EASYRSA_DN  "org"
# если вы выбрали cn_only, то редактировать 
# нижеуказанные переменные нет смысла
set_var EASYRSA_REQ_COUNTRY	"UA"
set_var EASYRSA_REQ_PROVINCE	"21"
set_var EASYRSA_REQ_CITY	"Kharkiv"
set_var EASYRSA_REQ_ORG		"MY.ORG.UA"
set_var EASYRSA_REQ_EMAIL	"me@example.net"
set_var EASYRSA_REQ_OU		"peer-network"

Переменная EASYRSA_KEY_SIZE указывает размер ключа, на текущий момент стандартным считается размер начиная с 2048, если нам нужна безопасность — можем увеличить его до 3072 или 4096, но нагрузка на процессор возрастет, а пропускная способность будет ниже. Если же криптографическая стойкость не играет роли, а туннель будет использован для передачи не критичных данных, а также возможно использование слабых устройств, то стоит уменьшить размер до 1024. Осталяю по умолчанию

Переменные EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE задают срок действия корневого сертификата CA и сертификатов пользователей (сервера и клиентов), устанавливаются в днях, по умолчанию это 3650 (10 лет) и 1080 (5 лет) дней, переменная EASYRSA_CERT_RENEW задает количество дней до истечения сертификата, когда становится доступным его продление, по умолчанию это 30 дней, устанавливаю в 60 и сохраняю файл/

Пришло время инициализировать центр сертификации. Данное действо выполняется один раз и при повторном вводе команды существующий CA будет перевыпущен и прийдется перевыпускать все ключи и сертификаты.

./easyrsa init-pki
Читать далее

Что такое MAC или физический адрес и стандарты MAC-48, EUI-48 и EUI-64

Все, кто хоть немного разбирается в сетях слышал о MAC-адресе и знает что это физический адрес сетевой карты «зашитый» в неё производителем. Естественно, многие знают что MAC можно почти всегда поменять в настройках сетевой карты в Windows и всегда в Linux. С появлением IPv6 возможно кто-то слышал про стандарт EUI-64. Но что это такое, откуда берется и для чего он нужен — знают не многие. Кроме этого еще существуют стандарты MAC-48 и EUI-48. Что это такое и для чего они нужны? Давайте разбираться.

  • MAC-address или MAC-48

МАС адрес (media access control address или MAC-48) – уникальный идентификатор, назначенный сетевому адаптеру, применяется в сетях стандартов IEEE 802, в основном Ethernet, Wi-Fi и Bluetooth. Появился при проектировании стандарта Ethernet. Используется для идентификации отправителя и получателя фрейма. Предполагается, что при появлении в сети нового компьютера (или другого устройства, способного работать в сети) пользователю не придётся настраивать этому компьютеру MAC-адрес вручную. Адрес имеет длину в 48 бит, т.е. 6 байт. Канонического формата записи нет или точнее их три. Записывается как шесть шестнадцатиричных чисел:

00-AB-CD-01-02-03 (Windows)
00:AB:CD:01:02:03 (Unix)
00AB.CD01.0203 (Cisco)
Читать далее

Unbound — запускаем рекурсивный кеширующий DNS резолвер

Для чего нужен DNS резолвер думаю знают все, он обеспечивает преобразование запрашиваемого клиентом символьного имени домена в IP-адрес обслуживающего эту доменную зону сервера. Различные DNS-сервера провайдеров как правило являются кеширующим рекурсивным днс-сервером. Где, под кеширующим мы понимаем что сервер какое-то время данные о запрашиваемых сайтах хранит в кеше и возвращает ответы из памяти не обращаясь к корневым серверам. Допустимое время кэширования содержится в поле TTL ресурсной записи. А из понятия рекурсивный следует то что сервер, принявший запрос, опрашивает все узлы в порядке убывания уровня зон (от корневых зон), пока не получит положительный ответ или информацию о том, что запрашиваемый домен не существует. Но давайте оставим теорию и настроим свой рекурсор.

Читать далее

AS-Stats — инструмент для создания графиков трафика для каждой AS из записей NetFlow / sFlow

Вы когда-нибудь задавались вопросом что интересно людям в Интернете, какие AS генерируют трафик в вашей сети, а также как это посчитать / визуализировать? Один из вариантов сбора статистики это AS-Stats

Скрипты анализируют sFlow / NetFlow потоки, по результатам строят графики и выбирают топ. Вот как это выглядит:

Читать далее

IPFW — настраиваем файрвол на FreeBSD

По умолчанию в дистрибутиве предустановлено сразу 3 firewall’a: IPFILTER, IPFW и PF. Какой использовать — выбирает пользователь. Мы же попробуем рассмотреть нормально закрытую конфигурацию IPFW.

Вводные данные: Имеется сервер с TrueNAS’ом и запущенными на нем сервисами, например FTP, необходимо разрешить доступ к FTP для всех сетей организации, а управление и мониторинг сервера выделить в отдельные менеджмент сети.

Создадим два файлика:
где firewall.conf — файл конфигурации файрвола, а allowed_nets.ipfw — сети с которых есть доступ к сервисам на сервере. Каждая сеть в файлике allowed_nets указывается с новой строки

touch /etc/firewall.conf 
touch /etc/allowed_nets.ipfw
# Пример файла с разрешенными сетями
root@truenas[~]# cat /etc/allowed_nets.ipfw
10.10.5.0/24
10.10.6.0/25
10.20.7.0/26
192.168.0.0/27
172.17.10.0/23
Читать далее

GRE туннель. FreeBSD

FreeBSD из «коробки» полность поддерживает GRE и автоматически добавит его в ядро, но если хочется перестраховаться можно всегда добавить ниже указанную строку в /boot/loader.conf

if_gre_load="YES"
# или
echo 'if_gre_load="YES"' >> /boot/loader.conf

Из консоли туннель подымается следующими командами:

ifconfig gre0 create 
ifconfig gre0 10.1.10.1 10.1.10.2 netmask 255.255.255.252 
ifconfig gre0 tunnel 100.0.2.1 100.0.1.1
# где 10.1.10.0/30 IP внутри туннеля
# 100.0.0.0 адреса серверов для пиринга

Для автозапуска туннеля нужно добавить в /etc/rc.conf следующие строчки:

cloned_interfaces="gre0" 
ifconfig_gre0="inet 10.1.10.1 10.1.10.2 netmask 255.255.255.252 tunnel 100.0.2.1 100.0.1.1"

Как обычно туннель при отсутствии активности падает, потому для поддержания туннеля в поднятом состоянии добавляем в крон:

*/1  *  *  *  *  root  ping -c 10 10.1.10.2

FreeBSD в отличии от Ubuntu равнодушно относится к отсутствию пустых строк в конце cron файла, поэтому оставлять пустую строку или нет — ваше личное дело

GRE туннель. Ubuntu netplan

Примеры конфигурации netplan внятно описаны на страничке проекта https://netplan.io/examples/

Конфигурация лежит в /etc/netplan/*.yaml
Применяется — netplan try и если ничего не отпало — Enter
Или для уверенных в себе — netplan apply

network:
    ethernets:
        ens18:
            addresses:
            - 10.10.10.10/25
            gateway4: 10.10.10.1
            nameservers:
                addresses:
                - 8.8.8.8
                - 1.1.1.1
    tunnels:
        gre-ap120-tr:
            mode: gre
            local: 10.10.10.10
            remote: 192.168.0.10
            mtu: 1400
            addresses:
                - 10.2.2.2/30
            routes:
                - to: 192.168.88.0/24
                  via: 10.2.2.1
                - to: 10.90.91.0/24
                  via: 10.2.2.1
    version: 2

Читать далее

Weathermap-History — отображение GIF-файлов на основе выбранной даты

Weathermap-History — это HTML-страница которая позволяет просмотреть анимированные GIF-файлы на основе выбранной даты. Данная страница является дополнением к переработанному Weathermap плагину для LibreNMS, но может использоваться и для обычного везермап.

За основу взял готовое решение и изменил чтобы гифки генерились для всех карт, а также для удобства добавил линк на карты в подменю Weathermap плагина в LibreNMS. Измененный код с мануалом доступен по ссылке

Читать далее

FastNetMon — добавляем ExaBGP в контейнер и настраиваем автобан.

В прошлой статье мы подготовили docker-контейнер для FastNetMon’a и настроили мониторинг в Grafana. Тестирование показало что трафик мониторится коректно, нагруженные и служебные подсети были перенесы в отдельные группы. Пришло время расширить функционал контейнера и добавить ExaBGP.

ExaBGP это инструмент для внедрения произвольных маршрутов в сеть, включая IPv6 и FlowSpec. Вместе с FastNetMon позволяет автоматически детектить и блокировать DDoS-атаки. Варианты использования инструмента описаны на страничке проекта. В моем случае оборудованиие не поддерживает FlowSpec, поэтому все настраивается под анонсы в blackhole-community.

Читать далее

FastNetMon — мониторинг DDoS атак. Docker-контейнер на базе Alpine

FastNetMon — один из сервисов который позволяет найти и предотвратить атаку на сеть. На сайте проекта описаны различные варианты установки и настройки мониторинга, также есть хорошая документация на русском. Мне нужен вариант с анализатором sflow-пакетов, и так как источников с которого летят сии пакеты более одного, решил остановиться на docker-контейнере.

Единственное что не устраивало в официальной реализации контейнера, то что собран он на базе ubuntu. Потому поискал любительские сборки на базе Alpine  и наткнулся на докерфайл Сборка делалась достаточно давно и код FastNetMon’a уже изрядно поменялся, плюс компиляция крашилась из-за неявно указаных модулей в коде. Поэтому пришлось подправить напильником. В результате контейнер собрался и работает. Правда в последствии я в него добавил еще curl для отправки нотификаций в telegram. Файлик доступен по ссылке

Читать далее