Hadoop 集群安全与时间同步配置指南
1. 防火墙配置
1.1 检查防火墙状态(所有节点)
# Ubuntu/Debian
sudo ufw status
# CentOS/RHEL
sudo firewall-cmd --state
1.2 配置防火墙规则(CentOS/RHEL)
# 添加 Hadoop 所需端口
sudo firewall-cmd --permanent --add-port=8020/tcp # NameNode
sudo firewall-cmd --permanent --add-port=9000/tcp # NameNode
sudo firewall-cmd --permanent --add-port=50070/tcp # NameNode Web UI
sudo firewall-cmd --permanent --add-port=50470/tcp # NameNode HTTPS
sudo firewall-cmd --permanent --add-port=50090/tcp # Secondary NameNode
sudo firewall-cmd --permanent --add-port=50075/tcp # DataNode
sudo firewall-cmd --permanent --add-port=50475/tcp # DataNode HTTPS
sudo firewall-cmd --permanent --add-port=50010/tcp # DataNode
sudo firewall-cmd --permanent --add-port=50020/tcp # DataNode
sudo firewall-cmd --permanent --add-port=8088/tcp # ResourceManager
sudo firewall-cmd --permanent --add-port=8030-8033/tcp # ResourceManager
sudo firewall-cmd --permanent --add-port=8040-8042/tcp # NodeManager
sudo firewall-cmd --permanent --add-port=10020/tcp # JobHistoryServer
sudo firewall-cmd --permanent --add-port=19888/tcp # JobHistoryServer Web UI
sudo firewall-cmd --permanent --add-port=22/tcp # SSH
# 重新加载防火墙
sudo firewall-cmd --reload
# 查看已开放端口
sudo firewall-cmd --list-ports
1.3 配置防火墙规则(Ubuntu/Debian)
# 启用防火墙
sudo ufw enable
# 开放 Hadoop 所需端口
sudo ufw allow 8020/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 50070/tcp
sudo ufw allow 50470/tcp
sudo ufw allow 50090/tcp
sudo ufw allow 50075/tcp
sudo ufw allow 50475/tcp
sudo ufw allow 50010/tcp
sudo ufw allow 50020/tcp
sudo ufw allow 8088/tcp
sudo ufw allow 8030:8033/tcp
sudo ufw allow 8040:8042/tcp
sudo ufw allow 10020/tcp
sudo ufw allow 19888/tcp
sudo ufw allow 22/tcp
# 查看防火墙状态
sudo ufw status numbered
2. SELinux 配置
2.1 检查 SELinux 状态(CentOS/RHEL)
# 查看当前 SELinux 状态
getenforce
# 查看 SELinux 模式
sestatus
2.2 临时修改 SELinux 模式
# 临时设置为宽松模式
sudo setenforce 0
# 临时设置为强制模式
sudo setenforce 1
2.3 永久修改 SELinux 配置
# 编辑 SELinux 配置文件
sudo vim /etc/selinux/config
# 修改为以下内容
SELINUX=permissive
# 或者完全禁用
SELINUX=disabled
# 重启系统使配置生效
sudo reboot
2.4 Hadoop 相关 SELinux 配置
# 如果保持 SELinux 启用,需要设置以下布尔值
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P nis_enabled 1
3. 时间同步配置(NTP/Chrony)
3.1 安装时间同步服务
CentOS 8/RHEL 8 及更新版本(使用 chrony):
sudo yum install chrony -y
CentOS 7/RHEL 7:
sudo yum install ntp -y
Ubuntu/Debian:
sudo apt update
sudo apt install ntp -y
3.2 配置时间同步服务
3.2.1 使用 chrony
编辑配置文件
"/etc/chrony.conf":
sudo vim /etc/chrony.conf
# 添加或修改以下内容(使用国内NTP服务器)
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
# 允许本地网络同步(如果有内部NTP服务器)
# allow 192.168.1.0/24
启动并启用服务:
sudo systemctl start chronyd
sudo systemctl enable chronyd
3.2.2 使用 ntpd
编辑配置文件
"/etc/ntp.conf":
sudo vim /etc/ntp.conf
# 添加或修改以下内容
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
# 限制访问
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
启动并启用服务:
sudo systemctl start ntpd
sudo systemctl enable ntpd
3.3 验证时间同步
chrony 验证:
# 查看时间同步状态
chronyc tracking
chronyc sources -v
# 手动同步时间
sudo chronyc -a makestep
ntpd 验证:
# 查看时间同步状态
ntpq -p
# 查看同步状态
ntpstat
3.4 集群内时间同步
如果无法访问外网,可以设置一个内部主节点作为时间服务器:
在主节点上:
# 编辑 chrony.conf
sudo vim /etc/chrony.conf
# 添加
local stratum 10
allow 192.168.1.0/24
# 重启服务
sudo systemctl restart chronyd
在从节点上:
# 编辑 chrony.conf
sudo vim /etc/chrony.conf
# 注释掉原有 server 行,添加
server hadoop-master iburst
# 重启服务
sudo systemctl restart chronyd
4. 验证集群配置
4.1 防火墙验证
# 检查开放的端口
sudo firewall-cmd --list-ports # CentOS
sudo ufw status # Ubuntu
# 测试端口连通性
telnet hadoop-master 8020
nc -zv hadoop-master 9000
4.2 SELinux 验证
# 检查当前模式
getenforce
# 检查布尔值设置
getsebool -a | grep httpd
getsebool -a | grep nis
4.3 时间同步验证
# 检查时间同步状态
chronyc tracking || ntpstat
# 检查各节点时间差异
for node in hadoop-master hadoop-slave1 hadoop-slave2; do
echo "$node: $(ssh $node date)"
done
# 手动同步时间
sudo chronyc -a makestep || sudo ntpdate ntp.aliyun.com
5. 常见问题解决
5.1 防火墙阻止 Hadoop 服务
# 查看被拒绝的连接
sudo journalctl -xe | grep firewall
sudo grep DROP /var/log/syslog # Ubuntu
sudo grep DROP /var/log/messages # CentOS
# 临时禁用防火墙进行测试
sudo systemctl stop firewalld # CentOS
sudo ufw disable # Ubuntu
5.2 SELinux 阻止 Hadoop 进程
# 查看 SELinux 日志
sudo ausearch -m avc -ts recent
# 临时设置为宽松模式进行测试
sudo setenforce 0
5.3 时间同步失败
# 检查服务状态
sudo systemctl status chronyd || sudo systemctl status ntpd
# 检查网络连通性
ping ntp.aliyun.com
# 手动同步时间
sudo chronyc -a makestep || sudo ntpdate ntp.aliyun.com
# 检查时间偏差
timedatectl
6. 最佳实践建议
1. 防火墙:
- 生产环境中建议保持防火墙开启
- 只开放必要的 Hadoop 服务端口
- 考虑使用更细粒度的 zone 配置(CentOS)
2. SELinux:
- 生产环境建议保持 SELinux 为 enforcing 模式
- 使用
"audit2allow" 生成自定义策略而非完全禁用
- 定期检查 SELinux 日志
3. 时间同步:
- 确保所有节点时间偏差在几毫秒内
- 使用可靠的 NTP 服务器源
- 考虑部署本地 NTP 服务器减少外网依赖
4. 安全加固:
- 定期更新系统和安全补丁
- 限制 SSH 访问(仅允许密钥认证)
- 监控系统日志和安全事件
更多推荐


所有评论(0)