Вопрос или проблема
У меня есть маршрутизатор 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
для внешнего доступа, и получаете доступ к управлению маршрутизатором по внутреннему адресу.
Шаги реализации:
-
Отключите
uhttpd
на порту 80:
Чтобы временно отключитьuhttpd
на порту 80, отредактируйте конфигурационный файл:/etc/config/uhttpd
Удалите или закомментируйте следующие строки:
list listen_http '0.0.0.0:80' list listen_http '[::]:80'
-
Переход на порт 8080:
Теперь добавьте строки для прослушивания в конфигурациюuhttpd
, изменив порт на 8080:list listen_http '0.0.0.0:8080' list listen_http '[::]:8080'
-
Настройка ACME.sh:
Убедитесь, что использование ACME.sh корректно. Убедитесь, что отключили все другие службы, которые могут конфликтовать, и убедитесь, чтоluci-app-acme
может корректно расширить доступ к порту 80, который ACME.sh использует для проверки. -
Проверка доступа:
Теперь вы сможете получить доступ к интерфейсу маршрутизатора, используяhttp://<адрес маршрутизатора>:8080
и после успешного обновления сертификата –https://<dns-имя вашего маршрутизатора>
. -
Автоматизация обновления:
Вам необходимо будет настроить периодическую задачу (cron job) для автоматического обновления сертификатов, чтобы гарантировать, что ваш сертификат будет всегда актуален. Например, команда для добавления в cron:0 1 * * * "/path/to/acme.sh" --renew -d yourdomain.com --httpport 80
Заключение
Избегая открытых портов для внешнего трафика и используя ACME.sh на порту 8080, вы обеспечиваете безопасность вашего маршрутизатора на OpenWRT. Данный подход помогает не только в обновлении сертификатов Let’s Encrypt, но и в общем повышении безопасности вашего сетевого оборудования. Настройка не требует больших изменений в существующей архитектуре и легко поддается управлению. Надеюсь, эта информация была полезной и поможет вам в будущем обеспечивать безопасность вашей локальной сети.