Linux 服务器安全配置核心原则
在开始之前,请记住几个核心原则:

- 最小权限原则:只给予用户和程序完成任务所必需的最小权限。
- 纵深防御:不要依赖单一的安全措施,建立多层防护。
- 持续监控:安全不是一次性的配置,而是一个持续的过程。
第一阶段:系统初始化与账户安全
这是在服务器刚上线时必须完成的步骤,也是最关键的一步。
更新系统
确保系统所有软件包都是最新的,修复已知的安全漏洞。
-
基于 Debian/Ubuntu 的系统:
sudo apt update && sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y
-
基于 CentOS/RHEL/Fedora 的系统:
(图片来源网络,侵删)sudo yum update -y # 对于 CentOS 7 及更早版本 # 或者对于 CentOS 8+/RHEL 8+/Fedora: sudo dnf update -y
配置防火墙
防火墙是服务器的第一道防线,只允许必要的端口通过。
-
使用
ufw(Uncomplicated Firewall - 适用于 Debian/Ubuntu):# 检查 UFW 状态 sudo ufw status # 允许 SSH 连接(非常重要!先确保能连上再设置其他规则) sudo ufw allow OpenSSH # 允许 HTTP (80) 和 HTTPS (443) 端口,如果运行 Web 服务 sudo ufw allow http sudo ufw allow https # 允许自定义端口,例如数据库端口 3306 (仅允许特定IP访问更安全) # sudo ufw allow from 192.168.1.100 to any port 3306 # 启用防火墙 sudo ufw enable
执行
enable时可能会提示你,确认即可。 -
使用
firewalld(适用于 CentOS/RHEL/Fedora):
(图片来源网络,侵删)# 启动并设置开机自启 sudo systemctl start firewalld sudo systemctl enable firewalld # 查看已开放的端口 sudo firewall-cmd --list-ports # 添加永久规则(例如允许 SSH) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙使规则生效 sudo firewall-cmd --reload
创建新用户并禁用 root 直接登录
直接使用 root 用户登录风险极高。
-
创建一个新用户 (
admin):sudo adduser admin
-
为新用户设置密码:
sudo passwd admin
-
为新用户赋予
sudo权限:-
方法一 (推荐): 将用户加入
sudo组。# 在 Debian/Ubuntu 上 sudo usermod -aG sudo admin # 在 CentOS/RHEL 上 sudo usermod -aG wheel admin
-
方法二: 编辑
/etc/sudoers文件 (不推荐新手直接操作)。sudo visudo # 在文件末尾添加: admin ALL=(ALL:ALL) ALL
-
-
禁用 root 的 SSH 直接登录: 编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
找到以下行,并确保它们被修改为:
PermitRootLogin no PasswordAuthentication no # (可选,但强烈推荐,见下一步)保存文件后,重启 SSH 服务:
sudo systemctl restart sshd
使用 SSH 密钥对进行认证
密码很容易被暴力破解,而 SSH 密钥对更安全。
-
在客户端电脑上生成密钥对 (如果没有的话):
ssh-keygen -t rsa -b 4096 # 一路按回车即可,使用默认路径和空密码
-
将公钥复制到服务器:
# 替换为你的服务器IP和用户名 ssh-copy-id admin@your_server_ip
这个命令会要求你输入
admin用户的密码,然后将~/.ssh/id_rsa.pub的内容追加到服务器上admin用户的~/.ssh/authorized_keys文件中。 -
在服务器上强化 SSH 配置: 再次编辑
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
确保以下配置项:
PubkeyAuthentication yes PasswordAuthentication no # 禁用密码登录,强制使用密钥 PermitRootLogin no # 禁用root登录 Port 22 # (可选) 修改SSH端口,增加一点安全性 # MaxAuthTries 6 # (可选) 限制认证尝试次数 # AllowUsers admin@192.168.1.* # (可选) 只允许特定用户和IP登录保存并重启 SSH 服务:
sudo systemctl restart sshd
注意: 修改
PasswordAuthentication no后,你必须确保密钥认证已经成功,否则你将无法登录服务器!
第二阶段:系统与服务加固
禁用不必要的服务
减少运行的服务就减少了潜在的攻击面。
-
查看所有正在运行的服务:
systemctl list-units --type=service --state=running
-
禁用不必要的服务 (
telnet,rsh,nfslock等):# 禁用并停止服务 sudo systemctl disable telnet.socket sudo systemctl stop telnet.socket # 禁用开机自启 sudo systemctl disable bluetooth.service
配置 Fail2Ban
Fail2ban 是一个防止暴力破解的强大工具,它会监控日志文件(如 SSH 登录日志),并在检测到多次失败尝试后,自动用防火墙封锁攻击者的 IP。
-
安装 Fail2ban:
- Debian/Ubuntu:
sudo apt install fail2ban -y
- CentOS/RHEL:
sudo yum install epel-release -y sudo yum install fail2ban -y
- Debian/Ubuntu:
-
配置 Fail2ban: 复制一份配置文件进行修改:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
在
[sshd]部分,确保或修改以下配置:[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 # 封禁1小时 (单位:秒) # bantime = -1 # 永久封禁
maxretry: 允许的最大失败尝试次数。bantime: 封禁时间。
-
启动并启用 Fail2ban:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
定期更新与安全审计
-
设置自动安全更新:
- Debian/Ubuntu: 安装
unattended-upgrades。sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades # 在交互式界面中选择“是”
- CentOS/RHEL: 使用
yum-cron。sudo yum install yum-cron -y sudo systemctl enable yum-cron sudo systemctl start yum-cron # 编辑 /etc/yum/yum-cron.conf,设置 update_cmd = security
- Debian/Ubuntu: 安装
-
使用
AIDE进行文件完整性检查: AIDE (Advanced Intrusion Detection Environment) 可以监控文件系统的变化,帮助你发现被篡改的文件。sudo apt install aide -y # Debian/Ubuntu sudo yum install aide -y # CentOS/RHEL # 初始化数据库 sudo aide --init # 将生成的数据库移动到正式位置 sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db # 每天检查一次,并配置邮件发送报告 # (需要配置邮件服务,如 Postfix)
第三阶段:日志与监控
配置日志服务器
将所有服务器的日志集中到一台服务器上,便于统一管理和审计。
-
安装
rsyslog(通常系统已自带):# 在客户端和服务器上都安装 sudo apt install rsyslog -y
-
配置客户端: 编辑
/etc/rsyslog.d/50-default.conf或主配置文件,添加一行,将所有日志发送到远程服务器:*.* @<your_log_server_ip>:514重启
rsyslog服务。
使用 logwatch 分析日志
logwatch 可以自动分析日志文件,并以摘要报告的形式发送给你。
# 安装 sudo apt install logwatch -y # Debian/Ubuntu sudo yum install logwatch -y # CentOS/RHEL # 手动运行测试 sudo logwatch --range today --detail high --mailto your_email@example.com
第四阶段:其他重要安全措施
安装入侵检测系统
- OSSEC: 一个非常强大的开源 HIDS (主机入侵检测系统),可以监控文件变化、检测 rootkit、监控日志等。
配置内核安全参数
通过修改 /etc/sysctl.conf 来增强系统内核的安全性,例如防止 IP 欺骗、syn-flood 攻击等。
# 编辑 sysctl.conf sudo nano /etc/sysctl.conf # 添加或修改以下内容 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 # 应用更改 sudo sysctl -p
定期备份
这是最后的防线,也是最重要的,确保你有一个可靠的备份策略,并定期测试恢复流程。
- :
/etc目录、用户数据、数据库等。 - 备份频率:根据数据重要性决定(每日、每周)。
- 备份位置:备份到另一台服务器、云存储或离线存储介质。
安全检查清单
| 阶段 | 任务 | 状态 |
|---|---|---|
| 初始化 | [ ] 系统已更新到最新版本 | ☐ |
| [ ] 防火墙已启用,只开放必要端口 | ☐ | |
[ ] 创建了新的普通用户,并赋予 sudo 权限 |
☐ | |
[ ] 已禁用 root 的直接 SSH 登录 |
☐ | |
| [ ] 已配置 SSH 密钥对认证,并禁用密码登录 | ☐ | |
| 加固 | [ ] 已禁用不必要的服务 | ☐ |
[ ] 已安装并配置 Fail2ban 防暴力破解 |
☐ | |
| [ ] 已设置自动安全更新 | ☐ | |
[ ] 已安装 AIDE 或类似工具进行文件完整性检查 |
☐ | |
| 监控 | [ ] 已配置日志集中或分析工具(如 logwatch) |
☐ |
| 其他 | [ ] 内核安全参数已优化 | ☐ |
| [ ] 已制定并执行定期备份策略 | ☐ | |
[ ] 所有操作都通过普通用户 + sudo 完成 |
☐ |
这份指南为您提供了一个坚实的安全基础,安全是一个持续的过程,需要不断地监控、更新和调整。
