首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使RabbitMQ只听本地主机?

如何使RabbitMQ只听本地主机?
EN

Server Fault用户
提问于 2011-02-15 12:28:27
回答 5查看 60.5K关注 0票数 47

我已经在Debian压缩机上安装了RabbitMQ,我希望它只听本地主机接口。我增加了

代码语言:javascript
复制
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

到我的/etc/rabbitmq/rabbitmq.conf文件,这使得它在侦听amqp端口(5672)时只绑定到本地主机接口。但是,当侦听端口epmd (4369)和43380时,它仍然绑定到所有接口:

代码语言:javascript
复制
# 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)

我怎么才能防止这件事?我是否必须设置iptable,或者是否有其他的RabbitMQ配置选项可以使它做我想做的事情?

EN

回答 5

Server Fault用户

回答已采纳

发布于 2011-10-06 17:54:34

/etc/rabbitmq/rabbitmq-env.conf中放置以下内容将使RabbitMQ和epmd只在本地主机上侦听:

代码语言:javascript
复制
export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1

要将Erlang配置为只对编号较高的端口使用localhost (据我所知,该端口用于集群节点)需要做更多的工作。如果您不关心集群,只希望兔子在本地完全运行,那么您可以为Erlang传递一个内核选项,以便它只使用回送接口。

为此,在/etc/rabbitmq/中创建一个新文件--我将称之为rabbit.config。在这个文件中,我们将放置运行时需要加载的Erlang选项。

代码语言:javascript
复制
[{kernel,[{inet_dist_use_interface,{127,0,0,1}}]}].

如果您正在使用管理插件,并且还希望将其限制在本地主机上,则需要分别配置其端口,使rabbit.config包括以下内容:

[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].

(注意,当epmd关闭时,RabbitMQ将继续运行,因此,如果您想阻止Erlang的集群端口,则需要与兔子分别重新启动epmd。)

接下来,我们需要让RabbitMQ在启动时加载它。再次打开/etc/rabbitmq/rabbitmq.conf,并将以下内容放在顶部:

代码语言:javascript
复制
export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

这将在兔子服务器启动时加载该配置文件,并将这些选项传递给Erlang。

现在应该让所有Erlang/RabbitMQ进程只在localhost上侦听!这可以用netstat -ntlap进行检查。

编辑:在较早版本的RabbitMQ中,配置文件是:/etc/rabbitmq/rabbitmq.conf。但是,该文件已被rabbit-env.conf文件替换。

票数 52
EN

Server Fault用户

发布于 2011-06-15 06:43:50

使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#config-file
  • 出口env。变量在启动脚本(/etc/init.d/rabbitmq-server)中导出RABBITMQ_NODE_IP_ADDRESS=127.0.0.1。

后者为我工作。

EPMD:

Epmd程序使Erlang运行时的分布式部分工作。如果您正在构建一个多机器集群,则需要让其他节点(当然还有本地主机)可以访问它们。但它通过cookie文件进行了内置保护。

它几乎不需要任何关注。请记住,erlang程序(例如,包括rabbitmqctl )需要访问该端口才能与其他erlang程序联系。

但是,如果您正在处理财务数据或健康记录,保护epmd可能是一个好主意。默认端口epmd使用的是4369,其他程序通过tcp连接到它。

另见:http://www.erlang.org/doc/man/epmd.html#environment_变量

如果您需要进一步保护RabbitMQ,

  1. 禁用内置的来宾帐户http://www.rabbitmq.com/admin-guide.html#default-state
  2. 考虑使用SSL并使用证书链进行身份验证。

我从RabbitMQ社区IRC频道得到了这些答案。

我想感谢他们。

http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14

希望上面的内容能为你节省一些时间(我花了6个小时才找到答案)。

票数 14
EN

Server Fault用户

发布于 2011-02-15 13:25:55

如果在rabbitmq.conf文件中指定环境变量,则必须删除RABBITMQ_前缀,因此请尝试:

NODE_IP_ADDRESS=127.0.0.1

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/235669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档