节点操作系统加固:Linux系统安全基线、最小权限原则、SSH安全配置、防火墙规则

各位同学,今天我们来聊聊节点操作系统的加固。说实话,我见过太多区块链项目因为操作系统层面的疏漏被攻破。节点跑在Linux上,Linux本身是安全的,但默认配置往往不够。咱们得亲手把它拧紧。

核心思路:操作系统是节点的地基。地基不稳,上面跑再多智能合约审计、再多加密算法,都是白搭。

一、Linux系统安全基线

什么叫安全基线?说白了,就是一套「最低安全标准」。我习惯把基线分成三个层面:内核参数、系统服务、文件权限。

1.1 内核参数调优

内核参数里有些开关,默认是打开的,但对节点来说很危险。比如IP转发、ICMP重定向这些,攻击者可以利用它们做中间人攻击。

# 我常用的内核加固脚本片段
# 禁用IP转发
net.ipv4.ip_forward = 0
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 启用反向路径过滤(防IP欺骗)
net.ipv4.conf.all.rp_filter = 1
# 限制SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048

把这些参数写入 /etc/sysctl.d/99-hardening.conf,然后执行 sysctl -p 生效。嗯,这里要注意:改内核参数前最好先在测试环境跑一遍,别把生产节点的网络搞断了。

1.2 最小化系统服务

你想想看,一个区块链节点需要跑多少服务?其实只需要:SSH、节点客户端、监控代理。其他的一律关掉。

我的经验:我曾经接手过一个被入侵的节点,攻击者就是通过一个没用的CUPS打印服务进去的。从那以后,我每装一台新机器,第一件事就是跑 systemctl list-units --type=service --state=running,把不认识的服务全干掉。

# 禁用常见无用服务
systemctl disable cups.service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable postfix.service

1.3 文件权限基线

Linux文件权限,看似简单,但坑很多。我见过有人把私钥文件设成 chmod 777,理由是「方便备份」——这简直是给攻击者送大礼。

文件/目录 推荐权限 说明
/etc/shadow 600 密码哈希,只有root能读
/etc/ssh/sshd_config 600 SSH配置,防泄露
节点数据目录 700 只允许节点用户访问
私钥文件 400 只读,且只有所有者

二、最小权限原则

最小权限原则,说白了就是「给够用就行,多一分都不给」。我见过很多运维图省事,直接给节点进程开root权限。这非常危险——一旦节点进程被攻破,攻击者直接拿到整台机器的控制权。

2.1 创建专用用户

每个节点服务都应该有自己的系统用户。比如以太坊节点用 geth 用户,比特币节点用 bitcoin 用户。

# 创建专用用户,没有登录权限
useradd -r -s /sbin/nologin -m -d /var/lib/geth geth
# 设置目录权限
chown -R geth:geth /var/lib/geth
chmod 700 /var/lib/geth

避坑指南:我曾经见过有人用 useradd -M 不创建家目录,结果节点日志写不进去,排查了半天。所以记得加 -m 参数创建家目录。

2.2 使用sudo提权

如果节点进程需要执行某些特权操作(比如绑定低端口),不要直接给root,而是用sudo精确授权。

# 在 /etc/sudoers.d/ 下创建文件
# 允许geth用户执行特定命令
geth ALL=(root) NOPASSWD: /usr/bin/setcap
geth ALL=(root) NOPASSWD: /usr/bin/iptables

2.3 文件系统挂载选项

对于节点数据分区,我习惯加上 noexecnosuidnodev 这些挂载选项。这样即使攻击者上传了恶意文件,也没法执行。

# /etc/fstab 示例
/dev/sdb1 /var/lib/geth ext4 defaults,noexec,nosuid,nodev 0 2

三、SSH安全配置

SSH是节点管理的生命线,也是最常见的攻击入口。我每天都能在节点日志里看到成百上千次SSH暴力破解尝试。

3.1 核心配置项

打开 /etc/ssh/sshd_config,以下配置必须改:

