Как защитить Nginx с помощью Let’s Encrypt на FreeBSD

Вступление

Let’s Encrypt - это центр сертификации (CA), который предоставляет простой способ получения и установки бесплатных сертификатов TLS / SSL, тем самым обеспечивая зашифрованный HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который автоматизирует большинство шагов.

В этом руководстве мы покажем вам, как использовать Certbot для получения бесплатного SSL-сертификата и использовать его на сервере FreeBSD под управлением Nginx. Мы также покажем вам, как автоматически обновить ваш сертификат SSL.

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

Предпосылки

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

  • Сервер FreeBSD. Если вы новичок в работе с FreeBSD 11, вы можете следовать thside, чтобы помочь вам начать.

  • Nginx установлен и настроен на вашем сервере. Инструкции о том, как это настроить, см. В нашем руководстве по адресу Как установить Nginx на FreeBSD 11.2.

  • Зарегистрированное доменное имя, которым вы владеете и контролируете. Если у вас еще нет зарегистрированного доменного имени, вы можете зарегистрировать его у одного из множества регистраторов доменных имен (например, Namecheap, GoDaddy и т. Д.).

  • DNS * A Record *, который указывает ваш домен на публичный IP-адрес вашего сервера. Вы можете следовать thutorial этого имени хоста для получения подробной информации о том, как их добавить. Это необходимо из-за того, что Let’s Encrypt проверяет, что вы являетесь владельцем домена, для которого выдается сертификат. Например, если вы хотите получить сертификат для + example.com +, этот домен должен разрешиться на ваш сервер, чтобы процесс проверки заработал. Наша установка будет использовать + example.com + и + www.example.com + в качестве доменных имен, поэтому * необходимы обе записи DNS *.

Выполнив эти предварительные условия, давайте перейдем к установке Certbot, клиентского программного обеспечения Let Encrypt.

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

