Предпоставки
- Сървър със статичен публичен IP. Тук работи Nginx.
- Вътрешни сървъри с предвидения уебсайт, работещ през HTTP
- Регистрирано име на домейн. Ще използвам 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Това ще премине през поредица от интерактивни въпроси, както е показано по-долу:
- Въведете вашия имейл
Запазване на регистрационния файл за отстраняване на грешки в / var / log / letsencrypt / letsencrypt.дневник
Избрани приставки: Удостоверител nginx, Инсталатор nginx
Въведете имейл адрес (използван за спешни обновления и известия за сигурност) (Въведете 'c' за отмяна): [имейл защитен]
- Съгласете се с TOS
Моля, прочетете Общите условия на https: // letsencrypt.org / documents / LE-SA-v1.2-ноември-15-2017.pdf. Трябва да се съгласите, за да се регистрирате в ACME сървъра на https: // acme-v02.api.letsencrypt.org / директория
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
- Незадължителен бюлетин
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Бихте ли искали да споделите своя имейл адрес с Фондация Electronic Frontier, партньор-основател на проекта Let's Encrypt и с нестопанска организация, която разработва Certbot? Бихме искали да ви изпратим имейл за нашата работа по криптиране на мрежата, EFF новини, кампании и начини за подкрепа на цифровата свобода.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y
- След това ще открие имената на домейни на вашия сървър и ако искате да изберете всички домейни, просто натиснете
За кои имена искате да активирате HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Изберете подходящите числа, разделени със запетаи и / или интервали, или оставете въведеното празно, за да изберете всички показани опции (въведете 'c' за отмяна):
- Пренасочете всичко към 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 може да бъде рисковано. Тъй като тези промени са необратими. Ако обаче искате да слезете по заешката дупка на сигурността, мога горещо да препоръчам блога на Троя Хънт, който е едно от основните вдъхновения зад това писане.