# 禁用root直接登录
PermitRootLogin no
# 只允许密钥认证
PasswordAuthentication no
# 指定允许登录的用户
AllowUsers admin geth
# 修改默认端口(非必须,但能减少扫描)
Port 2222
# 限制登录尝试次数
MaxAuthTries 3
# 空闲超时断开
ClientAliveInterval 300
ClientAliveCountMax 2

我个人习惯:我会把SSH端口改到10000以上,虽然这不是真正的安全措施,但能过滤掉90%的自动化扫描脚本。剩下的10%,靠密钥认证和fail2ban来挡。

3.2 密钥管理

密钥认证比密码安全得多,但密钥本身也要保护好。我建议使用ED25519算法,比RSA更安全、性能更好。

# 生成ED25519密钥对
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
# 将公钥部署到节点
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@node-ip

3.3 使用fail2ban

fail2ban是个好东西,它能自动封禁暴力破解的IP。我所有节点都必装。

# 安装fail2ban
apt install fail2ban
# 配置SSH防护
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
EOF
systemctl restart fail2ban

四、防火墙规则

防火墙是节点的第一道防线。我习惯用iptables,虽然配置起来麻烦点,但可控性最强。当然,ufw也可以,看个人喜好。

4.1 默认策略

默认策略应该是「拒绝所有,放行必要」。这是安全的基本原则。

# 清空现有规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

4.2 放行必要端口

区块链节点需要开放的端口很少。以以太坊节点为例:

端口 协议 用途 建议
30303 TCP/UDP P2P节点通信 对全网开放
8545 TCP JSON-RPC API 仅内网或绑定localhost
2222 TCP SSH管理 仅白名单IP
# 放行SSH(仅限管理IP)
iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.0/24 -j ACCEPT
# 放行P2P端口
iptables -A INPUT -p tcp --dport 30303 -j ACCEPT
iptables -A INPUT -p udp --dport 30303 -j ACCEPT
# 放行已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 放行回环接口
iptables -A INPUT -i lo -j ACCEPT

避坑指南:我曾经在配置防火墙时,忘了放行回环接口,结果节点内部通信全断了,RPC调用全部超时。排查了半小时才发现是这个问题。所以 -i lo -j ACCEPT 这条一定要加。

4.3 使用ipset管理黑名单

对于频繁扫描的IP,我习惯用ipset做动态封禁,比iptables规则更高效。

# 创建ipset集合
ipset create blacklist hash:ip timeout 86400
# 添加封禁IP
ipset add blacklist 1.2.3.4
# 在iptables中引用
iptables -A INPUT -m set --match-set blacklist src -j DROP

五、知识体系总览

下面这张图,是我自己总结的节点操作系统加固框架。你可以把它当成一个检查清单,每加固一台节点,就对照着过一遍。

节点操作系统加固知识体系 安全基线 • 内核参数调优(禁用IP转发、ICMP重定向) • 最小化系统服务(关闭无用服务) • 文件权限基线(600/700/400) • 日志审计配置(rsyslog + auditd) • 定期漏洞扫描(CVE检查) 最小权限原则 • 创建专用系统用户(无登录权限) • 使用sudo精确提权 • 文件系统挂载选项(noexec等) • 进程能力限制(capabilities) • 容器化隔离(Docker/containerd) SSH安全配置 • 禁用root登录 + 密钥认证 • 修改默认端口 + 白名单IP • 限制登录尝试次数 • 部署fail2ban自动封禁 • 使用ED25519密钥算法 防火墙规则 • 默认策略:拒绝所有 • 放行必要端口(P2P/SSH/RPC) • 状态防火墙(ESTABLISHED) • 使用ipset动态黑名单 • 定期审计防火墙规则 节点

这张图把四个核心模块串起来了。你想想看,安全基线是「做什么」,最小权限是「怎么做」,SSH和防火墙是「怎么防」。四者缺一不可。

最后说一句:操作系统加固不是一次性工作。我每个月都会重新检查一遍配置,看看有没有新漏洞、有没有新服务被意外开启。安全是个持续的过程,不是一锤子买卖。


公众号:蓝海资料掘金营,微信deep3321