Linux服务器安全加固的核心思路
服务器暴露在公网上的每一秒都在承受扫描和攻击尝试。安全加固不是一次性操作,而是建立纵深防御体系:网络层限制访问入口,系统层减少攻击面,应用层控制权限边界,审计层留存操作痕迹。这套组合策略远比依赖单一防火墙规则可靠。
SSH安全加固:堵住最大的攻击入口
SSH是Linux服务器被暴力破解最多的服务。加固SSH需要从认证方式和访问控制两个维度同时入手:
# /etc/ssh/sshd_config 安全配置
Port 2222 # 修改默认端口,规避自动化扫描
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes # 启用密钥认证
MaxAuthTries 3 # 最大认证尝试次数
LoginGraceTime 30 # 登录超时时间
AllowUsers deploy admin # 白名单用户
AllowGroups ssh-users # 白名单用户组
# 重启sshd生效
systemctl restart sshd
密钥认证配置中,ed25519算法比RSA更安全且密钥更短:
# 客户端生成ed25519密钥
ssh-keygen -t ed25519 -C "deploy@prod-01" -f ~/.ssh/id_ed25519
# 将公钥部署到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 deploy@server-ip
# 服务器端确认authorized_keys权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
fail2ban自动封禁暴力破解IP
SSH加固后仍需应对分布式暴力破解。fail2ban通过解析日志自动识别并封禁异常IP:
# 安装fail2ban
apt install fail2ban -y # Debian/Ubuntu
yum install fail2ban -y # CentOS/RHEL
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
action = iptables-multiport[name=sshd, port="2222", protocol=tcp]
[sshd-aggressive]
enabled = true
port = 2222
filter = sshd[mode=aggressive]
logpath = /var/log/auth.log
maxretry = 2
findtime = 300
bantime = 604800
systemctl enable fail2ban
systemctl start fail2ban
# 查看封禁状态
fail2ban-client status sshd
iptables/nftables防火墙规则配置
防火墙规则遵循最小暴露原则:只开放业务必需的端口,拒绝一切默认入站流量:
# nftables配置 (/etc/nftables.conf)
table inet firewall {
chain input {
type filter hook input priority 0; policy drop;
# 允许回环
iif lo accept
# 允许已建立连接
ct state established,related accept
# 允许ICMP (限速)
ip protocol icmp limit rate 5/second accept
# SSH - 仅允许管理网段
ip saddr 10.0.1.0/24 tcp dport 2222 accept
# HTTP/HTTPS
tcp dport { 80, 443 } accept
# 记录被拒绝的连接
log prefix "nftables-drop: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
systemctl enable nftables
systemctl restart nftables
内核参数安全调优
内核参数调优是容易被忽略的加固层,通过sysctl配置可以阻断多种网络层攻击:
# /etc/sysctl.d/99-security.conf
# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0
# SYN Flood防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 连接追踪优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# 禁用核心转储(防止信息泄露)
fs.suid_dumpable = 0
# ASLR增强
kernel.randomize_va_space = 2
# 生效
sysctl --system
文件系统权限与敏感目录防护
权限控制是纵深防御的最后一道屏障。关键目录和文件的权限必须严格限制:
# 关键文件权限设置
chmod 600 /etc/shadow
chmod 600 /etc/gshadow
chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 700 /root
chmod 700 /home/deploy
# 禁用不必要的SUID/SGID二进制
find / -perm -4000 -type f 2>/dev/null > /root/suid_files.txt
# 移除常见被利用的SUID权限(谨慎操作)
chmod u-s /usr/bin/chsh
chmod u-s /usr/bin/chfn
# 设置不可变属性保护关键文件
chattr +i /etc/passwd
chattr +i /etc/shadow
# 需要修改时先 chattr -i 解除
# /tmp安全挂载选项(/etc/fstab)
# tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
审计日志与入侵检测
审计系统记录所有敏感操作,是事后追溯和实时告警的基础:
# 安装auditd
apt install auditd -y
# 关键审计规则 /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/sudoers -p wa -k sudoers
-a always,exit -F arch=b64 -S mount -k mount
-a always,exit -F arch=b64 -S init_module -k kernel_module
-a always,exit -F arch=b64 -S delete_module -k kernel_module
# 搜索审计日志
ausearch -k sshd_config -ts recent
aureport -f
# 安装rkhunter做根kit检测
apt install rkhunter -y
rkhunter --update
rkhunter --check --skip-keypress
安全加固完成后,定期检查是保持安全状态的关键。建议建立cron任务,每周自动运行安全扫描,审计日志转发到集中式日志平台做实时分析。服务器安全不是配置完成就结束,而是一个持续的对抗过程。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-zhan-cong-ssh-fang-hu-dao/