凌峰创科服务平台

Linux服务器安全配置关键点有哪些?

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

Linux服务器安全配置关键点有哪些?-图1
(图片来源网络,侵删)

Linux 服务器安全配置方案(从入门到实践)

服务器安全是一个持续的过程,而不是一次性的任务,本方案将安全配置分为以下几个关键阶段:

  1. 初始准备与物理安全
  2. 用户与访问控制
  3. 服务与端口管理
  4. 系统内核与防火墙
  5. 日志与监控
  6. 定期维护与更新

第一阶段:初始准备与物理安全

这是最基础也是最容易被忽视的一步。

  1. 更新系统

    • 在进行任何配置之前,确保系统是最新的,这可以修复已知的安全漏洞。
    • 对于 Debian/Ubuntu:
      sudo apt update && sudo apt upgrade -y
    • 对于 CentOS/RHEL:
      sudo yum update -y
  2. 配置网络

    Linux服务器安全配置关键点有哪些?-图2
    (图片来源网络,侵删)
    • 为服务器设置一个静态 IP 地址,避免因 DHCP 变更导致连接丢失。
    • 在防火墙中只开放必要的端口(如 SSH 22, HTTP 80, HTTPS 443),其他所有端口默认拒绝。
  3. 物理安全

    • 确保服务器放置在安全的机房或机柜中,限制物理访问权限。
    • 如果是云服务器,则无需考虑此点,但需要确保云平台上的安全组(Security Group)配置正确。

第二阶段:用户与访问控制

这是安全的核心,目标是确保只有授权用户能以最小权限访问服务器。

  1. 设置强密码或使用密钥登录

    • 禁用密码登录,强制使用 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
    • 如果必须使用密码,请设置强密码策略
      • 使用 cracklibpam_pwquality 等工具强制用户设置复杂密码(长度、字符类型、历史密码等)。
  2. 创建普通用户并赋予 sudo 权限

    Linux服务器安全配置关键点有哪些?-图3
    (图片来源网络,侵删)
    • 永远不要直接使用 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
  3. 禁止 root 用户直接登录

    • /etc/ssh/sshd_config 中设置:
      PermitRootLogin no
    • 修改后重启 SSH 服务。
  4. 修改默认 SSH 端口

    • 将 SSH 端口从默认的 22 修改为一个不常用的端口(如 2222),可以防止自动化扫描攻击。
    • 编辑 /etc/ssh/sshd_config
      Port 2222
    • 重要:在修改前,确保防火墙已经放行了新端口,否则你可能会被锁在服务器之外,重启 SSH 服务后,使用新端口测试登录。

第三阶段:服务与端口管理

减少服务暴露面,就是减少被攻击的风险。

  1. 停止并禁用不必要的服务

    • 使用以下命令查看正在运行的服务:
      # 对于 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
  2. 使用 netstatss 检查监听端口

    • 查看所有监听的 TCP 和 UDP 端口:
      sudo ss -tulnp
      # 或者使用 netstat
      # sudo netstat -tulnp
    • 识别每个端口运行的服务,如果某个服务不是必需的,请将其卸载或禁用。
  3. 卸载不必要软件

    • 服务器只应运行必要的应用程序,移除编译工具、游戏、文档等。
    • 对于 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

第四阶段:系统内核与防火墙

加固系统本身,并构建网络层面的防御。

  1. 配置防火墙

    • 强烈推荐使用 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
  2. 配置 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
  3. 禁止内核 IP 转发

    • 如果你的服务器不是用作路由器,应该禁用内核的 IP 转发功能。
    • 编辑 /etc/sysctl.conf 文件,添加或取消注释以下行:
      net.ipv4.ip_forward = 0
    • 应用更改:sudo sysctl -p
  4. 启用 SYN Cookies

    防止 SYN Flood 拒绝

分享:
扫描分享到社交APP
上一篇
下一篇