Ответ
Открытие 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, где это не требуется бизнес-логикой.