Port 4369 is the Erlang Port Mapper Daemon (EPMD) – a name service for Erlang and Elixir nodes. RabbitMQ depends on EPMD for cluster node discovery. If port 4369 is blocked between RabbitMQ nodes, cluster formation fails. EPMD should be firewalled from public access – it exposes information about all running Erlang nodes.
Port Number
4369
Protocol
TCP
Service
Erlang Port Mapper Daemon
Range
IANA Registered (1024–49151)
List all Erlang nodes registered with local EPMD (shows node names + dynamic ports)
epmd -namesQuery remote EPMD to discover registered nodes (should fail if firewalled)
epmd -port 4369 -names -address 10.0.1.5Show RabbitMQ cluster members and their connectivity (requires running node)
rabbitmqctl cluster_statusVerify EPMD is listening and which process owns it
ss -tlnp | grep 4369epmd -names
curl http://localhost:15672/api/nodesEPMD was created as part of Erlang/OTP (Open Telecom Platform) at Ericsson in the late 1980s. Port 4369 was registered with IANA for Erlang distribution. EPMD is a simple name server that maps symbolic node names (rabbit@hostname) to TCP ports. When RabbitMQ starts, it registers with EPMD and gets a dynamic port for the distribution protocol. Modern alternatives (Kubernetes DNS-based peer discovery) can eliminate EPMD in container environments.
Can I run RabbitMQ without EPMD?
Since Erlang/OTP 23.1 and RabbitMQ 3.9+, you can use the 'epmd-less' peer discovery by setting RABBITMQ_DIST_PORT to a fixed port and using -proto_dist inet_tls. However, this is not widely documented and most deployments still use EPMD. In Kubernetes, the rabbitmq-peer-discovery-k8s plugin uses DNS for discovery but still requires EPMD for the actual distribution connection.
How do I secure the Erlang cookie?
Set a strong random cookie: head -c 64 /dev/urandom | base64 | tr -d '\n' > /var/lib/rabbitmq/.erlang.cookie && chmod 400 /var/lib/rabbitmq/.erlang.cookie. Never use the default cookie. Ensure all cluster nodes share the same cookie value (deploy via secrets management, not in config files). Enable Erlang distribution TLS (inet_dist_use_interface, server_dist_tls in vm.args) for encryption.