Организация мониторинга и защиты сети во время удаленной работы
Все меньше страха, паники и волнения звучит в словах «Безопасная удаленная работа», это стало обычным и нормальным условием в текущих реалиях.

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

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

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

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

Зачастую, организации используют VPN соединение (Virtual Private Network), реализованное как на программных, так и на аппаратных уровнях.

ООО «ИНФОРИОН» рассмотрела разные реализация VPN соединения, которые строятся как на известных и хорошо зарекомендовавших себя брендах:
  • Cisco Systems;
  • Palo Alto Networks и т.д.
так и на более бюджетных российских, но сертифицированных аналогах в попытке импортозамещения:

  • UserGate;
  • ViPNet и т.д.
В данной статье ООО «ИНФОРИОН» рассмотрела для организации защищенных каналов связи основанный на создании безопасного подключения с помощью таких протоколов организации VPN соединения как:

  • OpenVPN;
  • L2TP/IPsec;
  • PPTP;
  • SSTP;
  • IKEv2
и соответствующего оборудования, типа MikroTik, D-Link и т.п., на котором возможно это реализовать.

Пример организации защищенного подключения на MikroTik при помощи протокола OpenVPN.

Из вышесказанного рассмотрим один пример (технического характера), организация VPN на оборудовании Mikrotik при помощи OpenVPN (относится к защите сети во время удаленной работы.

Настройка состоит из трех этапов:

1. Генерация сертификатов Проверяем правильность настройки времени, это необходимо для правильной работы OpenVPN, лучше отключить «автоматическое определение часового пояса».


/system clock
set time-zone-autodetect=no time-zone-name=Europe/Moscow
Заполняемые поля:
Name и Common Name – название и общее название
Country – страна
State – регион
Locality – город
Organization - организация
Unit - отдел
Key Size – размер ключа
Days Valid – срок действия ключа
Во вкладке «Key Usage», оставляем «галки» на crl sign и key cert. sign. Применяем изменения «Apply» и применяем данный сертификат как корневой «Sign». В появившемся окне выбираем наш сертификат и CA CRL Host (адрес VPN сервера), т.к. MikroTik и есть сервер ставим адрес 127.0.0.1.
/certificate 
add name=ca country="RU" state="99" locality="MSK" organization="Inforion" unit="IT" common-name="ca" key-size=2048 days-valid=365 key-usage=crl-sign, key-cert-sign sign ca ca-crl-host=127.0.0.1
Создаем сертификат для VPN сервера.  Данные те же только меняем имя, “Server”, и Key Usage укажем digital-signature, key-encipherment и tls-server. Затем подпишем сертификат ключом нашего CA, для этого в поле CA выберем только что созданный нами сертификат ca.
/certificate 
add name=Server country="RU" state="99" locality="MSK" organization="Inforion" unit="IT" common-name="Server" key-size=2048 days-valid=365 key-usage=digital-signature,key-encipherment,tls-server sign ovpn-server ca="ca"
Создаем сертификат для клиента.  Данные те же только меняем имя, “User”, и Key Usage укажем только tls-client и подпишем сертификат ключом нашего CA.
<pre>/certificate 
add name=User country="RU" state="99" locality="MSK" organization="Inforion" unit="IT"  common-name=" User" key-size=2048 days-valid=365 key-usage=tls-client sign mikrotik ca="ca"</pre>
Что бы его применить на пользовательской машине необходимо экспортировать созданный нами сертификат, вместе с закрытым ключом, щелкнуть на нужном сертификате правой кнопкой и выбрать Export, в открывшемся окне укажем формат Type - PKCS12 и введем пароль для сертификата (минимум 8 символов, требование MikroTik, без него экспорт не пройдет) в поле Export Passphrase.
/certificate
export-certificate User type=pkcs12 export-passphrase=12345678

Файл экспортируется в папку «Files».
2. Настройка OpenVPN сервера

Создаем диапазона адресов для OpenVPN пользователям. Перейдем в IP - Pool и создадим новый пул: vpn_pool - произвольное имя пула, Addresses - 192.168.10.100-192.168.10.199.
/ip pool add name=vpn_pool ranges=192.168.10.100-192.168.10.199
Перейдем в PPP - Profiles и создадим новый профиль.

Укажем его имя Name - vpn, локальный и удаленный адреса: Local Address - 192.168.10.1, Remote Address - vpn_pool, во вкладке «Secrets» выбераем пункт «PPP Authentication&Accounting» и необходимо поставить флаг в пункте Accounting.

/ip pool add name=vpn_pool ranges=192.168.10.100-192.168.10.199
/ppp aaa set accounting=yes

В данной же вкладке создаем нового пользователя и заполняем поля:

Name – название профиля
Password – пароль пользователя
Service – тип сервиса
Profile – профиль PPP
/ppp secret add name=User password=User profile=ovpn service=vpn

Создаем сам сервер, во вкладке Interface выбираем OVPN Server, в открывшемся окне установим флаг Enabled, Default Profile - ovpn, Certificate - сертификат сервера. Для дополнительной безопасности включим Require Client Certificate – для проверки сертификата подписанного нашим корневым CA. Укажем параметры шифрования: Auth - sha1, Cipher – выбираем уровень шифрования aes 256.
/interface ovpn-server server set auth=sha1 certificate=server cipher=aes256 default-profile=vpn enabled=yes require-client-certificate=yes.

Осталось настроить Firewall.
/ip firewall filter add action=accept chain=input dst-port=1194 protocol=tcp
3. Настройка клиента Настраиваем клиент OpenVPN на компьютере пользователя.

Заходим в папку с установленным клиентом.

Создаем несколько файлов:

Учетные данные пользователя на сервере.

auth.cfg User User Пароль, который мы установили на сертификат

keypass.cfg
12345678

И последний файл

Config
client
dev tun proto tcp remote 192.168.1.1 1194 auth-nocache pkcs12 C:ProgramFilesOpenVPNkeyswin10.p12
auth-user-pass C: ProgramFilesOpenVPNauth.cfg askpass C:ProgramFilesOpenVPNkeypass.cfg
remote-cert-tls server cipher AES-256-CBC resolv-retry infinite nobind
persist-key
persist-tun
verb 3 auth-nocache auth-user-pass route 192.168.1.0 255.255.255.0 192.168.10.1
Переходим к следующему шагу в области организации защищенного доступа к ресурсам на так называемой «удалёнке».

Пример мониторинга (отслеживания состояния значимых ресурсов, на которых основан наш удаленный доступ)

Рассмотрим примеры с настройкой протокола, предназначенного для учёта сетевого трафика NetFlow и протокола отслеживания состояния происходящих в системе событий Syslog для уже установленного MikroTik.

В качестве средства мониторинга будем использовать стек ELK (Подробнее опишем в следующей статье «Принципы построения бесплатного SOC и Кластер ELK на базе Docker»):

  • Elasticsearch (база данных)
  • Logstash (сбор данных)
  • Kibana (визуализация)
Настройка NetFlow для MikroTik состоит из трех этапов:

  1. Установка средств мониторинга ELK;
Кратко опишем процесс установки ELK на Debian:

  • устанавливаем необходимые для работы ELK компоненты:
sudo apt-get install python3
sudo apt-get install python-pip
sudo apt-get install git

распаковываем заранее скачанные архивы:

sudo dpkg -i elasticsearch-7.*-amd64.deb kibana-7.*-amd64.deb logstash-7.*deb jdk-11.0.5_linux-x64_bin.deb

*-текущая версия, возможно посмотреть на сайте разработчика https://www.elastic.co/elastic-stack

производим базовые изменения в конфигурационных файлах ELK (при необходимости 192.168.0.1 заменить на сервер, где ставим стек ELK):
sed -i 's/#server.host: "localhost"/server.host: "192.168.0.1"/' /etc/kibana/kibana.yml
sed -i 's/#server.port: 5601/server.port: 5601/' /etc/kibana/kibana.yml
sed -i 's/#network.host: 192.168.0.1/network.host: 172.17.0.44/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/#http.port: 9200/http.port: 9200/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/#node.name: node-1 (or preferred name)/node.name: node-1 (or preferred   name)/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/#cluster.initial_master_nodes: node-1 (or preferred name)/cluster.initial_master_nodes: node-1 (or preferred name)/' /etc/elasticsearch/elasticsearch.yml

перемещаем текущий файл настройки базовой конфигурации, например first-pipeline.conf в /etc/logstash/conf.d

производим настройку автоматического запуска служб (запуск служб, проверка текущего статуса):
sudo systemctl daemon-reload && sudo systemctl enable elasticsearch.service &&
sudo systemctl enable kibana.service
&& sudo sudo systemctl enable logstash.service
&& sudo systemctl start elasticsearch.service
&& sudo systemctl status elasticsearch.service && sudo systemctl start kibana.service && sudo systemctl status kibana.service && sudo systemctl start logstash.service && sudo systemctl status logstash.service


Настройка MikroTik для отправки NetFlow статистики
/ip traffic-flow
set cache-entries=16k enabled=yes interfaces=bridge
/ip traffic-flow target add dst.address=192.168.0.1:9995 version=5

3. Настройка Logstash

проходим в директорию logstash: cd /etc/logstash/conf.d
создаем конфигурационный файл: touch logstash-netflow.conf
наполняем файл конфигурации:

Слушаем порт 9995

input {
    udp {
        port => 9995
        type => netflow
        codec => netflow {
            versions => [5,9,10]
        }
    }
}

filter {
    translate {
        field => "[netflow][protocol]"
        destination => "[protocol_name]"
        override => "true"
        dictionary => [
            "6", "TCP",
            "17", "UDP",
            "1", "ICMP",
            "47", "GRE",
            "50", "ESP",
            "89", "OSPFIGP"
        ]
    }
    mutate {
        add_field => { "ipv4_src_host" => "%{[netflow][ipv4_src_addr]}" }
        add_field => { "ipv4_dst_host" => "%{[netflow][ipv4_dst_addr]}" }
    }
    cidr {
        add_field => { "interesting" => true }
        address => [ "%{[netflow][ipv4_src_addr]}", "%{[netflow][ipv4_dst_addr]}" ]
        network => [ "192.168.0.0/24" ]
    }
}
output {
    if ( [type] == "netflow" ) {
        elasticsearch {
            hosts => "192.168.0.1:9200"
            index => "netflow-%{+YYYY.MM.dd}"
        }
    }
}
устанавливаем плагины:
        cd /usr/share/logstash/
        bin/logstash-plugin install logstash-codec-netflow
        bin/logstash-plugin install logstash-codec-sflow
        bin/logstash-plugin install logstash-filter-translate
        bin/logstash-plugin install logstash-input-udp
        bin/logstash-plugin install logstash-input-tcp
        bin/logstash-plugin install logstash-filter-dns
        bin/logstash-plugin install logstash-filter-geoip
перезапускаем logstash:
         systemctl restart logstash

Настройка Syslog для MikroTik состоит из четырех этапов:

Установка средств мониторинга ELK, которая описана выше
Настройка MikroTik на отправку Syslog на удаленный сервер

Для этого зайдем System – Logging, вкладка Actions, изменим профиль remove, добавив в него адрес удаленного сервера.
После чего добавляем во вкладке Rules правила, для отправки логов которые нам необходимы.
3. Настраиваем rsyslog сервер:

запускаем rsyslog и даем установку на автоматическое включение после перезагрузки
systemctl enable rsyslog
      systemctl start rsyslog
открываем файл конфигурации и правим
      nano /etc/rsyslog.conf
снимаем комментарии со следующих строк:
$ModLoad imudp

$UDPServerRun 514

$ModLoad imtcp

$InputTCPServerRun 514

в данном примере мы разрешили запуск сервера для соединений TCP и UDP на портах 514. На самом деле, можно оставить только один протокол, например, более безопасный и медленный TCP.

После добавляем в конфигурационный файл строки:
$template RemoteLogs,"/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log"

*.* ?RemoteLogs

& ~

в данном примере мы создаем шаблон с названием RemoteLogs, который принимает логи всех категорий, любого уровня; логи, полученный по данному шаблону будут сохраняться в каталоге по маске /var/log/rsyslog/<имя компьютера, откуда пришел лог>/<приложение, чей лог пришел>.log; конструкция & ~ говорит о том, что после получения лога, необходимо остановить дальнейшую его обработку.

Перезапускаем rsyslog
systemctl restart rsyslog

После того как все действия выполнены верно в каталоге /var/log/rsyslog должна появится папка с именем устройства от которого идет syslog.

4. Настраиваем filebeat, чтобы собирать данные log-файлов из rsyslog-сервера

Скачиваем filebeat необходимой нам версии
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.*-amd64.deb

Или скачиваем .deb архив нужной версии с сайта elastic, перекидываем на машину где стоит elastic и распаковываем

sudo dpkg -i filebeat-7.*-amd64.deb
Исправляем конфигурационный файл:

/etc/filebeat/filebeat.yml
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/rsyslog/*/*.log
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.0.1:9200"]

Проверяем конфигурацию настроек filebeat

из каталога /etc/filebeat/ запускаем

filebeat test config -e
После настройки, в kibana появляется новый индекс filebeat*.
Данных настроек будет достаточно, чтобы отслеживать доступность и возможные умышленные инциденты на устройстве.

Итак, на данных примерах мы рассмотрели, как возможно организовать безопасную удаленную работу и отслеживать состояние защищенности собственных ресурсов, как говорится из того что есть, положив на весы хорошее доработанное решение, способное сильно упростить жизнь «безопаснику» и Open source с его безграничной фантазией и интересными головоломками.