我正试图控制对Cassandra数据库的访问,使其只能从特定主机访问(拒绝未配置主机的访问(,我在Cassandra.yaml文件中有以下配置:-
start_rpc: true
rpc_address: 0.0.0.0
broadcast_rpc_address: x.x.x.x
rpc_port:9160
这些配置是否正确或缺少什么?还有其他方法可以从特定主机访问Cassandra吗
不确定您使用的是哪种版本的Cassandra,但9160适用于节俭协议连接。它在Cassandra 3.0中被弃用,在Cassandra4.0中被删除。
如果是我,我会通过设置start_rpc: false
来关闭访问通道。
所有客户端连接请求都应在端口9042上使用CQL本地二进制协议(9142,如果v4.0+中使用客户端到节点SSL(。
控制对Cassandra数据库的访问,使其只能从特定主机访问
为此,您的最佳选择是在每个节点上使用iptables
进行筛选。这里有一个详细介绍如何做到这一点的资源。基本上,您需要在集群中的每个节点上ACCEPT
连接到/来自每个IP地址:
允许来自192.168.0.1的传入连接,仅在端口9042:上
iptables -A INPUT -s 192.168.0.1 --dport 9042 -j ACCEPT
允许传出连接返回192.168.0.1:
iptables -A OUTPUT -d 192.168.0.1 -j ACCEPT
我想回应Aaron的评论。Thrift在2012年被CQL取代。2014年,Cassandra工具中对Thrift的支持被取消(Cassandra-8358(,自Cassandra 2.2(Cassandra-9319(以来,Thrift RPC服务器默认被禁用。
Thrift客户的开发也在近10年前停止。Nate McCall是Cassandra项目的现任主席,也是Hector客户端的作者,他在2015年关闭了该项目,转而使用Java驱动程序,所以我不再使用Thrift。
您应该配置CQL本机传输服务器,而不是Thrift服务器。以下是您应该在cassandra.yaml
:中关注的属性
listen_address: private_ip
rpc_address: public_ip
native_transport_port: 9042
如果节点只有一个IP地址,则可以将其用于listen_address
和rpc_address
。除非您有一个复杂的网络拓扑,节点只能使用公共IP地址与远程DC中的节点进行通信,否则实际上没有必要使用broadcast_address
,例如EC2多区域部署。
你的问题不是关于卡桑德拉,而是关于人际关系。您需要与网络管理员交谈,以将防火墙配置为只允许从应用程序服务器连接到端口9042
。干杯