我已经在 Debian Linux Squeeze 机器上安装了 RabbitMQ,我希望它只收听 localhost 接口。我已经添加了
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
Run Code Online (Sandbox Code Playgroud)
到我的/etc/rabbitmq/rabbitmq.conf
文件,这使它在侦听amqp
端口 (5672)时仅绑定到 localhost 接口。但是,在侦听端口 epmd (4369) 和 43380 时,它仍然绑定到所有接口:
# lsof -n -a -i -urabbitmq
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
epmd 7353 rabbitmq 3u IPv4 1177662 0t0 TCP *:epmd (LISTEN)
epmd 7353 rabbitmq 5u IPv4 1177714 0t0 TCP 127.0.0.1:epmd->127.0.0.1:50877 (ESTABLISHED)
beam.smp 7365 rabbitmq 10u IPv4 1177711 0t0 TCP *:43380 (LISTEN)
beam.smp 7365 rabbitmq 11u IPv4 1177713 0t0 TCP 127.0.0.1:50877->127.0.0.1:epmd (ESTABLISHED)
beam.smp 7365 rabbitmq 19u IPv4 1177728 0t0 TCP 127.0.0.1:amqp (LISTEN)
Run Code Online (Sandbox Code Playgroud)
我如何防止这种情况?我是否必须设置 iptables,或者是否有额外的 RabbitMQ 配置选项可以让它做我想做的事?
小智 51
放入以下内容/etc/rabbitmq/rabbitmq-env.conf
将使 RabbitMQ 和 epmd 仅在本地主机上侦听:
export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1
Run Code Online (Sandbox Code Playgroud)
将 Erlang 配置为仅将 localhost 用于编号较高的端口(据我所知,它用于集群节点)需要做更多的工作。如果你不关心集群并且只希望 Rabbit 完全在本地运行,那么你可以向 Erlang 传递一个内核选项,让它只使用回送接口。
为此,请在其中创建一个新文件/etc/rabbitmq/
- 我将其称为rabbit.config
. 在这个文件中,我们将放置需要在运行时加载的 Erlang 选项。
[{kernel,[{inet_dist_use_interface,{127,0,0,1}}]}].
Run Code Online (Sandbox Code Playgroud)
如果您正在使用管理插件并且还想将其限制为本地主机,则需要单独配置其端口,使 rabbit.config 包含以下内容:
[
{rabbitmq_management, [
{listener, [{port, 15672}, {ip, "127.0.0.1"}]}
]},
{kernel, [
{inet_dist_use_interface,{127,0,0,1}}
]}
].
(注意 RabbitMQ 在关闭时让 epmd 继续运行,因此如果您想阻止 Erlang 的集群端口,则需要与 Rabbit 分开重新启动 epmd。)
接下来我们需要让 RabbitMQ 在启动时加载它。/etc/rabbitmq/rabbitmq.conf
再次打开并将以下内容放在顶部:
export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"
Run Code Online (Sandbox Code Playgroud)
这会在兔子服务器启动时加载该配置文件,并将选项传递给 Erlang。
您现在应该让所有 Erlang/RabbitMQ 进程只在 localhost 上侦听!这可以检查netstat -ntlap
编辑:在较旧版本的 RabbitMQ 中,配置文件是 : /etc/rabbitmq/rabbitmq.conf
。但是,该文件已被该文件替换rabbit-env.conf
。
小智 14
要使 RabbitMQ 侦听 localhost / 仅绑定到 localhost:
3种不同的方式(所有等价的):
将 NODE_IP_ADDRESS=127.0.0.1 放在环境变量文件中(参见http://www.rabbitmq.com/configure.html#define-environment-variables)
将 tcp_listeners 和 ssl_listeners 属性放在配置文件中:配置条目 tcp_listeners 和 ssl_listeners 管理 RabbitMQ 侦听的接口。仅在 localhost 上侦听的条目将是例如 {tcp_listeners, [{'127.0.0.1', 5672}]} (语法可能不正确,请检查) http://www.rabbitmq.com/configure.html#配置文件
导出环境。启动脚本中的变量(/etc/init.d/rabbitmq-server)export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
后者为我工作。
环保署:
Epmd 程序使 Erlang 运行时的分布式部分工作。如果你正在构建一个多机集群,你需要让其他节点和本地主机可以访问它们。但它通过 cookie 文件具有内置保护。
它几乎不需要任何关注。请记住,erlang 程序(例如,包括 rabbitmqctl)需要访问该端口以联系其他 erlang 程序。
但是,如果您正在处理财务数据或健康记录,保护 epmd 可能是一个好主意。epmd 使用的默认端口是 4369,其他程序通过 tcp 连接到它。
另见:http : //www.erlang.org/doc/man/epmd.html#environment_variables
如果您需要进一步保护 RabbitMQ,
禁用内置访客账户 http://www.rabbitmq.com/admin-guide.html#default-state
考虑使用 SSL 并使用证书链进行身份验证
我从 RabbitMQ 社区 IRC 频道得到了这些答案。
想感谢他们。
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
希望以上内容能为您节省一些时间(我花了 6 个小时才找到答案)。
归档时间: |
|
查看次数: |
52480 次 |
最近记录: |