FaceHost - Статьи

Как обезопасить Apache с Let’s Encrypt на Ubuntu 22.04

2024-02-02 17:48 Виртуальные сервера VPS/VDS База знаний
Let’s Encrypt – бесплатный сервис выдачи SSL (Secure Sockets Layer) и TLS (Transport Layer Security) сертификатов, которые обеспечивают шифрование данных между сервером и браузером пользователя. Эти сертификаты гарантируют защищённое соединение, обеспечивая конфиденциальность передаваемой информации и защиту от перехвата данных.
Что делает Let’s Encrypt особенно удобным и популярным, так это то, что сертификаты выдаются бесплатно. Это позволяет даже малым веб-сайтам и проектам обеспечивать безопасное соединение без дополнительных затрат. Кроме того, Let’s Encrypt предлагает автоматическое обновление сертификатов, что упрощает поддержку безопасности веб-сервера, минимизируя риски уязвимостей из-за устаревших сертификатов.
В настоящей статье рассмотрим процесс установки сертификата Let’s Encrypt на VDS, работающий под управлением Ubuntu 22.04, на котором функционирует веб-сервер Apache.

Предварительная настройка

В нашем примере мы используем виртуальный сервер под управлением Ubuntu 22.04, на котором проведены подготовительные работы в части добавления учётной записи с полномочиями администратора и настройки брандмауэра UFW. Обратите внимание, что все действия в данном мануале производятся с использованием административной учётной записи, не обладающей привилегиями суперпользователя. Для повышения привилегий нашего пользователя до уровня root при выполнении команд, требующих повышенных прав доступа, мы применяем утилиту sudo. Это делается для предотвращения случайных ошибок или злонамеренных атак.
Также на нашем тестовом VPS установлен и настроен веб-сервер Apache, под управлением которого функционирует виртуальный хост с доменным именем your-domain.host. Доступ к тестовой странице осуществляется с использованием протокола HTTP, то есть через порт 80.
Кроме того, при помощи команды apachectl -M необходимо проверить наличие установленных модулей Apache. Для того, чтобы убедиться, что на сервере установлен модуль SSL, запустите следующую команду:
$ apachectl -M | grep ssl
Отсутствие какого-либо вывода говорит о том, что модуль SSL в системе не установлен. При этом в нашем примере выполнение команды указывает на ошибку следующего вида:
Данное сообщение говорит о том, что Apache не может найти валидную директиву ServerName в файле конфигурации, поэтому будет использовать первый обнаруженный IP-адрес. Именно он и указан в сообщении об ошибке.

Для устранения данной ошибки необходимо добавить ServerName в конфигурацию Apache. Для этого в конец файла /etc/apache2/apache2.conf добавьте строку ServerName 127.0.0.1.
$ cd /etc/apache2
$ sudo nano apache2.conf
После чего закройте конфигурационный файл с сохранением внесённых изменений. Затем проверьте наличие ошибок в обновлённой конфигурации Apache при помощи команды:
$ sudo apachectl configtest
Для применения внесённых изменений перезапустите веб-сервер:
$ sudo systemctl restart apache2
После чего повторно проверьте отсутствие сообщения об ошибке и установленного модуля SSL с помощью команды:
$ apachectl -M | grep ssl

Установка клиентской утилиты и сертификата Let’s Encrypt

Для автоматизации процесса получения и обновления SSL/TLS сертификатов от удостоверяющего центра Let’s Encrypt используется утилита Certbot. Утилита обеспечивает автоматизацию многих этапов установки и обновления сертификатов, устраняя тем самым необходимость вручную выполнять эти операции.
Установка Certbot производится командой:
$ sudo apt install certbot python3-certbot-apache
После завершения инсталляции вы можете запустить процесс получения и установки сертификата Let’s Encrypt для вашего домена. Делается это при помощи следующей команды, в которой замените your-domain.host на имя вашего домена:
$ sudo certbot --apache -d your-domain.host
В процессе выполнения Certbot предложит согласиться с условиями предоставления услуг и попросит предоставить адрес электронной почты для уведомлений о продлении сертификата.
В качестве альтернативы вы можете использовать ту же команду, но без каких-либо опций:
$ sudo certbot –-apache
Такая форма команды может использоваться для получения или продления SSL-сертификатов в отношении всех доменов, работающих на вашем веб-сервере. Либо у вас будет возможность выбрать только определённые домены из списка, для которых необходимо получить или продлить сертификат.

Сертификаты Let’s Encrypt действительны в течение 90 дней. Исходя из этого, есть смысл настроить автоматическое обновление сертификата, чтобы обеспечить непрерывное шифрование. К счастью, Certbot упрощает и этот процесс. Чтобы настроить задание для обновления, запустите следующую команду:
$ sudo certbot renew --dry-run

Проверка подключения по HTTPS

Теперь ваша страница должна быть доступна при подключении с использованием протокола HTTPS. Но сначала необходимо добавить правило для HTTPS в настройки брандмауэра, если ранее вы запускали UFW для защиты вашего виртуального сервера.
Сначала проверьте, для каких протоколов в брандмауэре созданы разрешающие правила:
$ sudo ufw status
В нашем примере UFW содержит разрешающее правило для веб-сервера Apache, но предназначено оно лишь для организации доступа к сайту по протоколу HTTP. Данное правило было добавлено в брандмауэр при установке и настройке Apache. Полный список правил, доступных для включения в UFW можно увидеть, набрав команду:
$ sudo ufw app list
Из вывода команды видно, что для разрешения доступа к сайту по протоколу HTTPS, необходимо добавить в брандмауэр либо специальное правило Apache Secure, либо правило, распространяющееся и на 80-й, и на 443-й порты – Apache Full. Для включения правила, разрешающего подключение по HTTPS, запустите команду:
$ sudo ufw allow 'Apache Secure'
Теперь, чтобы увидеть список разрешённых подключений, наберите:
$ sudo ufw status
В списке появилось правило для протокола HTTPS – Apache Secure. Это означает, что теперь для доступа к нашей странице нужно ввести в браузере строку https://your-domain.host. В вашем случае замените your-domain.host на имя вашего сайта.