В этой статье хочу затронуть настройку маршрутизатора Mikrotik, выполняющего роль клиента OpenVPN и ограничивающего доступ к соц.сетям в маленьком офисе. Итак, имеется:
- маршрутизатор Mikrotik hAP lite
- пара офисных компьютеров
- удалённый OpenVPN сервер, за которым находятся виртуальные машины. Доступ к этим машинам должны иметь сотрудники малого офиса.
Вот схема расположения и подключения всего этого:
Настройку OpenVPN сервера, к которому будет подключаться Mikrotik, я рассматривал в прошлой своей статье:
https://typical-admin.ru/item/89-openvpn-freebsd
Однако, чтобы Mikrotik смог к нему подключиться, придётся немного изменить конфигурацию самого OpenVPN на этом сервере. Но обо всём по порядку.
Сначала пробую включить Mikrotik и сделать базовую настройку. Делается это очень просто. Включаю устройство и захожу в его вэб-админку по адресу:
http://192.168.88.1/
Пароль вводить не потребуется. Вижу вот такую картинку:
Собственно, тут всё понятно должно быть. Слева настройки Wi-Fi, справа настройки WAN и LAN. Настройки LAN я оставил по умолчанию, лишь изменив пул выдаваемых адресов. И весь стенд у меня тестовый, поэтому WAN настроен на внутреннюю сеть, эмулирующую интернет в моём случае. Само собой, что в боевых условиях туда надо прописывать сетевые реквизиты провайдера. Задать пароль администратора тоже не забываю:
Сохраняю эти настройки, обновляю страницу, чтобы уже войти в систему под паролем и жму кнопку WebFig, чтобы перейти в интерфейс со всеми настройками. Сначала решу задачу по ограничению юзерам соц.сетей. Метод основывается на анализе содержимого пакетов с помощью Layer7 Protocol. Захожу в меню IP → Firewall и там перехожу во вкладу Layer7 Protocols:
Там жму кнопку Add New и заполняю поля Name и Regexp:
В поле Regexp вот такая конструкция:
^.*(vk.com|ok.ru|facebook.com|twitter.com|instagram.com|badoo.com|tinder.com|loveplanet.ru|mamba.ru).*$
Теперь нужно промаркировать все соединения и пакеты в dns запросах, где будет совпадение с созданным регулярным выражением. Иду во вкладку Mangle и жму Add New:
Там заполняю следующие поля:
Chain: prerouting
Protocol: udp
Dst. Port: 53
Connection Mark: no-mark
Layer7 Protocol: soc-nets
Action: mark connection
New Connection Mark: soc-nets-con (можно обозвать по своему усмотрению)
Сохраняю это правило и тут же создаю ещё одно для маркировки пакетов на основе промаркированного выше соединения:
Chain: prerouting
Connection Mark: soc-nets-con (из предыдущего правила)
Action: mark packet: soc-nets-pack (можно обозвать по своему усмотрению)
В списке отобразились два новых правила:
Теперь создаю 2 блокирующих правила для цепочек input и forward. Для этого иду во вкладку Filter Rules и жму Add New:
Сначала создаю первое правило:
Chain: forward
Packet Mark: soc-nets-pack
Action: drop
Comment: social nets drop (это поле находится в самом низу и заполнять его можно на своё усмотрение)
И потом второе:
Chain: input
Packet Mark: soc-nets-pack
Action: drop
Comment: social nets drop
Скриншоты создания самих правил пропущу, там интерфейс точно такой же. Правила эти появятся в самом низу списка:
Их надо зацепить мышью и перетащить в нужные места — выше разрешающих правил:
Теперь, при попытке открыть сайт социальной сети, занесённый в список регулярного выражения, будет выдаваться ошибка:
Но у меня получилось обойти это ограничение. Я прописал на своём компе публичный DNS-сервер 8.8.8.8, вместо 192.168.88.1, коим является сам Mikrotik. Поэтому надо прикрыть и эту лавочку. По-прежнему находясь во вкладке Filter Rules создаю ещё одно правило:
Chain: forward
Protocol: udp
Dst. Port: 53
Action: drop
Comment: public dns connect drop (это поле находится в самом низу и заполнять его можно на своё усмотрение)
И снова это правило появилось в самом низу списка. Мышью перетаскиваю его в нужное место:
Вот теперь лавочка прикрыта. Правда особо изворотливые юзеры могут пользоваться анонимайзерами, но это палка о двух концах, т.к. там могут и аккаунт увести, и пароли, и данные банковской карты. Также остаётся вариант с tor-браузером, на него ограничения выше тоже не действуют. А ещё, для его установки не требуется админских прав на компе. Я с этим явлением боролся с помощью антивирусника — создавал правило, натравливающее антивирусник на исполняемый файл tor-браузера.
Вообще, что касается фаервола на Микротике, то это самый обычный Iptables. Настройка правил фаервола на Микротике мне очень напоминает настройку правил Iptables через вэб-интерфейс Webmin. В своё время, чтобы понять, где и в каких цепочках и таблицах писать те или иные правила, я внимательно рассматривал эту картинку:
она очень наглядно показывает, в какую таблицу надо вписывать правила. Сейчас есть ещё вот такая картинка:
она тоже помогает понять принцип движения трафика по Iptables. Рекомендую вдумчиво рассмотреть обе картинки.
Теперь надо настроить OpenVPN клиента на Микротике. Но перед этим надо немного подшаманить OpenVPN сервер. Напомню, что он уже имеется настроенный вот по этой статье:
https://typical-admin.ru/item/89-openvpn-freebsd
Сейчас пошагово укажу, какие изменения надо сделать. Сперва останавливаю демона OpenVPN:
service openvpn stop
Потом удаляю всё содержимое каталога /usr/local/etc/openvpn. И начинаю процесс конфигурирования заново. Сначала просто, через Webmin, захожу в меню Servers → OpenVPN + CA, но пока там ничего не делаю. Вижу, что в каталоге /usr/local/etc/openvpn появился файл openvpn-ssl.cnf. Нахожу в нём строчку:
default_md = md5 # use public key default MD
И меняю её на:
default_md = sha1 # use public key default MD
Почему sha1, а не sha256, как в прошлой статье? Потому что Микротик хэш-функцию sha256 не поддерживает. Ему можно либо устаревшую md5, либо sha1. Сертификаты, сгенерированные с помощью хэш-функции sha256, Микротик поймёт.
Далее надо сгенерировать сертификаты. Тут всё делается также, как в предыдущей статье про настройку OpenVPN сервера. Мелкое отличие лишь в том, что клиентский сертификат я сделаю лишь один — для Микротика.
Потом дохожу до этапа, где надо создать конфиг OpenVPN сервера. Он будет немного отличаться от того, чтобы был в прошлой статье. Отличия выделю зелёным:
port 1194
# Микротик умеет работать только по tcp протоколу
proto tcp4
dev tap0
ca keys/office1/ca.crt
cert keys/office1/forserv.crt
key keys/office1/forserv.key
dh keys/office1/dh2048.pem
server-bridge 10.0.0.1 255.255.255.0 10.0.0.10 10.0.0.20
crl-verify keys/office1/crl.pem
ifconfig-pool-persist servers/golovnoy/logs/ipp.txt
# Микротик понимает только AES-128-CBC или AES-256-CBC метод шифрования, поэтому две строчки ниже.
data-ciphers AES-256-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC
user nobody
group nobody
status servers/golovnoy/logs/openvpn-status.log
log-append servers/golovnoy/logs/openvpn.log
verb 2
mute 20
max-clients 100
keepalive 10 120
client-config-dir /usr/local/etc/openvpn/servers/golovnoy/ccd
client-to-client
persist-key
persist-tun
ccd-exclusive
script-security 2
up servers/golovnoy/bin/tapup.sh
# адрес 10.0.0.10 — это тот, который присвоится микротику.
route 192.168.88.0 255.255.255.0 10.0.0.10
Затем создаю клиента для Микротика и экспортирую его zip-архив с файлами сертификатов и конфигов. Из них мне нужны лишь два, это: mikrot.crt и mikrot.key. Названия у них такие, потому что я клиента обозвал «mikrot».
И да, ещё не забываю чуток подправить правила фаервола на FreeBSD сервере. В файле /etc/ipfw.rules нахожу строчки:
add 00051 skipto 00065 udp from any to me 1194 via sk0
……………………………………
add 00161 allow udp from any to me 1194 via sk0
И меняю там udp на tcp. Они станут такими:
add 00051 skipto 00065 tcp from any to me 1194 via sk0
……………………………………
add 00161 allow tcp from any to me 1194 via sk0
Ну либо можно правила для udp не убирать, а просто рядом дописать аналогичные правила для tcp. Не забываю после этого перезапустить Ipwf:
service ipfw restart
Теперь перехожу снова к Микротику. Перехожу в меню Files, мне надо загрузить на Микротик полученные ранее файлы mikrot.crt и mikrot.key. Жму Выбрать файл:
После загрузки файлов иду в меню System → Certificates и жму Import:
Импортирую сначала mikrot.crt, потом mikrot.key:
В итоге, после импортирования обоих файлов, в списке сертификатов должно появиться это:
И обязательно должны быть буквы «КТ».
Далее двигаюсь в меню PPP и на первой же вкладке жму кнопку Add New, выбираю OVPN Client:
Заполняю поля:
Напомню, что у меня весь стенд тестовый, поэтому адрес ВПН-сервера 192.168.0.250. В боевых условиях это будет белый статический адрес в глобальной сети. В поле «user» можно любое имя написать. Ну остальное должно быть понятно, исходя из вышеописанных переделок OpenVPN сервера под Микротик.
Если нигде никаких ошибок не допущено, то ВПН-соединение сразу поднимется:
Сразу зайду-ка, например, в Addresses и посмотрю, какой IP-адрес присвоился Микротику в ВПН-тоннеле:
Вижу, что присвоился 10.0.0.10. Важно, чтобы он совпадал с тем, который заранее был прописан в конфиге OpenVPN сервера:
………………
# адрес 10.0.0.10 — это тот, который присвоится микротику.
route 192.168.88.0 255.255.255.0 10.0.0.10
Если не совпадает, то надо поправить на правильный IP и перезапустить OpenVPN сервер. А потом ещё и убедиться, что правильный маршрут на FreeBSD в таблице есть, ввожу команду:
netstat -rn
Должен быть маршрут:
192.168.88.0/24 10.0.0.10 UGS bridge0
Где 192.168.88.0/24 — это локальная сеть за Микротиком, а 10.0.0.10 — это адрес Микротика в ВПН тоннеле. Если таки маршрут прописался с неверным адресом, то можно его удалить командой:
route delete 192.168.88.0/24
И добавить правильный:
route add -net 192.168.88.0/24 10.0.0.10
На этом всё. Осталось только проверить, что компьютеры из сетей 192.168.88.0/24 и 10.0.0.0/24 друг друга видят. Если всё без ошибок, то видеть будут. Тогда можно завершать статью.
Донаты принимаются на кошельки:
Yoomoney:
4100118091867315
Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077
Карта Альфа-Банк:
2200 1539 1357 2013