Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Доступ к Mikrotik webfig по https

1

Доступ к Mikrotik webfig по https

Mikrotik

Пришла идея извне настроить ssl доступ к роутеру mikrotik, так чтобы был домен и валидный сертификат. Это делается очень просто. Для решения задачи нам необходимы:

  1. статический внешний IP адрес роутера
  2. зарегистрированное доменное имя
  3. доступ к DNS на хостинге
  4. доступ к серверу с сайтом

Декомпозиция задачи выглядит следующим образом:

  1. Настройка DNS (mikrotik.mydomain.ru)
  2. Генерирование сертификата letsencrypt
  3. Настройка proxy на роутере на хостинг для подтвержения сертификата
  4. Установка сертификата на роутер

Настройка DNS

Добавляем А запись mikrotik к вашему домену mydomain.ru с вашим статическим адресом. Не закрываем сервис, возможно придется далее еще вернуться к нему.

Устанаваливаем Certbot

Устанавливаем на рабочую машину, на которой будем генерировать сертификат.

# sudo apt-get install software-properties-common -y
# add-apt-repository ppa:certbot/certbot
# sudo apt-get update
# sudo apt-get install certbot -y

Пробуем сгенерировать сертификат (где mikrotik.mydomain.ru - ваш домен):

# sudo certbot certonly --preferred-challenges=dns --manual -d mikrotik.mydomain.ru --manual-public-ip-logging-ok

где строка preferred-challenges говорит, что проверка домена будет проходить через запись в dns. далее пишется предложение:

[flickr:id=32020684988]

Please deploy a DNS TXT record under the name
_acme-challenge.mikrotik.mydomain.ru with the following value:

aeMwRJe37wluDcnzWE-wE23QkJtex39yZI8AH172xbc

К сожалению, у меня DNS на хостинге обновляется раз в сутки. Для тех у кого, нет таких проблем добавляем еще одну TXT запись в DNS acme-challenge.mikrotik.mydomain.ru c соответствующим значением. Для остальных предлагаю решение, получаем сертификат следующим образом:

sudo certbot certonly --manual -d mikrotik.mydomain.ru --manual-public-ip-logging-ok

Через дефолтный http челендж, и вывод будет такой:

http-01 challenge for mikrotik.mydomain.ru

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

hBPnwYLqUtUzGXoWrQtG7RVH53pDvLFa2uhly9VfOa8.Xlgp_qCFV-GK1dhg7B_1SP-wxoLQjKSp88PGDBzaxZg

And make it available on your web server at this URL:

http://mikrotik.mydomain.ru/.well-known/acme-challenge/hBPnwYLqUtUzGXoWrQtG7RVH53pDvLFa2uhly9VfOa8

[flickr:id=32020687108]

Необходимо создать файл http://mikrotik.mydomain.ru/.well-known/acme-challenge/hBPnwYLqUtUzGXoWrQtG7RVH53pDvLFa2uhly9VfOa8, который будет возвращать строку hBPnwYLqUtUzGXoWrQtG7RVH53pDvLFa2uhly9VfOa8.Xlgp_qCFV-GK1dhg7B_1SP-wxoLQjKSp88PGDBzaxZg по http.

Настройка proxy на роутере на хостинг для подтвержения сертификата

Естественно наш роутер не может вернуть строки. Суть решения: certbot ---> certbot server ---> mikrotik router (mikrotik.mydomain.ru, proxy) ---> другой сервер который подтвердит владение доменом.

Настраиваем через webfig прокси на mikrotik через nat:

  1. Необходимо перенести web службу на другой порт 8080

IP => Service => web port 8080

IP => Service => ssh port 2280

IP => Service => web-ssl port 2325

Остальные службы лучше поотключать вовсе.

[flickr:id=32020685438]

  1. Настроить NAT на 80 порту с переадресацией на другой сервер IP => Firewall => NAT => Add new
Chain: dstnat
Protocol: 6(tcp)
Dst.Port: 80
Action: dst-nat
To Addresses: 192.168.0.2
To Ports: 80

[flickr:id=32020686038]

