One place for hosting & domains

      Как повысить безопасность Apache с помощью Let’s Encrypt в Ubuntu 18.04


      Введение

      Let’s Encrypt представляет собой центр сертификации (Certificate Authority, CA), позволяющий получать и устанавливать бесплатные сертификаты TLS/SSL, тем самым позволяя использовать шифрованный HTTPS на веб-серверах. Процесс получения сертификатов упрощается за счёт наличия клиента Certbot, который пытается автоматизировать большую часть (если не все) необходимых операций. В настоящее время весь процесс получения и установки сертификатов полностью автоматизирован и для Apache и для Nginx.

      В этом руководстве мы используем Certbot для получения бесплатного SSL сертификата для Apache на Ubuntu 18.04, а также настроим автоматическое продление этого сертификата.

      В этом руководстве мы будем использовать файл отдельного виртуального хоста Apache вместо дефолтного файла конфигурации. Мы рекомендуем создавать новый файлы виртуальных хостов Apache для каждого доменного имени, потому что это помогает избегать распространённых ошибок и использовать дефолтные файлы в качестве примера корректной конфигурации, когда что-нибудь пойдёт не так.

      Перед установкой

      Перед тем, как начать следовать описанным в этой статье шагам, убедитесь, что у вас есть:

      • Сервер с Ubuntu 18.04, настроенный согласно руководству по первичной настройке сервера с Ubuntu 18.04, включая настройку не-рутового (non-root) пользователя с привилегиями sudo и настройку файрвола.
      • Зарегистрированное доменное имя. В этом руководстве мы будем использовать example.com. Вы можете приобрести доменное имя на Namecheap, получить бесплатное доменное имя на Freenom или использовать любой другой регистратор доменных имён.
      • Для вашего сервера настроены обе записи DNS, указанные ниже. Для их настройки вы можете использовать наше введение в работу с DNS в DigitalOcean.
        • Запись A для example.com, указывающая на публичный IP адрес вашего сервера.
        • Запись A для www.example.com, указывающая на публичный IP адрес вашего сервера.
      • Apache, установленный согласно инструкциям из руководства Как установить Apache в Ubuntu 18.04. Убедитесь, что у вас есть настроенный файл виртуального хоста для вашего домена. В этом руководстве мы будем использовать /etc/apache2/sites-available/example.com.conf в качестве примера.

      Шаг 1 – Установка Certbot

      Перед началом использования Let’s Encrypt для получения SSL сертификаты установим Certbot на ваш сервер.

      Certbot находится в активной разработке, поэтому пакеты Certbot, предоставляемые Ubuntu, обычно являются устаревшими. Тем не менее, разработчики Certbot поддерживают свой репозиторий пакетов для Ubuntu с актуальными версиями, поэтому мы будем использовать именно этот репозиторий.

      Сначала добавим репозиторий:

      • sudo add-apt-repository ppa:certbot/certbot

      Далее нажмите ENTER.

      Установим пакет Certbot для Apache с помощью apt:

      • sudo apt install python-certbot-apache

      Теперь Certbot готов к использованию, но для того, чтобы он мог настроить SSL для Apache, нам сперва необходимо проверить кое-какие настройки Apache.

      Шаг 2 – Настройка SSL сертификата

      Certbot должен иметь возможность найти корректный виртуальный хост в вашей конфигурации Apache для того, чтобы автоматически конфигурировать SSL. Для этого он будет искать директиву ServerName, которая совпадает с доменным именем, для которого вы запросите сертификат.

      Если вы следовали инструкциям по настройке виртуального хоста в руководстве по установке Apache, у вас должен быть виртуальный хост для вашего домена по адресу /etc/apache2/sites-available/example.com.conf с уже правильно настроенной директивой ServerName.

      Для проверки откройте файл серверного блока в nano или любом другом текстовом редакторе:

      • sudo nano /etc/apache2/sites-available/example.com.conf

      Найдите строку с ServerName. Она должна выглядеть примерно так:

      /etc/apache2/sites-available/example.com.conf

      ...
      ServerName example.com;
      ...
      

      Если она выглядит таким образом, закройте файл и переходите к следующему шагу.

      Если она не выглядит так, как описано выше, обновите директиву ServerName. Затем сохраните и закройте файл, после чего проверьте корректность синтаксиса вашего конфигурационного файла командой:

      • sudo apache2ctl configtest

      Если вы получили ошибку, откройте файл серверного блока и проверьте его на наличие опечаток или пропущенных символов. После того, как ваш конфигурационный файл будет проходить проверку на корректность, перезагрузите Apache для применения новой конфигурации:

      • sudo systemctl reload apache2

      Теперь Certbot может находить и обновлять корректный виртуальный хост.

      Далее обновим настройки файрвола для пропуска HTTPS трафика.

      Шаг 3 – Разрешение HTTPS в файрволе

      Если у вас включен файрвол ufw, как рекомендуется в руководстве по первичной настройке сервера, вам необходимо внести некоторые изменения в его настройки для разрешения трафика HTTPS. К счастью, Apache регистрирует необходимые профили в ufw в момент установки.

      Вы можете ознакомиться с текущими настройками командой:

      Скорее всего вывод будет выглядеть следующим образом:

      Вывод

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Как видно из вывода, разрешён только трафик HTTP.

      Для того, чтобы разрешить трафик HTTPS, разрешим профиль Apache Full и удалим избыточный профиль Apache:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Проверим внесённые изменения:

      Теперь настройки ufw должны выглядеть следующим образом:

      Вывод

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

      Теперь мы можем запустить Certbot и получить наши сертификаты.

      Шаг 4 - Получение SSL сертификата

      Certbot предоставляет несколько способов получения сертификатов SSL с использованием плагинов. Плагин для Apache берёт на себя настройку Apache и перезагрузку конфигурации, когда это необходимо. Для использования плагина выполним команду:

      • sudo certbot --apache -d example.com -d www.example.com

      Эта команда запускает certbot с плагином --apache, ключи -d определяют имена доменов, для которых должен быть выпущен сертификат.

      Если это первый раз, когда вы запускаете certbot, вам будет предложено ввести адрес электронной почты и согласиться с условиями использования сервиса. После этого certbot свяжется с сервером Let's Encrypt, а затем проверит, что вы действительно контролируете домен, для которого вы запросили сертификат.

      Если всё прошло успешно, certbot спросит, как вы хотите настроить конфигурацию HTTPS.

      Вывод

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

      Выберите подходящий вариант и нажмите ENTER. Конфигурация будет обновлена, а Apache перезапущен для применения изменений. certbot выдаст сообщение о том, что процесс прошёл успешно, и где хранятся ваши сертификаты:

      Вывод

      IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

      Ваши сертификаты загружены, установлены и работают. Попробуйте перезагрузить ваш сайт с использованием https:// и вы увидите значок безопасности в браузере. Он означает, что соединение с сайтом зашифровано, обычно он выглядит, как зелёная иконка замка. Если вы проверите ваш сервер тестом SSL Labs Server Test, он получит оценку A.

      Закончим тестированием процесса обновления сертификата.

      Шаг 5 - Проверка автоматического обновления сертификата

      Сертификаты Let's Encrypt действительны только 90 дней. Это сделано для того, чтобы пользователи автоматизировали процесс обновления сертификатов. Пакет certbot, который мы установили, делает это путём добавления скрипта обновления в /etc/cron.d. Этот скрипт запускается раз в день и автоматически обновляет любые сертификаты, которые закончатся в течение ближайших 30 дней.

      Для тестирования процесса обновления мы можем сделать "сухой" запуск (dry run) certbot:

      • sudo certbot renew --dry-run

      Если вы не видите каких-либо ошибок в результате выполнения этой команды, то всё в полном порядке. При необходимости Certbot будет обновлять ваши сертификаты и перезагружать Apache для применения изменений. Если автоматическое обновление по какой-либо причине закончится ошибкой, Let's Encrypt отправит электронное письмо на указанный вами адрес электронной почты с информацией о сертификате, который скоро закончится.

      Заключение

      В этом руководстве мы рассмотрели процесс установки клиента Let's Encrypt certbot, загрузили SSL сертификаты для вашего домена, настроили Apache для использования этих сертификатов и настроили процесс автоматического обновления сертификатов. Если у вас есть вопросы по работе с Certbot, рекомендуем ознакомиться с документацией Certbot.



      Source link

      Как установить веб-сервер Apache в Ubuntu 18.04


      Введение

      HTTP сервер Apache является самым широко используемым веб-сервером в мире. Он предоставляет множество удобных функций включая динамически загружаемые модули, широкую поддержку мультимедиа, и интеграцию с другим популярным программным обеспечением.

      В этом руководстве мы расскажем, как установить веб-сервер Apache на ваш сервер с Ubuntu 18.04.

      Необходимые условия

      Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере с Ubuntu 18.04. Кроме того, вам потребуется настроить базовый файрвол для блокирования всех портов, кроме необходимых для работы Apache. Вы можете ознакомиться с процессом настройки аккаунта пользователя и настройкой файрвола на вашем сервере следуя шагам нашего руководства по первичной настройке сервера на Ubuntu 18.04.

      После завершения создания аккаунта войдите на ваш сервер с помощью вновь созданного пользователя.

      Шаг 1 – Установка Apache

      Apache доступен из дефолтных репозиториев Ubuntu, что позволяет устанавливать его с помощью средств управления пакетами.

      Давайте начнём с обновления локального индекса пакетов:

      Далее установим пакет apache2:

      После подтверждения установки apt установит Apache и все необходимые зависимости.

      Шаг 2 - Настройка файрвола

      Перед тестированием установки Apache необходимо изменить настройки файрвола для разрешения доступа извне к дефолным веб-портам. Если вы следовали инструкциям по настройке файрвола из руководства по первичной настройке сервера, ваш файрвол UFW уже должен быть настроен таким образом, чтобы ограничивать доступ к вашему серверу.

      В процессе установки Apache регистрирует себя в конфигурации UFW, создавая несколько профилей приложения, которые могут быть использованы для включения и отключения доступа к Apache через файрвол.

      Выведем профили приложений ufw следующей командой:

      Вы увидите список приложений пользователей:

      Вывод

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Как видно из этого вывода, для Apache доступно три профиля:

      • Apache: этот профиль открывает порт 80 (обычный, не шифрованный веб-трафик).
      • Apache Full: этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL).
      • Apache Secure: этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL).

      Рекомендуется включать самый ограниченный профиль, который будет позволять входящий трафик. Поскольку мы не настраивали SSL для нашего сервера в этом руководстве, нам потребуется включить только порт 80:

      Вы можете проверить внесённые изменения командой:

      В выводе вы должны видеть, что HTTP трафик разрешён:

      Вывод

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Как видно из этого вывода профиль был включен для разрешения доступа к веб-серверу.

      Шаг 3 - Проверка вашего веб-сервера

      После завершения процесса установки Ubuntu 18.04 запустит Apache. Веб-сервер уже должен быть запущен.

      Проверим в системе инициализации systemd, что сервис работает, следующей командой:

      • sudo systemctl status apache2

      Вывод

      ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-24 20:14:39 UTC; 9min ago Main PID: 2583 (apache2) Tasks: 55 (limit: 1153) CGroup: /system.slice/apache2.service ├─2583 /usr/sbin/apache2 -k start ├─2585 /usr/sbin/apache2 -k start └─2586 /usr/sbin/apache2 -k start

      Как видно из представленного вывода, сервис выглядит работающим корректно. Тем не менее, самый надёжный способ проверить работу Apache - это запросить веб-страницу.

      Вы можете запросить дефолтную веб-страницу Apache с помощью IP адреса вашего сервера. Если вы не знаете IP адрес вашего сервера, вы можете найти его несколькими способами с помощью командной строки.

      Введите следующую команду:

      Она вернёт несколько адресов, разделённых пробелами. Вы можете попробовать каждый из них в вашем веб-браузере.

      Другой способ заключается в использовании команды, которая позволяет увидеть ваш IP адрес из другого места в сети Интернет:

      После того, как вы найдёте IP адрес вашего сервера, введите его в свой веб-браузер:

      • http://IP_адрес_вашего_сервера

      Вы должны увидеть дефолтную страницу Apache для Ubuntu 18.04:

      Дефолтная страница Apache

      Эта страница свидетельствует о том, что Apache работает корректно. На этой странице также представлена базовая информация о важных файлах и директориях Apache.

      Шаг 4 - Управление процессом Apache

      Теперь, когда у вас есть работающий веб-сервер, рассмотрим некоторые базовые команды для управления им.

      Для остановки себ-сервера наберите:

      • sudo systemctl stop apache2

      Для запуска остановленного сервера наберите:

      • sudo systemctl start apache2

      Для перезапуска сервиса наберите:

      • sudo systemctl restart apache2

      Если вы вносите какие-то изменения в конфигурацию, Apache зачастую может перезагружаться без потери открытых соединений. Для этого наберите команду:

      • sudo systemctl reload apache2

      По умолчанию Apache сконфигурирован на запуск при загрузке сервера. Вы можете отключить такое поведение следующей командой:

      • sudo systemctl disable apache2

      Для повторного включения сервиса при загрузке сервера наберите:

      • sudo systemctl enable apache2

      Теперь Apache должен опять запускаться автоматически при загрузке сервера.

      Шаг 5 - Настройка виртуальных хостов (рекомендуется)

      При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналог серверных блоков в Nginx) для хранения конфигурационных настроек разных сайтов. Это позволяет иметь более одного сайта на одном сервере. В этом руководстве мы будем для примера использовать доменное имя example.com, но вам следует заменить его вашим собственным доменным именем. Для того, чтобы узнать больше о настройке доменных имён в DigitalOcean, рекомендуем ознакомиться с нашим Введением в DNS DigitalOcean.

      Apache для Ubuntu 18.04 уже имеет один виртуальный хост, включенный по умолчанию, который настроен на отдачу документов из директории /var/www/html. Хотя это и удобно для обслуживания одного сайта, это становится неудобным, когда сайтов несколько. Вместо того, чтобы изменять /var/www/html, давайте создадим новую структуру директорий внутри /var/www для нашего сайта example.com, оставив /var/www/html для показа дефолтной страницы пользователям в случаях, когда клиентский запрос не совпадает ни с одним из настроенных доменных имён.

      Создайте директорию для example.com используя флаг -p для создания необходимых родительских директорий:

      • sudo mkdir -p /var/www/example.com/html

      Далее настройте владельца директории с помощью переменной окружения $USER:

      • sudo chown -R $USER:$USER /var/www/example.com/html

      Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение umask. На всякий случай мы можем удостовериться в этом командой:

      • sudo chmod -R 755 /var/www/example.com

      Далее создадим страницу index.html в nano или любом другом текстовом редакторе:

      • nano /var/www/example.com/html/index.html

      Добавим в файл следующий HTML:

      /var/www/example.com/html/index.html

      <html>
          <head>
              <title>Welcome to Example.com!</title>
          </head>
          <body>
              <h1>Success!  The example.com server block is working!</h1>
          </body>
      </html>
      

      Сохраните и закройте файл.

      Для того, чтобы Apache мог отдавать этот контент, нам необходимо настроить виртуальный хост с корректными настройками. Вместо того, чтобы редактировать существующий файл виртуального хоста /etc/apache2/sites-available/000-default.conf, создадим новый файл для нашего сайта - /etc/apache2/sites-available/example.com.conf:

      • sudo nano /etc/apache2/sites-available/example.com.conf

      Скопируйте следующий текст настроек виртуального хоста в созданный файл:

      /etc/apache2/sites-available/example.com.conf

      <VirtualHost *:80>
          ServerAdmin admin@example.com
          ServerName example.com
          ServerAlias www.example.com
          DocumentRoot /var/www/example.com/html
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      Обратите внимание, что мы обновили DocumentRoot на адрес нашей новой директории, и ServerAdmin на адрес электронной почты, доступный для администратора example.com. Мы также добавили две директивы: ServerName, которая устанавливает базовое доменное имя, которое должно использоваться для хоста, а также ServerAlias, которая определяет другие имена, которые должны использоваться для отображения хоста так же, как и базовое доменное имя.

      Сохраните и закройте файл после внесения изменений.

      Теперь активируем профиль сайта с помощью утилиты a2ensite:

      • sudo a2ensite example.com.conf

      Деактивируем дефолтный сайт, определённый в 000-default.conf:

      • sudo a2dissite 000-default.conf

      Далее проверим наши настройки на наличие ошибок:

      • sudo apache2ctl configtest

      Вы должны увидеть следующий вывод:

      Вывод

      Syntax OK

      Перезапустите Apache для применения внесённых изменений:

      • sudo systemctl restart apache2

      Теперь Apache должен работать с вашим доменным именем. Вы можете проверить это введя http://example.com в вашем браузере, где в результате вы должны увидеть что-то в этом роде:

      Успешная работа Apache

      Шаг 6 - Важные файлы и директории Apache

      Теперь, когда вы знаете, как управлять сервисом Apache, вам стоит ознакомиться с важными файлами и директориями Apache.

      Контент

      • /var/www/html: фактический веб-контент, который по умолчанию состоит только из дефолтной страницы Apache, которую мы видели ранее, хранится в директории /var/www/html. Это может быть изменено в конфигурационных файлах Apache.

      Конфигурация сервера

      • /etc/apache2: это конфигурационная директория Apache. Все файлы конфигурации Apache находятся здесь.
      • /etc/apache2/apache2.conf: главный конфигурационный файл Apache. Изменения в этом файле влияют на глобальную конфигурацию Apache. Этот файл отвечает за загрузку многих других файлов из конфигурационной директории.
      • /etc/apache2/ports.conf: этот файл определяет порты, которые Apache будет слушать. По умолчанию Apache слушает порт 80, а также порт 443 при условии, что модуль для работы с SSL включен.
      • /etc/apache2/sites-available/: в этой директории хранятся файлы виртуальных хостов. Apache не использует файлы из этой директории, если ссылки на них нет в директории sites-enabled. Обычно настройка всех файлов виртуальных хостов осуществляется в этой директории, а активация хоста происходит путём создания ссылки в другой директории командой a2ensite.
      • /etc/apache2/sites-enabled/: директория, в которой хранятся активированные виртуальные хосты. Обычно это делается путём создания ссылки на файл конфигурации хоста из директории sites-available с помощью команды a2ensite. Apache читает конфигурационный файлы и ссылки из этой директории при запуске или перезапуске.
      • /etc/apache2/conf-available/, /etc/apache2/conf-enabled/: эти директории связаны друг с другом так же, как и sites-available и sites-enabled связаны друг с другом, но используются для хранения фрагментов конфигурации, которые не принадлежат виртуальным хостам. Файлы в директории conf-available могут быть включены командой a2enconf и выключены командой a2disconf.
      • /etc/apache2/mods-available/, /etc/apache2/mods-enabled/: эти директории содержат, соответственно, доступные и активные модули. Файлы, оканчивающиеся на .load, содержат фрагменты для загрузки конкретных модулей, а файлы, оканчивающиеся на .conf, содержат настройки этих модулей. Модули можно активировать командой a2enmod и деактивировать командой a2dismod.

      Серверные логи

      • /var/log/apache2/access.log: по умолчанию каждый запрос к вашему веб-серверу записывается в этом файле, если только Apache не настроен на другое поведение.
      • /var/log/apache2/error.log: по умолчанию все ошибки записываются в этот файл. Директива LogLevel в конфигурации Apache определяет, насколько детальными должны быть записи об ошибках.

      Заключение

      Теперь, когда ваш веб-сервер установлен, у вас есть множество вариантов того, что делать дальше. Если вы хотите построить более полный стек приложений, вы можете ознакомиться с нашим руководством по установке и настройке стека LAMP на Ubuntu 18.04.



      Source link