作为运维人,最头疼的就是服务器安全问题——新服务器默认配置藏隐患,老服务器长期运行易出漏洞,一个疏忽就可能导致数据泄露、服务器被入侵,损失不可估量。尤其是新服务器上线、老服务器加固的运维同学,看完这篇直接落地,不用再到处找教程。
今天就给大家整理一套高阶系统安全加固方案,覆盖新服务器初始化、SSH硬核防护、账户权限管控、防火墙双层配置、日志审计5大核心模块,全程附复制可用的实操命令(以Rocky/CentOS为例),新手也能跟着做,彻底筑牢服务器安全防线!关键命令已整理好,收藏本文,下次加固直接复制,少走弯路~
模块一:新服务器初始化(安全地基,一步都不能省)
新服务器刚上线,系统默认配置藏着很多“坑”——默认账户、开放端口、冗余服务,这些都是黑客入侵的突破口。初始化的核心就是“清零隐患、标准化配置”,为后续加固打牢基础。
1.1 系统环境清理+漏洞更新
先卸载无用软件和冗余服务,避免无用组件成为安全漏洞;再更新系统内核和所有软件包,修复已知漏洞,从底层降低被攻击风险。
实操命令(直接复制可用):
# 卸载冗余服务(telnet、ftp等非必要服务,按需删除)
yum remove -y telnet ftp vsftpd
# 清理系统缓存+无用依赖,释放空间
yum clean all && yum autoremove -y
# 更新系统内核与软件包(重启生效,生产环境避开业务高峰)
yum update -y && reboot
1.2 磁盘分区+文件系统加固
合理划分磁盘分区,把系统、数据、日志分区分开,避免一个分区出问题影响整体;同时限制敏感目录权限,防止恶意篡改。
关键配置(必做):
- 系统分区(/):设为只读权限,必要时临时挂载可写,禁止随意修改系统文件;
- 数据分区(如/data):单独挂载,普通用户只读,仅管理员可读写;
- 日志分区(/var/log):单独挂载,限制写入权限,防止日志被清空、篡改。
1.3 基础安全配置初始化
关闭无用端口、禁用不必要的IPV6、设置时间同步,这些基础操作看似简单,却能规避很多低级安全风险。
# 关闭无用端口(示例:关闭21端口,按需调整)
firewall-cmd --permanent --remove-port=21/tcp && firewall-cmd --reload
# 禁用IPV6(无需使用则关闭,避免额外风险)
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
# 时间同步(同步阿里云服务器,确保日志、证书时间准确)
yum install -y ntpdate
ntpdate ntp.aliyun.com
# 开机自启,避免重启后失效
echo "ntpdate ntp.aliyun.com" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
模块二:SSH硬核防护(远程登录入口,守好最关键一关)
SSH是服务器远程登录的核心入口,也是黑客暴力破解的主要目标。高阶防护要做到“阻断攻击、限制访问、强化验证”,彻底守住这道关。这里提醒大家,SSH连不上时,可加 -vvv 查看日志排查问题,避免盲目操作。
2.1 基础防护:修改默认端口+禁用root登录(必做)
SSH默认端口22,是黑客扫描的重点,必须改成非默认端口(如2022、50022,避开1024以下端口);同时禁用root直接登录,防止root密码泄露导致服务器被完全控制。
# 编辑SSH配置文件
vim /etc/ssh/sshd_config
# 修改默认端口(将Port 22改为Port 2022,可自定义)
Port 2022
# 禁用root登录(将PermitRootLogin yes改为no)
PermitRootLogin no
# 保存重启SSH服务,设置开机自启
systemctl restart sshd
systemctl enable sshd
⚠️ 注意:修改端口后,一定要同步更新防火墙规则,开放新的SSH端口,否则会无法远程登录。
2.2 进阶防护:限制登录IP+密钥登录(杜绝暴力破解)
仅允许办公网、管理员个人IP登录SSH,阻断陌生IP访问;用密钥登录替代密码登录,彻底杜绝暴力破解、字典攻击的风险。
# 第一步:限制登录IP(仅允许指定IP访问)
# 编辑hosts.allow,添加允许的IP(示例:允许192.168.1.100)
echo "sshd:192.168.1.100" >> /etc/hosts.allow
# 编辑hosts.deny,拒绝所有其他IP
echo "sshd:ALL" >> /etc/hosts.deny
# 第二步:启用SSH密钥登录(客户端+服务器配合操作)
# 1. 客户端生成密钥对(本地终端执行,无需登录服务器)
ssh-keygen -t rsa -b 4096 # 4096位密钥,安全性更高
# 2. 上传公钥到服务器(替换为自己的用户名和服务器IP、SSH端口)
ssh-copy-id -p 2022 用户名@服务器IP
# 3. 服务器配置密钥登录(编辑sshd_config)
vim /etc/ssh/sshd_config
PubkeyAuthentication yes # 启用密钥登录(改为yes)
PasswordAuthentication no # 禁用密码登录(确认密钥可用后再改)
# 4. 重启SSH服务生效
systemctl restart sshd
2.3 高阶防护:防暴力破解+连接限制(阻断恶意攻击)
安装fail2ban工具,监控SSH登录日志,对多次登录失败的IP进行封禁;同时限制SSH最大连接数和超时时间,防止恶意占用服务器资源,阻断DoS攻击。
# 安装fail2ban工具
yum install -y fail2ban
# 配置fail2ban(针对SSH,直接复制粘贴)
vim /etc/fail2ban/jail.local
[sshd]
enabled = true
filter = sshd
logpath = /var/log/secure
maxretry = 3 # 5分钟内失败3次
bantime = 3600 # 封禁1小时
findtime = 300 # 检测时间窗口(5分钟)
# 启动fail2ban,设置开机自启
systemctl start fail2ban
systemctl enable fail2ban
# 配置SSH连接限制(编辑sshd_config)
vim /etc/ssh/sshd_config
MaxStartups 10:30:60 # 最多10个未认证连接,超过30个开始拒绝
ClientAliveInterval 60 # 每60秒发一次心跳包
ClientAliveCountMax 3 # 3次无响应则断开连接
# 重启SSH服务生效
systemctl restart sshd
模块三:账户权限精细化管控(最小权限,杜绝滥用)
很多服务器安全事故,都是因为账户权限混乱导致的。高阶管控核心是“最小权限原则”——每个账户只拥有完成工作所需的最小权限,杜绝超权操作、权限滥用,这也是网络安全防护的核心原则之一。
3.1 账户清理+弱密码管控(清除安全突破口)
先清理无用账户、默认账户(如ftp、nobody),避免冗余账户被利用;再强制所有账户设置强密码,定期更换,禁止使用123456、admin等弱密码。
# 查看所有用户账户,排查无用账户
cat /etc/passwd
# 删除无用账户(示例:删除ftp账户,-r同时删除家目录)
userdel -r ftp
# 给用户设置强密码(以test用户为例)
passwd test # 密码要求:8位以上,含大小写、数字、特殊符号
# 配置密码策略(强制弱密码更换,编辑/etc/login.defs)
vim /etc/login.defs
PASS_MIN_LEN 8 # 密码最小长度8位
PASS_MAX_DAYS 90 # 90天过期
PASS_MIN_DAYS 7 # 7天内不可修改
# 安装密码强度检测工具,强制合规
yum install -y cracklib cracklib-devel
echo "password required pam_cracklib.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" >> /etc/pam.d/system-auth
3.2 权限精细化配置(用户+组+文件,层层管控)
按角色分组(管理员组、运维组、业务组),不同组分配不同权限;严格控制文件、目录权限,敏感文件仅允许管理员读写,普通用户无权限修改。
# 1. 创建用户组,分配用户
# 创建管理员组(admin)、运维组(ops)
groupadd admin
groupadd ops
# 创建用户并加入对应组(示例:user1加入ops组)
useradd -g ops user1
# 将管理员用户加入admin组(示例:test用户)
usermod -aG admin test
# 2. 文件与目录权限配置(关键!)
# 敏感文件(仅管理员可读写)
chmod 600 /etc/shadow /etc/ssh/sshd_config
chown root:root /etc/shadow /etc/ssh/sshd_config
# 系统目录(仅管理员可修改)
chmod 755 /etc /var/log
chown root:root /etc /var/log
# 普通用户家目录(仅自身可读写)
chmod 700 /home/user1
chown user1:ops /home/user1
3.3 sudo权限管控(避免权限滥用)
sudo权限允许普通用户临时执行管理员命令,必须严格控制——仅分配必要的命令权限,禁止授予“ALL”权限(允许执行所有管理员命令),同时记录sudo操作日志,便于后续审计。
# 编辑sudoers文件(用visudo,避免语法错误)
visudo
# 示例1:给test用户分配重启SSH的权限(仅这一个命令)
test ALL=(ALL) /usr/bin/systemctl restart sshd
# 示例2:给ops组分配查看系统日志的权限
%ops ALL=(ALL) /usr/bin/tail /var/log/secure, /usr/bin/cat /var/log/messages
# 禁止授予ALL权限(注释或删除以下内容)
# root ALL=(ALL) ALL
# %wheel ALL=(ALL) ALL
# 配置sudo操作日志(便于审计)
Defaults logfile="/var/log/sudo.log"
Defaults log_input
Defaults log_output
模块四:防火墙双层配置(内外分层,精准控流)
防火墙是服务器的“第一道防线”,高阶防护必须做“双层配置”——系统防火墙(firewalld/iptables)+ 网络防火墙(硬件/云安全组),内外网分层设防,只允许必要流量,阻断所有非法访问,这也是防范网络攻击的关键手段。
4.1 系统防火墙(firewalld)配置(内层防护)
系统防火墙直接作用于服务器,仅开放业务必需的端口,限制指定IP访问核心端口,默认拒绝所有入站流量。
# 启动firewalld,设置开机自启
systemctl start firewalld
systemctl enable firewalld
# 清空默认规则,避免默认开放端口
firewall-cmd --permanent --flush
# 开放必要端口(示例:SSH端口2022、业务端口8080)
firewall-cmd --permanent --add-port=2022/tcp
firewall-cmd --permanent --add-port=8080/tcp
# 限制SSH端口仅允许指定IP访问(示例:192.168.1.0/24网段)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2022" accept'
# 默认拒绝所有入站流量,允许出站流量(保证服务器正常访问外部)
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重新加载规则,生效
firewall-cmd --reload
# 查看当前防火墙规则,确认配置正确
firewall-cmd --list-all
4.2 网络防火墙配置(外层防护)
网络防火墙(硬件防火墙、云安全组)部署在网络入口,和系统防火墙形成双层防护,进一步过滤非法流量。核心配置原则:
- 内外网隔离:仅开放外网需访问的业务端口(如80、443),内网端口(3306、6379等)仅允许内网IP访问;
- IP白名单:仅允许管理员、业务合作方IP访问核心端口,阻断陌生IP;
- 流量限制:限制单IP最大并发连接数,防止DoS/DDoS攻击;
- 日志记录:开启日志,记录所有入出站流量,便于后续分析追溯。
4.3 防火墙规则维护与测试(避免配置失效)
定期检查防火墙规则,删除无用规则、更新IP白名单;模拟非法IP访问核心端口,测试规则有效性,避免配置失误导致安全漏洞。
模块五:日志审计(安全可追溯,事后能排查)
日志审计是安全加固的“最后一道防线”,核心是“全链路采集、集中存储、实时分析、长期留存”。哪怕发生安全事件,也能通过日志快速定位问题、追溯源头,为处置提供依据,这也是建立长效防护机制的重要环节。
5.1 日志采集(全链路覆盖,不遗漏)
采集服务器所有核心日志,重点日志记录详细信息(登录IP、操作时间、操作内容),确保无遗漏。同时可借助auditd审计系统监控敏感文件修改,比如监控/etc/passwd文件变化,便于及时发现异常操作。
核心日志路径(CentOS为例):
- 系统日志:/var/log/messages
- SSH登录日志:/var/log/secure
- sudo操作日志:/var/log/sudo.log(需手动配置)
- 防火墙日志:/var/log/firewalld
- 业务日志:根据部署路径配置(如Tomcat、Nginx日志)
# 示例:用auditd监控/etc/passwd文件修改
auditctl -w /etc/passwd -p wa -k identity_changes
# 查看相关日志
ausearch -k identity_changes -i
5.2 日志集中存储与留存(防篡改、防丢失)
将日志集中存储(如部署ELK系统、发送至日志服务器),避免本地篡改、删除;按合规要求留存日志——核心日志留存≥90天,重要安全日志留存≥1年,同时配置异地备份,防止日志丢失。
推荐日志分析工具及亮点:
- ELK Stack:可实现日志集中采集、索引、可视化分析,适配海量日志场景;
- Wazuh:集成SIEM、漏洞扫描、合规检查,一站式满足安全审计需求;
- OSSEC:主打主机入侵检测(HIDS),可快速发现日志异常。
实操建议:
- 部署ELK(Elasticsearch+Logstash+Kibana),实现日志可视化分析;
- 定期将日志备份至异地存储,防止丢失;
- 限制日志文件权限,仅系统用户可写入,禁止普通用户修改、删除。
5.3 日志分析与安全告警(实时处置,减少损失)
实时分析日志,设置异常告警规则,出现以下情况及时触发告警(邮件、短信),快速处置:
- SSH登录失败次数过多(疑似暴力破解);
- 陌生IP登录服务器(疑似非法入侵);
- sudo权限滥用(普通用户执行高危命令);
- 日志文件被修改、删除(疑似恶意篡改);
- 防火墙阻断大量非法流量(疑似DoS/DDoS攻击)。
定期复盘日志,总结安全风险点,优化加固策略,形成“采集-分析-告警-处置-优化”的闭环。
总结
系统安全加固高阶实操,核心就是“层层设防、精细管控、可追溯”。新服务器初始化筑牢地基,SSH防护守住核心入口,账户权限杜绝滥用,防火墙双层阻断攻击,日志审计实现追溯,五大模块环环相扣。
不管是运维新手还是资深工程师,这套方案都能直接落地使用。记住:安全加固没有一劳永逸,定期巡检、漏洞扫描、优化配置,才能长期保障服务器安全、稳定运行!
收藏这篇,下次做安全加固,直接对照操作,少走弯路~ 评论区说说你做加固时遇到的坑,一起交流避坑!