Первым шагом к использованию Let Encrypt для получения SSL-сертификата является установка клиентского программного обеспечения + certbot + на ваш сервер. Самую последнюю версию Certbot можно установить из исходного кода, используя https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-ports-on-freebsd-10-1[ports system из FreeBSD.

Для начала извлеките сжатый снимок дерева портов:

sudo portsnap fetch

Выполнение этой команды может занять несколько минут. Когда он закончится, извлеките снимок:

sudo portsnap extract

Для выполнения этой команды также может потребоваться некоторое время. Когда это будет сделано, перейдите в каталог + py-certbot + в дереве портов:

cd /usr/ports/security/py-certbot

Затем используйте команду + make + с привилегиями + sudo + для загрузки и компиляции исходного кода Certbot:

sudo make install clean

Затем перейдите в каталог + py-certbot-nginx + внутри дерева портов:

cd /usr/ports/security/py-certbot-nginx

Запустите команду + make + снова из этого каталога. Это установит плагин + nginx + для Certbot, который мы будем использовать для получения сертификатов SSL:

sudo make install clean

Во время установки этого плагина вы увидите пару синих диалоговых окон, которые выглядят так:

изображение: https: //assets.digitalocean.com/articles/letsencrypt_freebsd/py-nginx.png [пример диалогового окна py-certbot-nginx]

Они дают вам возможность установить документацию для плагина и его зависимостей. В целях данного руководства вы можете просто нажать + ENTER +, чтобы принять параметры по умолчанию в этих окнах, которые установят эту документацию.

Клиент + certbot + Let’s Encrypt готов к использованию. Однако до получения сертификатов важно настроить брандмауэр и разрешить HTTPS-трафик через него, если вы этого еще не сделали.

Шаг 2 - Настройка брандмауэра и разрешение доступа HTTPS

Если вы уже настроили брандмауэр на своем сервере, вы должны убедиться, что он разрешает доступ HTTPS (через порт + 443 +). Если вы еще не настроили брандмауэр, вы можете сделать это, следуя указаниям, описанным в этом шаге.

Откройте ваш файл + rc.conf +, который находится в каталоге + / etc / +, в предпочитаемом вами редакторе. Здесь мы будем использовать + ee +:

sudo ee /etc/rc.conf

Этот файл используется для информирования FreeBSD о том, какие службы следует запускать при загрузке машины. В верхней части файла добавьте следующие выделенные строки:

/etc/rc.conf

. . .
nginx_enable="YES"

Вот что делает каждая из этих директив и их настройки:

  • + firewall_enable =" YES "+ - это позволяет брандмауэру запускаться при загрузке сервера.

  • + firewall_type =" workstation "+ - FreeBSD предоставляет несколько типов брандмауэров по умолчанию, каждый из которых имеет несколько разные конфигурации. Объявляя тип + workstation +, брандмауэр защищает этот сервер только с использованием правил с отслеживанием состояния.

  • + firewall_myservices =" 22 / tcp 80 / tcp 443 / tcp "+ - Директива + firewall_myservices + - это место, где вы можете перечислить TCP-порты, которые вы хотите разрешить через брандмауэр. В этом примере мы указываем порты + 22 +, + 80 + и + 443 +, чтобы разрешить SSH, HTTP и HTTPS доступ к серверу соответственно.

  • + firewall_allowservices =" any "+ - Это позволяет машине с любого IP-адреса обмениваться данными через порты, указанные в директиве + firewall_myservices +.

После добавления этих строк сохраните файл и закройте редактор, нажав + CTRL + C +, напечатав + exit +, а затем нажав + ENTER +.

Затем запустите службу межсетевого экрана + ipfw +. Поскольку это первый раз, когда вы запускаете брандмауэр на этом сервере, есть вероятность, что это приведет к остановке вашего сервера, что сделает его недоступным по SSH. Следующая команда + nohup + - что означает «без зависаний» - запустит брандмауэр, предотвращая остановку, а также перенаправит стандартный вывод и ошибку во временный файл журнала:

sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

Однако если вы используете + csh + или + tcsh +, это перенаправление приведет к появлению + Ambiguous output redirect. + В вашем выводе. В этом случае вместо этого запустите + ipfw +:

sudo nohup service ipfw start >&/tmp/ipfw.log

В будущем вы можете управлять брандмауэром + ipfw +, как и любой другой сервис. Например, чтобы остановить, запустить, а затем перезапустить службу, вы должны выполнить следующие команды:

sudo service ipfw stop
sudo service ipfw start
sudo service ipfw restart

С настроенным брандмауэром вы теперь готовы запустить Certbot и получить ваши сертификаты.

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

Certbot предоставляет различные способы получения SSL-сертификатов с помощью различных плагинов. Плагин + nginx + позаботится о перенастройке Nginx и перезагрузке файла конфигурации:

sudo certbot --nginx -d  -d

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

Если задача прошла успешно, Certbot спросит, как вы хотите настроить параметры HTTPS:

Output. . .
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. Это обновит конфигурацию и перезагрузит Nginx, чтобы выбрать новые настройки. + certbot + завершит с сообщением о том, что процесс прошел успешно и где хранятся ваши сертификаты:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /usr/local/etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2018-09-24. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. To non-interactively renew *all* of your certificates, run
  "certbot renew"
- Your account credentials have been saved in your Certbot
  configuration directory at /usr/local/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 *.

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

Шаг 4 - Проверка автообновления Certbot

Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это должно стимулировать пользователей автоматизировать процесс обновления их сертификатов. Этот шаг описывает, как автоматизировать продление сертификата, настроив задачу + cron +. Перед настройкой этого автоматического обновления важно проверить, что вы можете правильно продлевать сертификаты.

Чтобы проверить процесс обновления, вы можете выполнить пробный прогон с помощью + certbot +:

sudo certbot renew --dry-run

Если вы не видите ошибок, вы готовы создать новый crontab:

sudo crontab -e

Откроется новый файл + crontab +. Добавьте следующее содержимое в новый файл, который скажет + cron + запускать команду + certbot renew + два раза в день в полдень и полночь. + certbot renew + проверяет, не истек ли срок действия каких-либо сертификатов в системе, и попытается обновить их при необходимости:

0 0,12 * * * /usr/local/bin/certbot renew

Обратите внимание, что, поскольку вы предшествовали команде + crontab -e + с помощью + sudo +, эта операция будет выполняться как * root *, что необходимо, так как для запуска certbot требуются привилегии суперпользователя.

Если процесс автоматического продления не удастся, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупреждая вас, когда ваш сертификат скоро истечет.

Заключение

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

Related