[flickr:id=32020685758]

  1. Настроить filter который разрешает трафик на другой сервер В маршрутизаторах mikrotik NAT находится перед фильтром, поэтому необходимости прописывать разрешение для NAT нет. Разрешение необходимо прописать на порт 8080 чтобы он был доступен снаружи и для forward established трафика.

IP => Firewall => Filter Rules => Add new

Chain: input
Protocol: 6(tcp)
Dst.Port: 8080

По умолчанию задан Action: accept.

Теперь пропишем страницу которая будет отдавать ключевое поле. На моем сервере установлен lighttpd:

Создадим конфигурацию:

# nano /etc/lighttpd/conf-enabled/router.conf
$HTTP["host"] =~ "^mikrotik\.mydomain\.ru" {
    server.document-root = "/tmp/"
    accesslog.filename = "/tmp/access.log"
    url.rewrite-once = (
        "^/(.*)" => "/acme.txt",
    )
}

Любой запрос на сервер по имени хоста mikrotik.mydomain.ru будет возвращать строку с кодом.

Создадим необходимый файл, перезагрузим сервер:

echo 'aeMwRJe37wluDcnzWE-wE23QkJtex39yZI8AH172xbc' >> /tmp/acme.txt
touch /tmp/access.log
sudo lighttpd service restart

Устанавливаем сертификаты на mirotik

Запускаем certbot снова, файлы сертификатов успешно созданы:

/etc/letsencrypt/live/mikrotik.mydomain.ru/fullchain.pem
/etc/letsencrypt/live/mikrotik.mydomain.ru/privkey.pem

Копируем их на маршрутизатор, сервис мы перенесли на порт 2280 для безопасности:

sudo cd /etc/letsencrypt/live/mikrotik.mydomain.ru/
scp -p 2280 fullchain.pem admin@mikrotik.mydomain.ru:/
scp -p 2280 privkey.pem admin@mikrotik.mydomain.ru:/

Подключаемся к маршрутизатору по ssh:

ssh admin@mikrotik.mydomain.ru -p 2280

Импортируем сертификаты

/certificate import file-name=fullchain.pem passphrase=""

     certificates-imported: 2
     private-keys-imported: 0
            files-imported: 1
       decryption-failures: 0
  keys-with-no-certificate: 0

/certificate import file-name=privkey.pem passphrase=""

     certificates-imported: 0
     private-keys-imported: 1
            files-imported: 1
       decryption-failures: 0
  keys-with-no-certificate: 0

Для безопасности удалим файлы сертификатов из маршрутизатора:

/file remove fullchain.pem
/file remove privkey.pem

Выведем информацию о сертификатах:

/certificate print

Flags: K - private-key, D - dsa, L - crl, C - smart-card-key, A - authority, 
I - issued, R - revoked, E - expired, T - trusted 
 #          NAME    CO.. SUBJECT-ALT-NAME                                  FI..
 0 K      T full... mi.. DNS:mikrotik.mydomain.ru                             1d..
 1   L    T full... Le..                                                   25..

При установке сертификатов на службу при нажатии на tab, можно увидеть 2 сертификата fullchain.pem_0 сертификат and fullchain.pem_1 Let’s Encrypt CA. Для использования сертификатов нужно ввести следующие команды:

/ip service set www-ssl certificate=fullchain.pem_0
/ip service set api-ssl certificate=fullchain.pem_0

Можно также переименовать сертификаты:

/certificate set 0 name="mikrotik.mydomain.ru"
/certificate set 1 name="Let's Encrypt Authority X3"

Все готово. Проверьте, что https://mikrotik.mydomain.ru:2325 работает, выключите службу web. И желательно выключите учетную запись admin на маршрутизаторе, предварительно добавив другую.

Дополнительный материал: https://blog.effenberger.org/2018/04/22/creating-ssl-certificates-on-routeros-with-lets-encrypt/



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

15.11.2018

Обновление

05.05.2022

Категории

mikrotik

Тэги

  • lighttpd 7
  • mikrotik 2
  • ssl 1

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor