Knowledge Base

RabbitMQ Management Console открыта публично (порт 15672)

RabbitMQ Management Console открыта публично — Collapse Point

Категория: Server Hardening · Риск: critical

RabbitMQ Management Console открыта публично — Collapse Point

Критическая угроза

RabbitMQ Management Plugin (`http://host:15672`) открыт публично.

**Дефолтные учётные данные**: `guest` / `guest` — но они работают только с localhost. Однако публичный доступ к Management API позволяет:

Что может сделать атакующий

GET http://<IP>:15672/api/overview         → версия RabbitMQ, кол-во сообщений
GET http://<IP>:15672/api/queues           → список всех очередей
GET http://<IP>:15672/api/connections      → активные соединения
DELETE http://<IP>:15672/api/queues/%2F/<name>  → удалить очередь
POST http://<IP>:15672/api/exchanges/.../publish → опубликовать сообщение

Исправление

1. Закрыть порт 15672 файрволом (первый шаг)

ufw deny 15672
ufw allow from 127.0.0.1 to any port 15672
ufw reload

2. Привязать Management Plugin к localhost

# /etc/rabbitmq/rabbitmq.conf
management.listener.ip   = 127.0.0.1
management.listener.port = 15672
systemctl restart rabbitmq-server

3. Docker Compose — убрать проброс порта

# НЕПРАВИЛЬНО:
services:
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "15672:15672"  # ← УБРАТЬ
      - "5672:5672"    # ← ТОЖЕ закрыть если не нужно публично

# ПРАВИЛЬНО:
services:
  rabbitmq:
    image: rabbitmq:3-management
    expose:
      - "5672"
      - "15672"
    ports:
      - "127.0.0.1:15672:15672"  # только для локального доступа

4. Сменить дефолтный пароль guest

rabbitmqctl change_password guest 'StrongPassword123!'

# Или удалить guest полностью и создать нового:
rabbitmqctl delete_user guest
rabbitmqctl add_user admin 'StrongPassword123!'
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

5. Nginx Basic Auth для Management UI (если нужен публичный доступ)

location /rabbitmq/ {
    auth_basic "RabbitMQ — Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://127.0.0.1:15672/;
    proxy_set_header Host $host;
}

Проверка

# Должно вернуть Connection refused
curl -I http://<PUBLIC_IP>:15672/

# Локально — должно работать с паролем
curl -u admin:StrongPassword http://127.0.0.1:15672/api/overview

Связанные статьи