Вопрос или проблема
У меня есть сервер Ubuntu с Wildcard DNS, который обрабатывает любые доменные имена, указывающие на сервер NS1 и NS2. Доменное имя отображает стандартную страницу Apache var/www/html.
Мне нужен Bash-скрипт, который проверяет любое доменное имя, указывающее на IP-адрес сервера, и автоматически генерирует бесплатный SSL LetsEncrypt.
Ответ или решение
Создание скрипта на Bash для автоматической проверки доменов, указывающих на ваш сервер, и генерации бесплатного SSL-сертификата от Let’s Encrypt — задача вполне выполнимая и полезная, особенно для серверов с использованием wildcard DNS. Домены, которые указывают на ваш сервер, могут быть обработаны для генерации сертификатов, что поможет обеспечить безопасность ваших веб-приложений.
Основные шаги для реализации скрипта
- Проверка доменов: Используйте
dig
илиnslookup
, чтобы проверить, какие домены указывают на ваш сервер. - Генерация SSL-сертификатов: Используйте
certbot
от Let’s Encrypt для генерации и установки сертификатов. - Настройка веб-сервера: Убедитесь, что ваш веб-сервер (например, Apache или Nginx) настроен корректно для работы с новыми сертификатами.
Пример Bash-скрипта
Вот пример Bash-скрипта, который осуществляет описанные шаги. Поскольку задача требует определенных прав (например, прав на создание сертификатов), убедитесь, что вы запускаете скрипт с правами суперпользователя (root).
#!/bin/bash
# Параметры
DOMAINS_FILE="/path/to/domains.txt" # Файл с доменами
WEBROOT="/var/www/html" # Корневая папка вашего веб-сервера
EMAIL="youremail@example.com" # Замените на свой email для уведомлений
# Проверка наличия необходимых инструментов
if ! command -v certbot &> /dev/null; then
echo "certbot не установлен. Установите его, прежде чем продолжить."
exit 1
fi
# Проверка и генерация сертификатов
while read -r domain; do
echo "Проверка домена: $domain"
# Проверка соответствия IP-адреса домена
if [[ "$(dig +short $domain)" == "$(curl -s ifconfig.me)" ]]; then
echo "Домен $domain указывает на этот сервер. Генерация SSL-сертификата..."
# Генерация сертификата
certbot certonly --webroot -w "$WEBROOT" -d "$domain" --email "$EMAIL" --agree-tos --non-interactive
if [[ $? -eq 0 ]]; then
echo "Сертификат для $domain успешно создан."
else
echo "Ошибка при создании сертификата для $domain."
fi
else
echo "Домен $domain не указывает на этот сервер."
fi
done < "$DOMAINS_FILE"
echo "Проверка завершена."
Настройка среды
- Создание файла
domains.txt
: Поместите все домены, которые вы хотите проверить, в файлdomains.txt
, по одному на строку. - Установка
certbot
: Еслиcertbot
не установлен, его легко установить с помощью пакетного менеджера, например, для Ubuntu:sudo apt update sudo apt install certbot
- Причина использования
--webroot
: Этот метод позволяет легко и быстро проверять владение доменом через HTTP.
Заключение
Использование такого скрипта не только облегчает работу с SSL-сертификатами, но и повышает безопасность ваших веб-сайтов. Следующее, что вам нужно будет сделать, — это настроить автоматическое обновление сертификатов, чтобы они всегда оставались актуальными. Для этого вы можете использовать cron для регулярного выполнения вашего скрипта или встроенные функции certbot
по автоматическому обновлению сертификатов.
Обратите внимание, что скрипт требует доработки в зависимости от ваших специфических требований и конфигурации сервера.