Назови случаи, когда открываешь UDP порты.

«Назови случаи, когда открываешь UDP порты.» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

UDP порты открывают для сервисов, где критически важны низкая задержка (latency) и скорость передачи, а надёжность доставки каждого пакета — второстепенна, либо управляется на уровне приложения.

Основные случаи:

1. Сервисы разрешения имён и конфигурации:

  • DNS (Domain Name System): :53. Запросы небольшие и должны обрабатываться быстро; TCP используется только для больших зонных трансферов.
  • DHCP (Dynamic Host Configuration Protocol): :67 (сервер), :68 (клиент). Работает через broadcast до получения IP.
  • mDNS (Multicast DNS) / Bonjour: :5353 для обнаружения сервисов в локальной сети.

2. Стриминг медиа и VoIP:

  • Голос и видео (WebRTC, SIP, Zoom, Teams): Используют широкий диапазон портов. Потеря нескольких пакетов менее заметна для пользователя, чем задержка из-за повторной передачи TCP.
  • Мониторинг в реальном времени: Передача метрик от агентов (например, старый формат StatsD).

3. Сетевые протоколы точного времени:

  • NTP (Network Time Protocol): :123. Небольшие периодические пакеты для синхронизации часов.
  • PTP (Precision Time Protocol): Для микросекундной точности в финансовых и промышленных системах.

4. Онлайн-игры и интерактивные приложения:

  • Игровые серверы часто используют UDP для передачи состояния мира и действий игроков, чтобы минимизировать lag.

5. Трансляция трафика (Multicast):

  • Стриминг видео/аудио: Multicast-рассылка на множество получателей.
  • Финансовые данные: Распространение котировок на биржах.

Пример настройки правила для мониторинга (Prometheus Node Exporter для StatsD):

# iptables правило для приёма UDP-метрик на порту 8125
sudo iptables -A INPUT -p udp --dport 8125 -s 10.0.1.0/24 -j ACCEPT

# Аналогичное правило для firewalld (RHEL/CentOS)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.1.0/24" port port="8125" protocol="udp" accept'

Важно: Так как UDP — протокол без состояния, правила фаервола для него обычно проще, но это также делает его уязвимым для амплификационных DDoS-атак (например, через DNS). Мы всегда ограничиваем источники трафика и рассматриваем использование решений для защиты (AWS Shield, Cloudflare).