Нека шифроваме

Обратен прокси Nginx с HTTPS чрез LetsEncrypt

Обратен прокси Nginx с HTTPS чрез LetsEncrypt
Това е продължение на моя предишен пост където настройваме прост обратен прокси сървър, използвайки Nginx. В тази публикация ще осигурим връзката между клиента и обратния прокси сървър, използвайки безплатен TLS (a.к.SSL) сертификат от LetsEncrypt. Препоръчвам ви да разгледате гореспоменатия пост за обратен прокси за основите.

Предпоставки

  1. Сървър със статичен публичен IP. Тук работи Nginx.
  2. Вътрешни сървъри с предвидения уебсайт, работещ през HTTP
  3. Регистрирано име на домейн. Ще използвам ranvirslog.com като основното ми име на домейн и двата уебсайта са на FQDNs - ww1.ranvirslog.com и ww2ranvirslog.com

Настройвам

Така че IP адресите са се променили от последния път, тъй като правя тази настройка отново. Ето новите IP адреси и имена на хостове.

VM / Име на хост Публичен IP Частен IP Роля / Функция
ReverseProxy 68.183.214.151 10.135.127.136 TLS терминална точка и обратен прокси сървър
web1 Няма данни 10.135.126.102 Хостинг ww1.ranvirslog.com

уебсайт над порт 80 HTTP

web2 Няма данни 10.135.126.187 Хостинг

ww2.ranvirslog.com

уебсайт над порт 80 HTTP

DNS записите са настроени като такива, като двата уебсайта (различни поддомейни) сочат към един и същ статичен публичен IP. Това е IP адресът на обратния ни прокси на Nginx:

Запис Стойност
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

За да накараме обратния ни DNS да работи над некриптиран HTTP, създадохме два файла в / etc / conf.г / име ww1.conf и ww2.conf всеки със следната конфигурация:

/ и т.н. / conf.г / ww1.конф

сървър
слушайте 80;
слушайте [::]: 80;
име на сървър ww1.ranvirslog.com;
местоположение /
proxy_pass http: // 10.135.126.102 /;
прокси_буфериране изключено;
proxy_set_header X-Real-IP $ remote_addr;

/ и т.н. / conf.г / ww2.конф

сървър
слушайте 80;
слушайте [::]: 80;
име на сървър ww2.ranvirslog.com;
местоположение /
proxy_pass http: // 10.135.126.187 /;
прокси_буфериране изключено;
proxy_set_header X-Real-IP $ remote_addr;

Операционната система, която използваме, е Ubuntu 18.04 LTS и имаме отстранени файлът / etc / nginx / sites-enabled / default, така че Nginx може да действа чисто като обратен DNS, използвайки конфигурациите, показани по-горе.

Обективен

С обратния DNS (и бекенд уебсайтовете), които вече работят и работят, нашата цел е да инсталираме един TLS сертификат и за двете FQDN (това е ww1.ranvirslog.com и ww2.ranvirslog.com) на нашия обратен прокси Nginx.

Трафикът между всеки клиент и обратния прокси ще бъде шифрован, но трафикът между обратния прокси и бекенд сървърите не е криптиран. Това обаче все още е безкрайно по-сигурна опция, отколкото липсата на HTTPS изобщо. За случаите, когато обратният прокси и различните уеб сървъри са на един и същ хост, кажете, ако използвате контейнери на Docker, за да хоствате всички на един и същ VPS, тогава дори този некриптиран трафик се съдържа на един хост.

Инсталиране на Certbot

Certbot е клиентска програма, която ще се изпълни на нашия обратен прокси сървър и ще договори TLS сертификат с LetsEncrypt. Това ще докаже на LetsEncrypt, че сървърът всъщност има контрол върху FQDN, за които твърди, че има контрол над. Няма да се притесняваме как Certbot го прави.

Традиционно можете да използвате Certbot като самостоятелен софтуер, който просто ще получи сертификатите (които всъщност са само дълги криптографски ключове) и ще ги запази на сървъра. Но за щастие, за повечето операционни системи има персонализирани плъгини за Nginx, Apache и други софтуери. Ще инсталираме Certbot с приставка Nginx. Това автоматично ще конфигурира Nginx да използва новополучените ключове и да се отърве от несигурни правила като слушане на HTTP на порт 80.

Ако използвате базирани на Debian системи, като в моя случай използвам Ubuntu 18.04 LTS, тогава инсталацията е бриз.

$ sudo apt актуализация
$ sudo apt инсталира софтуер-свойства-общи
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt актуализация
$ sudo apt инсталира python-certbot-nginx

Други операционни системи, вашият RedHat, Gentoo, Fedora могат да следват официалните инструкции, изброени тук.

След като инсталирате Certbot с приставка Nginx за вашата комбинация от ОС можем да се заемем с бизнеса.

Получаване на TLS сертификати

За да получите TLS сертификата за първи път, изпълнете следната команда:

$ sudo certbot --nginx

Това ще премине през поредица от интерактивни въпроси, както е показано по-долу:

  1. Въведете вашия имейл

