Skip to content

Сети - теория

За этой категорией можно следить из открытой социальной сети, используя идентификатор сети-теория@baseinfo.nbics.net

2 Темы 4 Сообщения
  • Основы SSL-сертификации

    2
    0 Голоса
    2 Сообщения
    4 Просмотры
    A
    Взаимодействие Nginx и Certbot для получения и управления SSL-сертификатами Certbot — это официальный клиент Let's Encrypt, который автоматизирует получение и установку SSL/TLS-сертификатов. Nginx — популярный веб-сервер, который может работать как реверс-прокси. Их интеграция позволяет легко перейти на HTTPS без ручной настройки. 1. Введение: Зачем нужен SSL и как Certbot взаимодействует с Nginx SSL/TLS-сертификаты обеспечивают шифрование трафика между клиентом (браузером) и сервером, предотвращая перехват данных. Без HTTPS сайт считается небезопасным в браузерах, и поисковики (как Google) понижают его в выдаче. Роль Certbot: Certbot автоматизирует процесс: проверяет владение доменом, запрашивает сертификат у Let's Encrypt и настраивает Nginx. Плагин --nginx специально интегрируется с конфигурацией Nginx, временно модифицируя её для проверки. Преимущества интеграции: Бесплатно и автоматически (сертификаты на 90 дней с автопродлением). Минимальные изменения в конфиге. Поддержка редиректа HTTP → HTTPS. Аналогия: Certbot — как мастер-установщик, который проверяет, что домен ваш (через " challenge" — вызов), а затем "вклеивает" замки (сертификаты) в дверь вашего сервера (Nginx). Предварительные требования: Установленный Nginx (sudo apt install nginx на Ubuntu). Установленный Certbot (sudo apt install certbot python3-certbot-nginx). Домен с A-записью,指向 на IP сервера. Открытый порт 80 в фаерволе (для проверки). 2. Минимальная настройка Nginx для Certbot Для успешного получения сертификата Nginx должен слушать порт 80 и иметь блок server с правильным server_name. Certbot использует HTTP-01 challenge: он создаёт временный файл на сервере, и Let's Encrypt проверяет его доступность по HTTP. Минималистичный конфиг для выпуска сертификата Если ваш бэкенд (приложение) ещё не готов, используйте простой конфиг, независимый от прокси. Создайте файл в /etc/nginx/sites-available/my_domain.conf и активируйте симлинк в sites-enabled. server { listen 80; server_name my_domain.tld; # Замените на ваш домен location / { root /var/www/html; # Пустая директория для статических файлов } } Почему это работает? Certbot ищет блок с server_name, совпадающим с доменом (-d my_domain.tld). Он временно добавит location /.well-known/acme-challenge/ для проверки, не трогая ваш location /. Проверка конфига: sudo nginx -t (проверить синтаксис). sudo systemctl reload nginx (применить изменения). Если у вас уже есть прокси-настройки (для приложения на порту 9090), они тоже подойдут, но убедитесь, что бэкенд запущен, иначе Nginx может не перезагрузиться. Пример с прокси (если бэкенд готов): server { listen 80; server_name my_domain.tld; keepalive_timeout 60; location / { proxy_pass http://localhost:9090; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_cache off; proxy_buffering off; proxy_read_timeout 100s; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } Нюанс: Если бэкенд не работает, Certbot может выдать ошибку при reload. В этом случае используйте минималистичный вариант выше. 3. Процесс получения сертификата с Certbot --nginx Запустите команду: sudo certbot --nginx -d my_domain.tld Что происходит шаг за шагом Проверка владения (HTTP-01 Challenge): Certbot создаёт секретный файл в /.well-known/acme-challenge/ на вашем сервере. Временно модифицирует конфиг Nginx, добавляя правило для этой локации (выше вашего location /). Сервер Let's Encrypt запрашивает http://my_domain.tld/.well-known/acme-challenge/XYZ. Nginx отдаёт файл, подтверждая владение. Выпуск сертификата: Если проверка успешна, Certbot получает сертификат и ключи (/etc/letsencrypt/live/my_domain.tld/). Автоматически добавляет в конфиг: listen 443 ssl; Пути к сертификатам: ssl_certificate ...; ssl_certificate_key ...; Опции: include /etc/letsencrypt/options-ssl-nginx.conf; и ssl_dhparam ...; Предлагает настроить редирект с 80 на 443 (рекомендуется для безопасности). Автоматическое продление: Certbot создаёт таймер (systemd) или crontab для ежедневной проверки. Продление запускается, если осталось <30 дней. После успеха Certbot выдаст "Congratulations!". Теперь сайт доступен по HTTPS. Возможные проблемы: DNS не пропагировался: Проверьте A-запись. Порт 80 заблокирован: Откройте в UFW (sudo ufw allow 80). Конфликт с бэкендом: Используйте минимальный конфиг. 4. Редактирование конфига после получения сертификата После Certbot вы можете заменить временные настройки на реальные. Сохраните строки, помеченные # managed by Certbot — они нужны для продления. Пример итогового конфига с прокси и SSL: server { listen 80; server_name my_domain.tld; # Редирект на HTTPS (добавит Certbot, если выбрать) return 301 https://$server_name$request_uri; } server { listen 443 ssl; # managed by Certbot server_name my_domain.tld; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/my_domain.tld/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/my_domain.tld/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { proxy_pass http://localhost:9090; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_cache off; proxy_buffering off; proxy_read_timeout 100s; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } Проверьте: sudo nginx -t и sudo systemctl reload nginx. Совет: Разделите HTTP (редирект) и HTTPS в отдельные блоки для ясности. 5. Продление сертификата: Как Certbot работает с кастомным конфигом Certbot не повредит ваш конфиг при продлении (через 90 дней). Он: Временно добавляет правило для challenge. Проверяет синтаксис (nginx -t). Обновляет сертификаты и reload Nginx. Убирает временные изменения. Ваши прокси-настройки остаются нетронутыми, если нет ошибок синтаксиса. Тестирование продления Запустите симуляцию: sudo certbot renew --dry-run Если "all simulated renewals succeeded" — всё в порядке. Автоматизация: Certbot сам настраивает таймер. Проверьте: sudo systemctl list-timers. 6. Лучшие практики и распространённые ошибки Структура конфига: Держите SSL-строки от Certbot нетронутыми. Используйте отдельные файлы для сайтов (/etc/nginx/sites-available/). Безопасность: Включите HSTS (add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;) после настройки. Мониторинг: Установите уведомления о продлении (опция Certbot --post-hook для скриптов). Ошибки: "No matching server block": Убедитесь в правильном server_name. Ошибка reload: Запустите бэкенд или используйте статический root. Многодоменные сертификаты: Добавьте -d домен2.tld. Альтернативы: Для продвинутых — Certbot в standalone режиме (без Nginx), но --nginx удобнее.
  • Основы DNS (Domain Name System)

    2
    0 Голоса
    2 Сообщения
    4 Просмотры
    A
    Основы DNS (Domain Name System) 1. Что такое DNS и зачем она нужна? DNS — это Domain Name System, или система доменных имён. Представьте интернет как огромный город, где каждый сервер или сайт — это дом с уникальным адресом. Эти адреса — IP-адреса (например, 192.0.2.1 для IPv4 или 2001:db8::1 для IPv6). Но запоминать цифры неудобно, поэтому DNS работает как телефонная книга интернета: она переводит удобные для людей имена (домены, как example.com) в IP-адреса, которые понимают компьютеры. Ключевые компоненты DNS: Доменное имя: example.com — это иерархическая структура. "com" — топ-уровень (TLD), "example" — второй уровень. DNS-записи: Типы записей, такие как: A-запись: Связывает домен с IPv4-адресом. AAAA-запись: Для IPv6. NS-запись: Указывает на авторитативные DNS-серверы (о них ниже). MX-запись: Для почты. CNAME-запись: Псевдоним для другого домена. Регистратор домена: Компания, где вы покупаете домен (например, GoDaddy или Reg.ru). Здесь вы настраиваете NS-записи. Без DNS вы бы набирали IP-адреса в браузере вместо доменов — это было бы неудобно и хаотично. 2. Как работает DNS: Процесс разрешения имён Когда вы вводите домен в браузер (например, google.com), происходит разрешение DNS — поиск IP-адреса. Это многоступенчатый процесс, похожий на цепочку вопросов: Локальный кэш: Ваш компьютер (ОС или браузер) проверяет, нет ли уже сохранённого IP для этого домена. Рекурсивный DNS-сервер: Если нет, запрос идёт к серверу вашего провайдера (ISP) или публичному (как 8.8.8.8 от Google). Этот сервер "рекурсивно" ищет ответ, спрашивая другие серверы. Корневые серверы: Их 13 по миру (управляются организациями вроде ICANN). Они знают TLD (например, .com) и направляют к серверу TLD. Сервер TLD: Знает, где находятся NS-серверы для вашего домена (например, ns1.example.com). Авторитативные DNS-серверы: Эти серверы (указанные в NS-записях) дают окончательный ответ: "Домен example.com имеет IP 93.184.216.34". Весь процесс занимает миллисекунды благодаря кэшированию (см. ниже). Если серверы недоступны, запрос может завершиться ошибкой (например, "DNS_PROBE_FINISHED_NXDOMAIN"). Аналогия: Вы ищете адрес друга. Сначала смотрите в свою записную книжку (локальный кэш). Если нет — звоните в справочную (рекурсивный сервер), которая спрашивает районную справочную (TLD), а та — домоуправление (авторитативный сервер). 3. Кэширование DNS: Оптимизация и её нюансы Чтобы не запрашивать IP каждый раз заново, DNS использует кэширование — временное хранение данных. Кэши есть везде: Уровни кэширования: Браузер: Современные браузеры (Chrome, Firefox) имеют свой кэш DNS для ускорения. Он может работать поверх ОС и даже использовать технологии вроде DNS-over-HTTPS (DoH) для шифрования. Операционная система: Windows, macOS или Linux хранят кэш в памяти (очистка: ipconfig /flushdns в Windows). Роутер: Домашний роутер кэширует DNS для всей сети. ISP (провайдер): Крупные провайдеры (Ростелеком, МТС) имеют мощные кэши для миллионов пользователей. Глобальные серверы: Публичные DNS (Google, Cloudflare) тоже кэшируют, но обновляются быстрее. TTL (Time To Live): Это "срок жизни" записи в секундах (например, 3600 = 1 час). TTL говорит кэшу: "Храни эту информацию столько времени, потом проверь заново". Длинный TTL (24–72 часа) экономит трафик, но замедляет обновления. Короткий TTL (5–10 минут) ускоряет изменения, но нагружает серверы. Кэширование делает DNS быстрым, но может привести к задержкам при изменениях (см. раздел о пропагации). 4. Пропагация DNS: Как распространяются изменения Когда вы меняете DNS-запись (например, переносите сайт на новый сервер с новым IP), изменения не происходят мгновенно. Это называется пропагацией DNS — распространением обновлений по глобальной сети. Почему это занимает время? Изменение вносится на авторитативных серверах (у хостинга или регистратора). Кэши по миру обновляются только по истечении TTL старой записи. Разные серверы (в разных странах, у разных ISP) обновляются асинхронно — от минут до 72 часов (максимум, рекомендованный ICANN). Факторы влияния: Длинный TTL старой записи: Кэши держат её дольше. География: Серверы в Европе обновятся быстрее, чем в Азии. Неконсистентность: Если NS-записи указывают на разные серверы, данные могут расходиться. Пропагация — это нормальный процесс, но для ускорения устанавливайте короткий TTL перед изменениями (за 24–48 часов). 5. Диагностика и инструменты для работы с DNS Чтобы проверить DNS, используйте инструменты: Команды в терминале: nslookup your-domain.com: Показывает IP. nslookup -type=ns your-domain.com: Список NS-серверов. nslookup your-domain.com ns1.example.com: Запрос к конкретному NS. Онлайн-сервисы: dnschecker.org: Проверяет пропагацию по миру (введите домен, тип A — увидите IP из разных стран). toolbox.googleapps.com/apps/dig/: Аналог dig-команды для детального анализа. dnsviz.net: Визуализирует цепочку делегирования, выявляет несоответствия. Очистка кэша: В Windows: ipconfig /flushdns. Перезагрузка роутера/ПК. Смена DNS на публичные: Google (8.8.8.8), Cloudflare (1.1.1.1). Эти инструменты помогут диагностировать, где именно "застряли" данные. 6. Частный случай: Проблемы со сбоем доменов после изменений Как частный случай, иногда после переноса домена на новый сервер (например, с Yunohost на Nextcloud) в разных местах видны разные IP: на одном ПК — старый сервер, на другом — новый; даже в браузерах на одном устройстве. Это вызвано неполной пропагацией и кэшированием (разные TTL, ISP-кэши). Проблема обычно решается ожиданием (до 72 часов), очисткой кэша или корректировкой NS-записей. Для детальной диагностики используйте dnschecker.org и nslookup. 7. Лучшие практики по работе с DNS Планируйте изменения: Установите короткий TTL заранее. Используйте надёжные DNS: Публичные для стабильности, авторитативные от хостинга. Мониторьте: Регулярно проверяйте записи через сервисы. Безопасность: Включайте DNSSEC для защиты от подмены. Избегайте ошибок: Убедитесь, что все NS-серверы синхронизированы и отдают одинаковые данные.