Мой MikroTik – моя цифровая крепость (часть 2)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Статья является продолжением первой части, посвящённой организации практической безопасности сетей, построенных на оборудовании MikroTik. До этого уже даны общие рекомендации по настройке оборудования, а также подробно рассмотрены вопросы безопасности L1 и L2 уровней. В текущей части поговорим о настройке протокола Dot1X и работе Firewall. Лирическое отступление представлено в первой части статьи, поэтому не будем терять время и сразу приступим к техническому описанию. Продолжим говорить про организацию безопасности L2 и рассмотрим безопасность L3.

6. Защита L2 (продолжение)


Dot1X отличный протокол, который должен быть обязательно внедрён в корпоративной сети. Если он работает, то нелегитимное устройство при наличии фактического проводного подключения не получит доступ, пока не будет авторизовано в системе. Здесь в бой вступает открытое программное обеспечение Freeradius, позволяющее организовать полноценный RADIUS сервер. Поднимем его на устройстве, находящемся внутри периметра, канал связи лучше использовать шифрованный, повторим один из постулатов первой части статьи. Особых требований к ресурсам сервера не предъявляются, поэтому для тестов можно использовать самый простой VPS:



apt install freeradius freeradius-mysql freeradius-utils
systemctl start freeradius

Проверяем, что все запустилось:

systemctl status freeradius
netstat -aun
udp        0      0 0.0.0.0:1812            0.0.0.0:*
udp        0      0 0.0.0.0:1813            0.0.0.0:*

Настраиваем параметры RADIUS клиента, которым будет являться наше устройство MikroTik (соединение, разумеется, пускаем по шифрованному VPN туннелю, так как протокол RADIUS работает без шифрования):

vi /etc/freeradius/3.0/clients.conf

client MIKROTIK {
ipaddr = 192.168.1.1
secret = testtest
}

vi /etc/freeradius/3.0/dictionary
$INCLUDE /usr/share/freeradius/dictionary.mikrotik
Добавляем пользователей:
vi /etc/freeradius/3.0/users

sun Cleartext-Password := "test2"
Mikrotik-Group = "full"

Проверяем корректность работы RADIUS службы (в файле конфигурации /etc/freeradius/3.0/clients.conf указан пароль по умолчанию для клиента «testing123», при подключении по localhost):

systemctl restart freeradius
radtest sun test2 localhost 0 testing123
radtest sun test2 192.168.1.9 0 testtest
radtest -t mschap test test localhost 0 testing123

Теперь настроим Dot1X клиент на оборудовании MikroTik:

/radius add address=192.168.1.9 secret=testtest service=wireless,dot1x timeout=1s
/interface dot1x server add comment=Test_Dot1X interface=LAN interim-update=30s

Настройки все прозрачны, поэтому на них не останавливаемся. Если всё сделано верно, то траблшутинг не понадобится. Просмотрим лог на наличие ошибок:

tail /var/log/freeradius/radius.log -F

Теперь рассмотрим настройку клиентской части на базе операционной системы Windows. Первым делом запустим необходимую службу Dot3svc:



Далее требуется настроить соответствующий сетевой интерфейс на работу с протоколом Dot1X, как показано на скрине:



Если всё сделано верно, то обмен пакетами начнётся только после того, как устройство пройдёт необходимую процедуру:



Просмотрим пакеты, передающиеся службой RADIUS:

tcpdump -i wlan1 'port 1812 or 1813'
IP 192.168.1.1.44019 >192.168.1.9.radius: RADIUS, Access-Request (1), id: 0xef length: 138
IP 192.168.1.9.radius > 192.168.1.1.44019: RADIUS, Access-Challenge (11), id: 0xef length: 80
IP 192.168.1.1.43602 > 192.168.1.9.radius: RADIUS, Access-Request (1), id: 0xf0 length: 153
IP 192.168.1.9.radius > 192.168.1.1.43602: RADIUS, Access-Challenge (11), id: 0xf0 length: 64
IP 192.168.1.1.54100 > 192.168.1.9.radius: RADIUS, Access-Request (1), id: 0xf1 length: 227
IP 192.168.1.1.54100 > 192.168.1.9.radius: RADIUS, Access-Request (1), id: 0xf1 length: 227