Запазване на регистрационния файл за отстраняване на грешки в / var / log / letsencrypt / letsencrypt.дневник
Избрани приставки: Удостоверител nginx, Инсталатор nginx
Въведете имейл адрес (използван за спешни обновления и известия за сигурност) (Въведете 'c' за отмяна): [имейл защитен]

  1. Съгласете се с TOS

Моля, прочетете Общите условия на https: // letsencrypt.org / documents / LE-SA-v1.2-ноември-15-2017.pdf. Трябва да се съгласите, за да се регистрирате в ACME сървъра на https: // acme-v02.api.letsencrypt.org / директория
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Незадължителен бюлетин

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Бихте ли искали да споделите своя имейл адрес с Фондация Electronic Frontier, партньор-основател на проекта Let's Encrypt и с нестопанска организация, която разработва Certbot? Бихме искали да ви изпратим имейл за нашата работа по криптиране на мрежата, EFF новини, кампании и начини за подкрепа на цифровата свобода.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. След това ще открие имената на домейни на вашия сървър и ако искате да изберете всички домейни, просто натиснете

За кои имена искате да активирате HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Изберете подходящите числа, разделени със запетаи и / или интервали, или оставете въведеното празно, за да изберете всички показани опции (въведете 'c' за отмяна):

  1. Пренасочете всичко към TLS. Избрах опцията 2, за да пренасоча всичко към SSL, но вашият случай на употреба може да се различава. За нови бекенд инсталации е безопасно да изберете опция 2.

Моля, изберете дали да пренасочите HTTP трафика към HTTPS, като премахнете HTTP достъп.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Без пренасочване - Не правете допълнителни промени в конфигурацията на уеб сървъра.
2: Пренасочване - Направете всички пренасочвания за осигуряване на HTTPS достъп. Изберете това за нови сайтове или ако сте уверени, че сайтът ви работи на HTTPS. Можете да отмените тази промяна, като редактирате конфигурацията на вашия уеб сървър.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Изберете подходящия номер [1-2], след това [въведете] (натиснете 'c', за да отмените): 2

Ако всичко е минало добре, то ще ви покаже това съобщение, само за имената на вашите домейни.

Честито! Успешно активирахте https: // ww1.ranvirslog.com и https: // ww2.ranvirslog.com Можете да посетите FQDN и да забележите, че уебсайтовете вече имат знак за катинар, който предполага, че всичко е криптирано.

Погледнете конфигурационните файлове

Ако прегледате конфигурационните файлове, които създадохме по-рано, а именно / etc / conf.г / ww1.conf и / etc / conf.г / ww2.conf, ще забележите, че всички правила "Listen 80" са изчезнали и са добавени няколко нови реда, кажете на сървъра, че комуникацията трябва да бъде шифрована и местоположението на сертификатите и ключовете за извършване на споменатото криптиране.

Силно препоръчвам да разгледате конфигурационните файлове, тъй като това също може да ви научи как правилно да инсталирате сертификати и да пишете конфигурационни файлове.

Подновяване на сертифицирането

Типичните сертификати LetsEncrypt са валидни 90 дни и преди изтичането им трябва да ги подновите. Можете да използвате Certbot за първо стартиране на подновяването, като изпълните командата:

$ sudo certbot подновяване - изсушаване

Ако операцията успее, ще видите следното съобщение:

Поздравления, всички подновявания са успели. Следните сертификати са подновени:

/ etc / letsencrypt / live / ww1.ranvirslog.com / пълна верига.пем (успех)
** СУХО РАБОТА: симулира "подновяване на certbot" близо до изтичането на сертификата
** (Тестовите сертификати по-горе не са запазени.)

Сега можете да добавите Cron работа, която ще се опита да поднови всяка седмица или така. Certbot няма да поднови сертификатите, освен ако те наистина не се дължат за това, така че не е нужно да се притеснявате. Командата за действително подновяване е:

$ certbot поднови

Добавете го към cron заданието на root, като използвате:

$ sudo crontab -e

В следващия ред изберете любимия си редактор (изберете Nano, ако не сте сигурни) и добавете следните редове в края на сега отворения файл:

..
# Например можете да стартирате резервно копие на всички ваши потребителски акаунти
# в 5 а.m всяка седмица с:
# 0 5 * * 1 tar -zcf / var / backups / home.tgz / начало /
#
# За повече информация вижте страниците с ръководствата на crontab (5) и cron (8)
#
# m h dom mon dow команда
* 2 * * 2 подновяване на certbot

Това ще изпълни командата за подновяване на certbot в 2 сутринта във всяка произволна минута, на втория ден от всяка седмица.

Заключение

Ако не сте запознати с TLS сертификатите, експериментирането с неща като HSTS може да бъде рисковано. Тъй като тези промени са необратими. Ако обаче искате да слезете по заешката дупка на сигурността, мога горещо да препоръчам блога на Троя Хънт, който е едно от основните вдъхновения зад това писане.

Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...
Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...
Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...