服务器安全加固的纵深防御思路
服务器安全加固不是单一配置项的修改,而是一套从网络层到应用层的纵深防御体系。一台新装好的Linux服务器暴露在公网上,平均存活时间不超过30分钟就会收到第一次SSH暴力破解扫描。服务器安全加固的核心目标是将攻击成本提高到攻击者难以承受的水平,同时不影响正常业务运行。
纵深防御体系分为四层:网络访问控制(防火墙)、身份认证加固(SSH)、入侵检测响应(fail2ban)、强制访问控制(SELinux)。每层独立失效不影响其他层的防护能力,实现逐层递进的安全边界。
SSH服务安全配置实战
SSH是Linux服务器管理的主要入口,也是攻击者最常尝试的突破口。默认SSH配置存在多个安全隐患,需要逐项修正。
# /etc/ssh/sshd_config 关键安全配置
Port 58222 # 修改默认端口
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码认证,强制密钥登录
PubkeyAuthentication yes # 启用密钥认证
MaxAuthTries 3 # 最大认证尝试次数
LoginGraceTime 30 # 认证超时30秒断开
AllowUsers deploy ops # 白名单限制可登录用户
ClientAliveInterval 300 # 300秒无操作发送心跳
ClientAliveCountMax 0 # 不响应心跳立即断开
Protocol 2 # 仅允许SSH协议版本2
X11Forwarding no # 关闭X11转发
AllowTcpForwarding no # 关闭TCP转发(按需开启)
密钥认证配置完成后,切换到密钥登录验证无误,再禁用密码认证。Ed25519算法比RSA更安全更高效,推荐作为首选密钥类型:
ssh-keygen -t ed25519 -C "deploy@server-01" -f ~/.ssh/server01_key
ssh-copy-id -i ~/.ssh/server01_key.pub deploy@server-ip -p 58222
firewalld防火墙规则配置
防火墙是服务器安全加固的第一道防线。firewalld是CentOS/RHEL默认防火墙管理工具,基于zone概念划分信任级别。生产环境应将公网接口放入drop zone,仅显式放行必要端口。
# 设置默认zone为public,仅放行业务端口
firewall-cmd --permanent --zone=public --set-target=DROP
firewall-cmd --permanent --zone=public --add-port=58222/tcp # SSH
firewall-cmd --permanent --zone=public --add-port=443/tcp # HTTPS
firewall-cmd --permanent --zone=public --add-port=80/tcp # HTTP
firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4" source address="10.0.0.0/8" port port="3306" protocol="tcp" accept'
firewall-cmd --reload
firewall-cmd --list-all --zone=public
内部服务端口(如MySQL 3306、Redis 6379)不应暴露在public zone,通过rich rule限定来源IP为内网段。云服务器选型时还需配合云厂商安全组实现网络层双重过滤。
fail2ban自动封禁恶意IP
fail2ban通过分析日志文件识别恶意行为,自动调用iptables/firewalld封禁攻击IP。它是服务器故障排查和入侵响应的自动化工具,对SSH暴力破解效果显著。
# 安装fail2ban
yum install -y fail2ban epel-release
# 或 Debian/Ubuntu
apt install -y fail2ban
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = firewallcmd-rich-rules
[sshd]
enabled = true
port = 58222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 86400
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 604800
findtime = 86400
maxretry = 5
启动fail2ban后,查看封禁状态和攻击日志:
systemctl enable --now fail2ban
fail2ban-client status sshd
fail2ban-client status recidive
fail2ban-client banned
SELinux强制访问控制配置
SELinux是Linux内核级强制访问控制(MAC)机制,即使root权限也受策略约束。很多管理员习惯直接setenforce 0关闭SELinux,这种做法等于放弃了一整层安全防护。正确做法是理解SELinux策略并根据业务需求配置。
# 查看SELinux状态
getenforce
sestatus
# 临时切换模式(重启失效)
setenforce 0 # Permissive(仅记录不阻止)
setenforce 1 # Enforcing
# /etc/selinux/config 永久配置
SELINUX=enforcing
# 排查SELinux拒绝日志
grep AVC /var/log/audit/audit.log | tail -20
ausearch -m AVC -ts today
# 使用audit2allow生成策略补丁
ausearch -m AVC -ts today | audit2allow -M custom_policy
semodule -i custom_policy.pp
常见SELinux问题处理:Web服务无法访问非标准目录时,使用semanage fcontext修改文件上下文而非关闭SELinux:
# 允许Nginx访问自定义Web根目录
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
# 允许服务监听非标准端口
semanage port -a -t http_port_t -p tcp 8443
IDC数据中心物理安全与日志审计
算力资源规划中,物理服务器安全不只有软件配置。IDC数据中心的物理访问控制、BIOS安全启动、带外管理(IPMI/BMC)网络隔离同样关键。IPMI接口应部署在独立管理网络,禁止公网可达。
日志审计方面,配置rsyslog将安全日志远程转发到独立日志服务器,防止攻击者清除入侵痕迹:
# /etc/rsyslog.conf 远程日志转发
*.* @@log-server.internal:6514
定期运行Lynis安全扫描工具,获取服务器安全合规评分和改进建议:
yum install -y lynis
lynis audit system --quick
服务器安全加固是持续性工作,非一次性配置。系统补丁要及时更新(yum-cron自动更新安全补丁),定期review防火墙规则和fail2ban策略,配合高可用集群架构中的节点级隔离,才能维持长期安全水位。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-zhi-nan-ssh-fang-hu/