Linux服务器安全加固教程:必做的几项基础设置
很多新手装好Linux服务器后直接就部署业务,用着默认配置就上线了。但公网上的服务器每天都会受到大量扫描和暴力破解攻击,默认配置几乎等于裸奔。本文介绍几项最基础也最有效的Linux安全加固措施,花半小时做完,安全性大幅提升。
一、SSH安全加固
SSH是远程管理Linux的主要通道,也是攻击者最常攻击的入口。默认配置下,root用户可以直接密码登录,容易被暴力破解。
1. 修改SSH默认端口
把22端口改成其他端口(如22022),可以避开大量自动化扫描。编辑配置文件:
vi /etc/ssh/sshd_config
找到 #Port 22,改为 Port 22022,重启SSH服务:systemctl restart sshd。
2. 禁止root直接登录
新建一个普通用户,需要root权限时通过su或sudo切换:
在sshd_config中设置 PermitRootLogin no,重启SSH生效。
3. 使用密钥登录,禁用密码登录
密钥登录比密码安全得多,几乎不可能被暴力破解。本地生成密钥对,把公钥上传到服务器 ~/.ssh/authorized_keys,确认密钥能登录后,在sshd_config中设置 PasswordAuthentication no。
4. 限制登录失败次数
安装fail2ban等工具,自动封禁多次登录失败的IP,有效防暴力破解。
二、配置防火墙
防火墙是服务器的第一道门,只开放必要的端口,其余全部关闭。
CentOS 7/8使用firewalld,常用操作:
- 查看已开放端口:
firewall-cmd --list-ports; - 放行端口:
firewall-cmd --permanent --add-port=80/tcp; - 关闭端口:
firewall-cmd --permanent --remove-port=端口/tcp; - 重载生效:
firewall-cmd --reload。
Ubuntu可以使用ufw,操作更简单。原则上只开放80(HTTP)、443(HTTPS)、SSH端口,以及业务必需的端口,数据库、Redis等内部服务端口绝不对外开放。
三、用户与权限管理
- 删除无用用户和组:检查
/etc/passwd,删除不需要的系统默认用户; - 遵循最小权限原则:每个服务使用独立的低权限用户运行,不要都用root;
- 检查sudo权限:
visudo查看谁有sudo权限,只给必要的用户授权; - 文件权限:网站目录权限设为755,文件644,配置文件不要设成777;
- 禁止空密码登录:确认
/etc/shadow中没有空密码账户。
四、及时更新系统和软件
很多入侵都是利用已知漏洞,及时打补丁能堵住大部分攻击:
- CentOS:
yum update -y; - Ubuntu/Debian:
apt update && apt upgrade -y; - 定期更新,特别是有安全公告时尽快升级;
- 生产环境更新前建议先在测试环境验证,避免更新导致业务异常。
五、关闭不必要的服务
服务器上运行的服务越少,攻击面越小。用 systemctl list-unit-files --state=enabled 查看开机自启服务,关闭不需要的服务。常见需要注意的:
- 数据库(MySQL、Redis、MongoDB)只监听127.0.0.1,不要绑定公网IP;
- 关闭不需要的端口和服务,如Telnet、FTP(用SFTP替代);
- Redis、Elasticsearch等默认无密码且监听全网,是挖矿病毒的重点目标,务必设密码并绑定内网。
六、日志审计与监控
- 定期检查
/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu),查看登录记录,发现异常IP; - 开启命令历史记录,便于事后追溯;
- 配置进程和端口监控,发现异常进程及时处理;
- 重要文件做完整性监控,发现被篡改立即告警;
- 定期备份数据,备份文件离线保存,遭遇勒索病毒时能恢复。
七、常见问题
改了SSH端口连不上了怎么办?
大概率是防火墙没放行新端口或SSH配置有误。通过云厂商控制台的VNC/远程连接登录服务器,检查防火墙规则和sshd_config配置,用 sshd -t 验证配置语法。
禁用密码登录后密钥丢了怎么办?
同样通过云厂商VNC控制台登录,重新开启密码登录或添加新密钥。建议密钥多设备备份,或在云平台保存一份加密备份。
装了面板还要做这些吗?
宝塔等面板会自动配置部分安全项,但仍建议修改面板默认端口、绑定域名访问、开启面板SSL,并定期更新面板和系统,不要因为有面板就忽视底层安全。
八、总结
Linux安全加固的核心是缩小攻击面:改SSH端口、禁root密码登录、用密钥登录、防火墙只开必要端口、最小权限运行服务、及时更新补丁、做好日志审计和备份。这些基础设置不复杂,但能挡住90%以上的自动化攻击。安全是持续的过程,上线后也要定期检查和维护。