- PVSM.RU - https://www.pvsm.ru -

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

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 [5], который представляет из себя красивое и удобное 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, настало время переходить на новый уровень. Поехали…
Первое, про что поговорим, это про IP spoofing. Если злоумышленник самостоятельно сконфигурирует IP адрес своего сетевого интерфейса, то, во-первых, может получить L3 доступ в сеть, во-вторых, вмешаться в её нормальное функционирование.


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

Для борьбы с этим необходимо выполнить настройки, знакомые из первой части статьи [1]:
/ip dhcp-server set dhcp_home add-arp=yes
/interface bridge set bridge arp=reply-only
Настало время перейти к firewall filter [6]. Покажем базовую настройку, на которую можно смело опираться в своих конфигурациях. Для разгрузки центрального процессора маршрутизатора первым делом добавляем правила:
/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 [7] маршрутизатора:
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 [8]. Можно подгружать их в роутер и затем блокировать, но нам такой подход не очень нравится:
/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 [9] или даже внутренней сети. Поэтому не рекомендуем это в качестве эффективного способа защиты.
Поговорим теперь, каким способом можно силами firewall блокировать проходящий трафик по ключевым словам. Современный интернет работает по протоколу TLS, а значит это поле TLS SNI hostname [10], однако современные тенденции таковы, что в условиях международной борьбы за приватность частной жизни, этот способ будет становиться всё менее эффективным:
/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 [11], которая позволяет искать в первых 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 [12] и Nimda [13] (атаки на Microsoft IIS веб-сервер). В идеале можно с помощью указанных настроек вычленять зловредный трафик и дропать его. Метод не очень, все C2 [14] сервера так не победить.
На этом рассмотрение безопасности L2 и L3 закончим. Непосредственно возможности RouterOS подходят к концу, поэтому в третьей части статьи поговорим об интеграции с различными opensource решениями и покажем реализацию централизованного логирования.
P/S
Часть 1. Настройка оборудования и вопросы безопасности L1 и L2 уровней [1]
Часть 2. Настройка протокола Dot1X и работа Firewall [15]
Автор:
olegtsss
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/367805
Ссылки в тексте:
[1] первой части: https://habr.com/ru/company/ruvds/blog/575808/
[2] Freeradius: https://freeradius.org/
[3] RADIUS : https://ru.wikipedia.org/wiki/RADIUS
[4] простой VPS: https://ruvds.com
[5] Daloradius: http://daloradius.com
[6] firewall filter: https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filter
[7] DOS: https://ru.wikipedia.org/wiki/DoS-%D0%B0%D1%82%D0%B0%D0%BA%D0%B0
[8] spamhaus.org: https://www.spamhaus.org/drop/drop.txt
[9] NAT: https://ru.wikipedia.org/wiki/NAT
[10] TLS SNI hostname: https://ru.wikipedia.org/wiki/Server_Name_Indication
[11] layer7-protocol: https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/L7
[12] Code Red: https://ru.wikipedia.org/wiki/Code_Red
[13] Nimda: https://ru.wikipedia.org/wiki/Nimda
[14] C2: https://encyclopedia.kaspersky.ru/glossary/command-and-control-server-c-c/#:~:text=C%26C%2D%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20%E2%80%94%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%2C%20%D1%81,%D0%BE%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%82%D1%8C%20%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%83%D1%8E%20%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D1%83%20%D0%B8%20%D1%82
[15] Часть 2. Настройка протокола Dot1X и работа Firewall: https://habr.com/ru/company/ruvds/blog/575966/
[16] Источник: https://habr.com/ru/post/575966/?utm_source=habrahabr&utm_medium=rss&utm_campaign=575966
Нажмите здесь для печати.