Если прошло корректно, то ваше устройство получит L2 доступ в локальную сеть:



Со стороны MikroTik это выглядит так:



Если нет, то будет примерно такая картина:



Кроме этого, как было сказано в первой части статьи, RADIUS сервер можно использовать для работы беспроводной сети по протоколу WPA2-Enterprise. В таком случае, при успешном подключении пользователей в логах можно увидеть сообщения:



Для удобного администрирования осталось обзавестись удобным интерфейсом. Для этого существует проект Daloradius, который представляет из себя красивое и удобное web приложение, позволяющее отслеживать работу Freeradius сервера и управлять его пользователями:



Для его установки выполним следующие действия:

apt install mariadb-server mariadb-client
mysql_secure_installation

Настроим базу данных:

mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "verySTRONGpassword!!";
FLUSH PRIVILEGES;

Установим необходимые компоненты для работы web приложения и выполним необходимые настройки:

apt install apache2 php libapache2-mod-php wget unzip php-{gd,common,mail,mail-mime,mysql,pear,mbstring,xml,curl}
pear install DB
mysql -u root -p radius </etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
vi /etc/freeradius/3.0/mods-enabled/sql

sql {
	driver = "rlm_sql_mysql"
	dialect = "mysql"
	
	# Connection info:
	server = "localhost"
	port = 3306
	login = "radius"
	password = "verySTRONGpassword!!"
	# Database table configuration for everything except Oracle
	radius_db = "radius"
}

# Set to ‘yes’ to read radius clients from the database (‘nas’ table)
# Clients will ONLY be read on server startup.
read_clients = yes
# Table to keep radius client info
client_table = "nas"

chgrp -h freerad /etc/freeradius/3.0/mods-available/sql 
chown -R freerad:freerad /etc/freeradius/3.0/mods-enabled/sql

cd /usr/src/
wget https://github.com/lirantal/daloradius/archive/master.zip
unzip master.zip
mv daloradius-master/ daloradius
cd daloradius

mysql -u root -p radius < contrib/db/fr2-mysql-daloradius-and-freeradius.sql 
mysql -u root -p radius < contrib/db/mysql-daloradius.sql
cd ..
mv daloradius /var/www/html/
chown -R www-data:www-data /var/www/html/daloradius/
mv /var/www/html/daloradius/library/daloradius.conf.php.sample /var/www/html/daloradius/library/daloradius.conf.php
chmod 664 /var/www/html/daloradius/library/daloradius.conf.php
vi /var/www/html/daloradius/library/daloradius.conf.php

$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'verySTRONGpassword!!';
$configValues['CONFIG_DB_NAME'] = 'radius';

systemctl restart freeradius apache2

После этого показанная красивая web морда будет доступна по адресу IP_your_server/daloradius, логин и пароль соответственно administrator и radius. Для безопасности нужно обязательно настроить HTTPS для вашего веб сервера. Ну вот и все, что касается безопасности L2, настало время переходить на новый уровень. Поехали…

7. Защита L3


Первое, про что поговорим, это про IP spoofing. Если злоумышленник самостоятельно сконфигурирует IP адрес своего сетевого интерфейса, то, во-первых, может получить L3 доступ в сеть, во-вторых, вмешаться в её нормальное функционирование.





На рисунке приведено, как это выглядит, в том числе глазами MikroTik, когда DHCP сервер ему выдал адрес 192.168.1.2, а в ручном режиме был задан 192.168.1.55:



Для борьбы с этим необходимо выполнить настройки, знакомые из первой части статьи:

/ip dhcp-server set dhcp_home add-arp=yes
/interface bridge set bridge arp=reply-only

Настало время перейти к firewall filter. Покажем базовую настройку, на которую можно смело опираться в своих конфигурациях. Для разгрузки центрального процессора маршрутизатора первым делом добавляем правила:

/ip firewall filter
add action=accept chain=input comment="Accept established,related" connection-state=established,related
add action=drop chain=input comment="Drop invalid" connection-state=invalid
add action=accept chain=forward comment="Accept established,related" connection-state=established,related
add action=drop chain=forward comment="Drop invalid" connection-state=invalid

Таким образом, связанные и уже установленные соединения будут пролетать мимо firewall. Не валидные соединения отправляем в drop. Далее, как и в комментариях пользователя, упомянутого в первой части статьи, закрываем доступ из внешней сети к роутеру и LAN:

add action=drop chain=input comment="Drop all input from !bridge" in-interface=!bridge
add action=drop chain=forward comment="Drop all from WAN to !DSTNAT" connection-nat-state=!dstnat connection-state=new in-interface=WAN

Это база. Остальные правила можно прикручивать под себя. Так, например, можно заблокировать попытки DOS маршрутизатора:

add action=add-src-to-address-list address-list=DDOS address-list-timeout=1h chain=input comment="List DDOS" connection-limit=100,32 connection-state=new in-interface=WAN
add action=drop chain=input comment="Drop DDOS list" src-address-list=DDOS

Существуют сервисы, которые ведут списки IP адресов, замеченных в различных незаконных действиях, такие как, spamhaus.org. Можно подгружать их в роутер и затем блокировать, но нам такой подход не очень нравится:

/system script add name="Spamhaus " source={
/tool fetch url="http://joshaven.com/spamhaus.rsc" mode=http;
:delay 30;	
/ip firewall address-list remove [find where comment="SpamHaus"];
/import file-name=spamhaus.rsc;
}

Списки большие и могут здорово загрузить маршрутизатор, при этом в своей большей массе угрозу вашему конкретному устройству представлять не будут. Кроме этого, они содержат белые IP адреса, а ведь атака может разворачиваться из-под NAT или даже внутренней сети. Поэтому не рекомендуем это в качестве эффективного способа защиты.

Поговорим теперь, каким способом можно силами firewall блокировать проходящий трафик по ключевым словам. Современный интернет работает по протоколу TLS, а значит это поле TLS SNI hostname, однако современные тенденции таковы, что в условиях международной борьбы за приватность частной жизни, этот способ будет становиться всё менее эффективным:

/ip firewall filter add action=drop chain=forward comment=TEST out-interface=WAN protocol=tcp tls-host=habr.com

Для тех сайтов, которые до сих пор работают по HTTP можно в прямом смысле анализировать проходящий трафик на содержание, ну так себе способ:

/ip firewall filter add action=drop chain=forward comment=TEST content=habr disabled=yes out-interface=WAN protocol=tcp

В RouterOS ещё есть такая специфичная штука, как layer7-protocol, которая позволяет искать в первых 10 пакетах ICMP, TCP или UDP соединения (или 2 Кбайт) (потока) нешифрованного трафика совпадения с регулярными выражениями:

/ip firewall filter add action=drop chain=forward comment=TEST disabled=yes layer7-protocol=habr out-interface=WAN protocol=tcp
/ip firewall layer7-protocol add name=habr regexp="*habr"

Ну очень специфическая штука, сильно грузит центральный процессор, но, говорят, может детектировать даже некоторые допотопные малвари: Code Red и Nimda (атаки на Microsoft IIS веб-сервер). В идеале можно с помощью указанных настроек вычленять зловредный трафик и дропать его. Метод не очень, все C2 сервера так не победить.

8. Заключение


На этом рассмотрение безопасности L2 и L3 закончим. Непосредственно возможности RouterOS подходят к концу, поэтому в третьей части статьи поговорим об интеграции с различными opensource решениями и покажем реализацию централизованного логирования.

P/S Часть 1: Мой MikroTik

Источник: https://habr.com/ru/company/ruvds/blog/575966/


Интересные статьи

Интересные статьи

Часть первая тут. Долг в отношениях очень похож на технический долг. Он представляет собой багаж эмоций, накопленных основателями, в процессе принятия решений. Эти решения могут ка...
В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
Идея статьи возникла желании пропускать определенные сайты через VPN-туннель напрямую через маршрутизатор. Так как количество устройств дома велико, а пускать весь трафик...
Это последний пост из серии 4-х постов, посвященной заглядыванию внутрь Chrome, и исследующей, как он обрабатывает наш код для отображения веб-сайта. В предыдущем посте мы рассмотрели *ре...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...