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

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

Ответ

Открытие TCP портов на фаерволе или security group в облаке требуется для обеспечения сетевого доступа к сервисам, которые используют протокол TCP с установлением соединения. Основные случаи:

1. Доступ к публичным сервисам приложения:

  • Веб-серверы: :80 (HTTP), :443 (HTTPS).
  • API-шлюзы / балансировщики: Часто на стандартных портах или нестандартных (например, :8080, :8443).

2. Удалённое управление и администрирование:

  • SSH (Secure Shell): :22 для безопасного доступа к серверам.
  • RDP (Remote Desktop Protocol): :3389 для управления Windows-серверами.

3. Доступ к внутренним сервисам в защищённом периметре (VPC/Private Subnet):

  • Базы данных: :5432 (PostgreSQL), :3306 (MySQL), :27017 (MongoDB), :6379 (Redis).
  • Брокеры сообщений: :5672 (AMQP/RabbitMQ), :9092 (Kafka).
  • Кэши и хранилища: :11211 (Memcached).

4. Мониторинг и сбор метрик:

  • Prometheus: :9090 для доступа к UI и API.
  • Базы данных временных рядов: :8086 (InfluxDB), :4242 (QuestDB).

5. Оркестрация и управление инфраструктурой:

  • Kubernetes API Server: :6443.
  • Docker Daemon (с осторожностью, обычно через SSH): :2376 (TLS).

Пример настройки в AWS Security Group (Terraform):

resource "aws_security_group_rule" "app_https" {
  type              = "ingress"
  from_port         = 443
  to_port           = 443
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"] # На практике сужаем до IP клиентов или CDN
  security_group_id = aws_security_group.app.id
  description       = "Allow HTTPS from internet"
}

resource "aws_security_group_rule" "internal_postgres" {
  type                     = "ingress"
  from_port                = 5432
  to_port                  = 5432
  protocol                 = "tcp"
  source_security_group_id = aws_security_group.application_servers.id
  security_group_id        = aws_security_group.database.id
  description              = "Allow Postgres from app servers"
}

Принцип минимальных привилегий: Мы всегда открываем порты только для конкретных источников (IP, Security Groups), а не для 0.0.0.0/0, где это не требуется бизнес-логикой.