MikroTik: Сертификат Let's Encrypt

Алгоритм получения сертификата Let’s Encrypt и последующего его продления при помощи скрипта.

Получение сертификата

  • Создать правило в брандмауэре, которое будет разрешать обращение к порту 80 IP-адресов из списка acme:
1
/ip firewall filter add action=accept chain=input dst-port=80 protocol=tcp src-address-list=acme comment="[ROS] ACME"
  • Включить сервис www:
1
/ip service enable www
  • Добавить адрес 0.0.0.0/0 в адрес-лист acme на время 00:01:10:
1
/ip firewall address-list add list=acme address=0.0.0.0/0 timeout=00:01:10 comment="[ROS] ACME running..."
  • Запустить получение сертификата для домена example.org:
1
/certificate enable-ssl-certificate dns-name=example.org
  • Отключить сервис www:
1
/ip service disable www

Скрипт

ros.acme.rsc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -------------------------------------------------------------------------------------------------------------------- #
# ACME
# -------------------------------------------------------------------------------------------------------------------- #
# @package    RouterOS
# @author     Kai Kimera <mail@kaikim.ru>
# @license    MIT
# @version    0.1.0
# @policy     read, write, test
# @schedule:  4w 01:30:00
# @link       https://netcfg.ru/ru/2024/11/f892bebc-3ecd-518a-a948-27eed31649da/
# -------------------------------------------------------------------------------------------------------------------- #

:local domain "example.org"

# -------------------------------------------------------------------------------------------------------------------- #
# -----------------------------------------------------< SCRIPT >----------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #

:do {
  /ip firewall address-list add list=acme address=0.0.0.0/0 timeout=00:01:10 comment="[ROS] ACME running..."
  /ip service enable www
  /certificate enable-ssl-certificate dns-name=$domain; :delay 60s
  /ip service disable www
  :log info "ACME: SSL certificate ($domain) updated!"
} on-error={ :log error "ACME: Failed to update SSL certificate ($domain)!" }