Как я могу использовать ACME.sh на OpenWRT для продления сертификата Let’s Encrypt, не открывая свой веб-сервер в Интернет?

Вопрос или проблема

У меня есть маршрутизатор OpenWRT с uhttpd, который предоставляет интерфейс для внутренней локальной сети. Но я блокирую порты 80 и 443 на стороне WAN для безопасности. Я хотел бы использовать ACME.sh для обновления своих сертификатов, но не могу использовать метод DNS с моим провайдером DNS, потому что я экономлю: вы можете использовать метод DNS на freedns только если у вас есть домен, а у меня есть только поддомен.

Чтобы использовать метод standalone, очевидно, мне нужно будет открыть порт 80. Но я не хочу, чтобы ни один из этих входящих пакетов попал к uhttpd – я хочу быть совершенно уверенным, что они не могут. Поэтому я подумал, что мог бы перенаправить WAN:80 на LAN:8080 и заставить ACME слушать на 8080. Однако, похоже, нет способа заставить ACME слушать на 8080.

Я попробовал просто отредактировать скрипт ACME, чтобы использовать порт 8080, и тогда все заработало. Но это, очевидно, не полезное решение. Я упускаю что-то более простое?

Таким образом, решение, которое я использую, заключается в том, чтобы просто остановить uhttpd от прослушивания на порту 80. Сначала я полностью остановил его с помощью http, отредактировав /etc/config/uhttpd и удалив две строки, которые говорят

list listen_http '0.0.0.0:80'
list listen_http '[::]:80'

Затем у меня возникла проблема, когда я неправильно сконфигурировал сертификат, поэтому https-соединения перестали работать, и я больше не мог связаться с uhttpd и LUCI. Поэтому я решил просто использовать другой порт – я выбрал 8080 и добавил удаленные строки обратно, но изменил их на:

list listen_http '0.0.0.0:8080'
list listen_http '[::]:8080'

Так или иначе, это работает с установкой стандартного luci-app-acme. Скрипт ACME может перенаправить порт 80, когда в этом есть необходимость, так как ничего другого не слушает на этом порту. Браузеры в локальной сети больше не могут использовать порт 80 для доступа к uhhtpd, но вы все равно можете использовать http://<router-address>:8080 и, как только ваш сертификат будет работать, https://<router-dns>.

Я думаю, что возможно удалить luci-app-acme и использовать ручную настройку ACME вместо этого, и конфигурация, предложенная в вопросе. Скрипт ACME действительно, согласно документации, принимает параметр httpport, который можно установить на 8080. Однако, похоже, нет возможности использовать это через интерфейс LUCI.

Ответ или решение

Как использовать ACME.sh на OpenWRT для обновления сертификата Let’s Encrypt без открытия веб-сервера в интернет

Введение

Обновление сертификатов Let’s Encrypt на маршрутизаторе OpenWRT, где порты 80 и 443 заблокированы на стороне WAN, создает определенные сложности. Работа с ACME.sh требует тщательного подхода, чтобы гарантировать безопасность вашего веб-сервера, который использует uhttpd для предоставления пользовательского интерфейса в локальной сети (LAN). В этой статье мы рассмотрим, как эффективно настроить ACME.sh для обновления сертификатов, не открывая веб-сервер для внешнего доступа.

Проблема

Согласно описанию, вы используете только подсистему вашего домена, и не хотите открывать порты для инъекций из интернета, используя стандартные методы верификации с помощью открытого порта 80. Метод через DNS не подходит из-за ограничений вашего провайдера. Существующий подход с редиректом трафика с порта 80 на порт 8080, где работает ACME.sh, требует ручной модификации скриптов и может привести к нежелательным последствиям, тем более, если вы ошибётесь в конфигурации.

Решение

Ваше текущее решение, при котором вы останавливаете uhttpd на прослушивании порта 80 и вместо этого используете порт 8080, действительно является достойным и безопасным подходом. Таким образом, вы избегаете потенциальных уязвимостей, не открывая сам uhttpd для внешнего доступа, и получаете доступ к управлению маршрутизатором по внутреннему адресу.

Шаги реализации:

  1. Отключите uhttpd на порту 80:
    Чтобы временно отключить uhttpd на порту 80, отредактируйте конфигурационный файл:

    /etc/config/uhttpd

    Удалите или закомментируйте следующие строки:

    list listen_http '0.0.0.0:80'
    list listen_http '[::]:80'
  2. Переход на порт 8080:
    Теперь добавьте строки для прослушивания в конфигурацию uhttpd, изменив порт на 8080:

    list listen_http '0.0.0.0:8080'
    list listen_http '[::]:8080'
  3. Настройка ACME.sh:
    Убедитесь, что использование ACME.sh корректно. Убедитесь, что отключили все другие службы, которые могут конфликтовать, и убедитесь, что luci-app-acme может корректно расширить доступ к порту 80, который ACME.sh использует для проверки.

  4. Проверка доступа:
    Теперь вы сможете получить доступ к интерфейсу маршрутизатора, используя http://<адрес маршрутизатора>:8080 и после успешного обновления сертификата – https://<dns-имя вашего маршрутизатора>.

  5. Автоматизация обновления:
    Вам необходимо будет настроить периодическую задачу (cron job) для автоматического обновления сертификатов, чтобы гарантировать, что ваш сертификат будет всегда актуален. Например, команда для добавления в cron:

    0 1 * * * "/path/to/acme.sh" --renew -d yourdomain.com --httpport 80

Заключение

Избегая открытых портов для внешнего трафика и используя ACME.sh на порту 8080, вы обеспечиваете безопасность вашего маршрутизатора на OpenWRT. Данный подход помогает не только в обновлении сертификатов Let’s Encrypt, но и в общем повышении безопасности вашего сетевого оборудования. Настройка не требует больших изменений в существующей архитектуре и легко поддается управлению. Надеюсь, эта информация была полезной и поможет вам в будущем обеспечивать безопасность вашей локальной сети.

Оцените материал
Добавить комментарий

Капча загружается...