在 Linux 上给 HDFS(Hadoop 分布式文件系统)配置防火墙,核心思路是:
只开放 HDFS 需要的端口,限制来源 IP(尤其是 NameNode / DataNode 端口)。
下面按常见场景说明。
| 组件 | 端口 | 说明 |
|---|---|---|
| NameNode | 8020 / 9000 | HDFS RPC |
| NameNode Web UI | 9870 | HDFS UI(Hadoop 3) |
| DataNode | 9864 | 数据传输 |
| DataNode Web UI | 9865 | DataNode UI |
| SecondaryNameNode | 9868 | 辅助 NameNode |
| YARN(如启用) | 8088 | ResourceManager UI |
Hadoop 2 用 50070 / 50075 / 50470 等端口
systemctl enable firewalld
systemctl start firewalld
# NameNode
firewall-cmd --permanent --add-port=8020/tcp
firewall-cmd --permanent --add-port=9870/tcp
# DataNode
firewall-cmd --permanent --add-port=9864/tcp
firewall-cmd --permanent --add-port=9865/tcp
# SecondaryNameNode
firewall-cmd --permanent --add-port=9868/tcp
# 只允许集群内网访问
firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="192.168.10.0/24"
port protocol="tcp" port="9870" accept'
firewall-cmd --reload
iptables -A INPUT -p tcp --dport 9870 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 8020 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 9864 -j ACCEPT
iptables -A INPUT -p tcp --dport 9864 -s 0.0.0.0/0 -j DROP
保存规则(CentOS):
service iptables save
防火墙不能代替 Hadoop 安全机制
hdfs-site.xml
<property>
<name>dfs.namenode.rpc-bind-host</name>
<value>192.168.10.10</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.principal</name>
</property>
✅ 集群内部:全端口互通
❌ 外部:只开放 必要端口(如 9870 给运维)
❌ 禁止公网暴露 NameNode RPC
# 查看端口监听
netstat -tunlp | grep java
# 测试端口
telnet namenode 9870
如果你告诉我:
我可以给你一套 可直接复制的防火墙脚本。