这份方案适用于绝大多数主流 Linux 发行版(如 CentOS/RHEL, Ubuntu/Debian),但具体命令可能因发行版而异。

Linux 服务器安全配置方案(从入门到实践)
服务器安全是一个持续的过程,而不是一次性的任务,本方案将安全配置分为以下几个关键阶段:
- 初始准备与物理安全
- 用户与访问控制
- 服务与端口管理
- 系统内核与防火墙
- 日志与监控
- 定期维护与更新
第一阶段:初始准备与物理安全
这是最基础也是最容易被忽视的一步。
-
更新系统
- 在进行任何配置之前,确保系统是最新的,这可以修复已知的安全漏洞。
- 对于 Debian/Ubuntu:
sudo apt update && sudo apt upgrade -y
- 对于 CentOS/RHEL:
sudo yum update -y
-
配置网络
(图片来源网络,侵删)- 为服务器设置一个静态 IP 地址,避免因 DHCP 变更导致连接丢失。
- 在防火墙中只开放必要的端口(如 SSH 22, HTTP 80, HTTPS 443),其他所有端口默认拒绝。
-
物理安全
- 确保服务器放置在安全的机房或机柜中,限制物理访问权限。
- 如果是云服务器,则无需考虑此点,但需要确保云平台上的安全组(Security Group)配置正确。
第二阶段:用户与访问控制
这是安全的核心,目标是确保只有授权用户能以最小权限访问服务器。
-
设置强密码或使用密钥登录
- 禁用密码登录,强制使用 SSH 密钥:这是最有效的安全措施之一。
- 在客户端生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 - 将公钥(
~/.ssh/id_rsa.pub)复制到服务器:ssh-copy-user@server_ip - 编辑服务器的 SSH 配置文件
/etc/ssh/sshd_config:PasswordAuthentication no # 禁用密码认证 PubkeyAuthentication yes # 启用密钥认证 PermitRootLogin no # 禁止 root 用户直接登录
- 重启 SSH 服务:
sudo systemctl restart sshd
- 在客户端生成 SSH 密钥对:
- 如果必须使用密码,请设置强密码策略:
- 使用
cracklib或pam_pwquality等工具强制用户设置复杂密码(长度、字符类型、历史密码等)。
- 使用
- 禁用密码登录,强制使用 SSH 密钥:这是最有效的安全措施之一。
-
创建普通用户并赋予
sudo权限
(图片来源网络,侵删)- 永远不要直接使用
root用户进行日常操作。 - 创建一个新用户:
sudo adduser newuser - 为新用户设置密码:
sudo passwd newuser - 赋予该用户
sudo权限,最安全的方式是将其加入sudo组(在 Ubuntu/Debian 中默认存在)。# 将用户添加到 sudo 组 (Ubuntu/Debian) sudo usermod -aG sudo newuser
- 在 CentOS/RHEL 中,你需要编辑
/etc/sudoers文件(使用visudo命令),添加一行:newuser ALL=(ALL) ALL
- 在 CentOS/RHEL 中,你需要编辑
- 永远不要直接使用
-
禁止 root 用户直接登录
- 在
/etc/ssh/sshd_config中设置:PermitRootLogin no
- 修改后重启 SSH 服务。
- 在
-
修改默认 SSH 端口
- 将 SSH 端口从默认的
22修改为一个不常用的端口(如2222),可以防止自动化扫描攻击。 - 编辑
/etc/ssh/sshd_config:Port 2222
- 重要:在修改前,确保防火墙已经放行了新端口,否则你可能会被锁在服务器之外,重启 SSH 服务后,使用新端口测试登录。
- 将 SSH 端口从默认的
第三阶段:服务与端口管理
减少服务暴露面,就是减少被攻击的风险。
-
停止并禁用不必要的服务
- 使用以下命令查看正在运行的服务:
# 对于 systemd 系统 (CentOS 7+, Ubuntu 16.04+) systemctl list-units --type=service --state=running # 对于 SysV init 系统 service --status-all
- 停止并禁用不必要的服务,
# 示例:禁用 sendmail 邮件服务 sudo systemctl stop sendmail sudo systemctl disable sendmail
- 使用以下命令查看正在运行的服务:
-
使用
netstat或ss检查监听端口- 查看所有监听的 TCP 和 UDP 端口:
sudo ss -tulnp # 或者使用 netstat # sudo netstat -tulnp
- 识别每个端口运行的服务,如果某个服务不是必需的,请将其卸载或禁用。
- 查看所有监听的 TCP 和 UDP 端口:
-
卸载不必要软件
- 服务器只应运行必要的应用程序,移除编译工具、游戏、文档等。
- 对于 Debian/Ubuntu:
sudo apt-get purge --auto-remove telnet* rsh* rlogin* xinetd* tftpd*
- 对于 CentOS/RHEL:
sudo yum remove telnet-server rsh-server xinetd tftp-server
第四阶段:系统内核与防火墙
加固系统本身,并构建网络层面的防御。
-
配置防火墙
-
强烈推荐使用
firewalld(CentOS/RHEL) 或ufw(Ubuntu/Debian),而不是直接操作iptables。 -
示例 (firewalld):
# 启动并设置开机自启 sudo systemctl start firewalld sudo systemctl enable firewalld # 添加永久规则(SSH 端口 2222, HTTP, HTTPS) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 如果修改了 SSH 端口,需要添加新端口 sudo firewall-cmd --permanent --add-port=2222/tcp # 重新加载防火墙使规则生效 sudo firewall-cmd --reload
-
示例:
# 启用 UFW sudo ufw enable # 默认拒绝所有传入,允许所有传出 sudo uw default deny incoming # 允许特定端口 sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS
-
-
配置 Fail2ban 防暴力破解
- Fail2ban 是一个防止入侵的工具,它会通过监控日志(如 SSH 登录失败),自动将恶意 IP 地址加入防火墙黑名单。
- 安装:
sudo apt install fail2ban # Debian/Ubuntu sudo yum install fail2ban # CentOS/RHEL
- 配置:
- 复制一份配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - 编辑
/etc/fail2ban/jail.local文件,主要配置[sshd]部分:[sshd] enabled = true port = 2222 # 你修改后的 SSH 端口 filter = sshd logpath = /var/log/auth.log # Debian/Ubuntu # logpath = /var/log/secure # CentOS/RHEL maxretry = 3 bantime = 3600 # 封禁 1 小时
- 重启 Fail2ban 服务:
sudo systemctl restart fail2ban
- 复制一份配置文件:
-
禁止内核 IP 转发
- 如果你的服务器不是用作路由器,应该禁用内核的 IP 转发功能。
- 编辑
/etc/sysctl.conf文件,添加或取消注释以下行:net.ipv4.ip_forward = 0
- 应用更改:
sudo sysctl -p
-
启用 SYN Cookies
防止 SYN Flood 拒绝
