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 позволяет:
- Просматривать и **читать/удалять очереди** с бизнес-сообщениями
- **Публиковать сообщения** в любую очередь (компрометация бизнес-процессов)
- Создавать новых пользователей с правами administrator
- Раскрыть имена очередей, Exchange'ей, vhost — полную топологию messaging
Что может сделать атакующий
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
Связанные статьи
- [Container public ports inventory](/kb/server_hardening/container-public-ports-inventory)
- [UFW firewall](/kb/firewall/ufw-basic-server-firewall)