Erlang如何限制节点对集群的访问之net_kernel:allow
来源:互联网 发布:网络摄像头电源多少伏 编辑:程序博客网 时间:2024/04/27 22:12
本文转载自yufeng.info
默认情况下Erlang的集群访问是全授权的,只要cookie认证过了后,新加入的节点可以访问集群里面的任何机器,这给运维带来很大风险。目前erlang有二种方法可以限制 1. IP网段限制,参看这里 2. 节点名称限制。这个是通过net_kernel:allow来实现的,参看:
allow/1
Limits access to the specified set of nodes. Any access attempts made from (or to) nodes not in Nodes will be rejected.Returns error if any element in Nodes is not an atom.
我们假设集群有节点x,y,z, foo:
1. 有个节点叫foo, 它只允许来自x,y节点的请求,其他的节点访问被拒;
2. z只能访问x,其他拒
我们来试验下:
$ erl -name foo@127.0.0.1
Erlang R14B04 (erts-5.8.5) 1 [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:
false
]
Eshell V5.8.5 (abort with ^G)
(foo@127.0.0.1)1> net_kernel:allow([
'x@127.0.0.1'
,
'y@127.0.0.1'
]).
ok
(foo@127.0.0.1)2>
在其他终端运行:
$ erl -name x@127.0.0.1
Erlang R14B04 (erts-5.8.5) 1 [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:
false
]
Eshell V5.8.5 (abort with ^G)
(x@127.0.0.1)1> net_adm:
ping
(
'foo@127.0.0.1'
).
pong
(x@127.0.0.1)2>
$ erl -name y@127.0.0.1
Erlang R14B04 (erts-5.8.5) 1 [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:
false
]
Eshell V5.8.5 (abort with ^G)
(y@127.0.0.1)1> net_adm:
ping
(
'foo@127.0.0.1'
).
pong
(y@127.0.0.1)2>
$ erl -name z@127.0.0.1
Erlang R14B04 (erts-5.8.5) 1 [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:
false
]
Eshell V5.8.5 (abort with ^G)
(z@127.0.0.1)1> net_adm:
ping
(
'foo@127.0.0.1'
).
pang
(z@127.0.0.1)2> net_adm:
ping
(
'y@127.0.0.1'
).
pong
(z@127.0.0.1)3> net_kernel:disconnect(
'y@127.0.0.1'
).
true
(z@127.0.0.1)4> net_kernel:allow([
'x@127.0.0.1'
]).
ok
(z@127.0.0.1)5> net_adm:
ping
(
'y@127.0.0.1'
).
=ERROR REPORT==== 24-Oct-2011::01:23:34 ===
** Connection attempt with disallowed node
'y@127.0.0.1'
**
pang
同时我们会在foo的终端上看到:
=ERROR REPORT==== 24-Oct-2011::01:08:20 ===
** Connection attempt from disallowed node
'z@127.0.0.1'
**
(foo@127.0.0.1)2>
看代码:
...
%% dist_util.erl
%%
%% check if connecting node is allowed to connect
%% with allow-node-scheme
%%
is_allowed(#hs_data{other_node =
Node
,
allowed =
Allowed
} =
HSData
) ->
case
lists:member
(
Node
,
Allowed
)
of
false
when
Allowed
=/= [] ->
send_status(
HSData
, not_allowed),
error_msg(
"** Connection attempt from "
"disallowed node ~w ** ~n"
, [
Node
]),
?shutdown
(
Node
);
_ -> true
end
.
...
可以知道如果Allowed空的话,代表不做任何限制,否则net_kernel:allow限制主动和被动连接的节点。
祝玩得开心!
- Erlang如何限制节点对集群的访问之net_kernel:allow
- erlang集群IP段限制
- erlang不同节点进程如何通讯的
- python爬虫之requests对https的限制访问
- net_kernel的一些细节
- Erlang的系统限制
- Erlang节点的连接
- Erlang的hidden节点
- Erlang节点的连接
- 限制对Web资源的访问
- springsecurity 对特定方法访问的限制
- Adam学习10之集群节点的内存对运行时间的影响
- 如何解决 Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 如何解决 Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- JAVA之Jedis 对 Redis客户端分布式与节点集群两者的区别
- 关于JAVA之访问限制错误:由于对必需的库具有一定限制,因此无法访问类型
- Android 在 SElinux下 如何获得对一个内核节点的访问权限
- Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
- linux网桥浅析
- 举例说明android进行初始化组件并设置组件属性的简便方法
- 康宁的玻璃愿景
- (笔记)分配和释放虚拟内存
- PHP开发宝典-PHP基础
- Erlang如何限制节点对集群的访问之net_kernel:allow
- C#连接数据库
- 经理回复我的一封信
- HNOI2004宠物收养所
- 强大的批量shell命令
- 锁
- seq_trace集群消息链跟踪利器
- ubuntu下搭建tftp---终于有个靠谱的了
- android 问题列表