凌峰创科服务平台

Linux服务器安全策略有哪些关键要点?

Linux 服务器安全策略详解

服务器安全是一个持续的过程,而非一次性的任务,它遵循“纵深防御”(Defense in Depth)原则,即构建多层、多维度的安全防护体系,即使一层被突破,还有其他层可以阻止攻击。

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

第一部分:核心安全原则

在开始具体操作前,请务必理解以下核心原则:

  1. 最小权限原则:任何用户、程序或进程都只应拥有完成其任务所必需的最小权限,绝不使用 root 用户进行日常操作。
  2. 纵深防御:不依赖单一的安全措施,在网络、主机、应用、数据等多个层面部署防护。
  3. 默认拒绝:防火墙和访问控制策略应默认拒绝所有流量,然后根据需要明确开放特定端口和服务。
  4. 已知安全:优先使用经过广泛审查和验证的开源软件,避免使用来源不明或未经审计的代码。
  5. 持续监控与审计:安全不是一劳永逸的,必须持续监控系统状态、日志和用户行为,以便及时发现异常。
  6. 及时更新:软件漏洞是攻击的主要入口,保持系统和所有软件包的最新状态是基本要求。

第二部分:系统基础加固

这是服务器安全的第一道防线,也是最关键的一步。

账户与访问控制

  • 禁用或删除不必要的账户

    • 检查 /etc/passwd 文件,禁用或删除测试账户、过期账户(如 uucp, operator, games 等)。
    • 使用 userdel <username> 删除不需要的用户。
    • 使用 passwd -l <username> 锁定不活跃但需要保留的账户。
  • 强化 root 账户

    Linux服务器安全策略有哪些关键要点?-图2
    (图片来源网络,侵删)
    • 禁止远程 root 登录:编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no,然后重启 SSH 服务:systemctl restart sshd
    • 为普通用户配置 sudo:创建一个普通管理员用户,并将其加入 wheelsudo 组,通过 visudo 编辑 /etc/sudoers 文件,精细控制其可执行的命令。
  • 使用强密码策略

    • 强制复杂密码:在 /etc/login.defs 中设置密码最小长度、最小使用天数等。
    • 禁止弱密码:使用 cracklibpam_pwquality 等模块检查密码强度。
    • 定期更换密码:设置密码过期策略。
  • 配置 SSH 安全增强

    • 修改默认端口:将 SSH 端口从 22 改为一个非标准端口(如 2222),以防止自动化扫描。
    • 禁用密码登录,启用密钥登录:这是最有效的安全措施之一。
      • sshd_config 中设置 PasswordAuthentication noPubkeyAuthentication yes
      • 确保客户端使用 SSH 密钥对进行登录。
    • 限制允许登录的用户:在 sshd_config 中使用 AllowUsersAllowGroups 指令,只允许特定用户或组通过 SSH 登录。
    • 禁用空密码:设置 PermitEmptyPasswords no
    • 设置登录超时:设置 ClientAliveInterval 60ClientAliveCountMax 3,自动断开不活动的连接。

文件系统与权限

  • 文件权限

    • 定期使用 find 命令查找和修复权限不当的文件,例如全局可写的文件 (find / -type f -perm -o=w) 或不应执行的配置文件。
    • 使用 chownchmod 正确设置所有者和权限。
  • 重要目录和文件的权限

    Linux服务器安全策略有哪些关键要点?-图3
    (图片来源网络,侵删)
    • 确保 /etc/passwd, /etc/shadow, /etc/group 等关键文件权限正确。
    • 限制对用户主目录(/home/)的访问。
  • 使用 chroot 或容器技术

    • 对于高风险服务(如 FTP, Web 服务器),考虑使用 chroot jail 或 Docker 等容器技术将其隔离在受限的环境中。

系统更新与补丁管理

  • 定期更新系统

    • 基于 Debian/Ubuntu: sudo apt update && sudo apt upgrade -y
    • 基于 CentOS/RHEL/Fedora: sudo yum update -ysudo dnf update -y
    • 设置自动更新:对于生产环境,配置 unattended-upgrades (Debian/Ubuntu) 或 yum-cron (CentOS/RHEL) 在非高峰期自动安装安全更新。
  • 订阅安全公告:关注您的发行版官方安全公告,了解最新的漏洞信息和补丁。

内核参数优化

  • 使用 sysctl 调整内核参数,增强系统安全性。

  • 示例配置(通常在 /etc/sysctl.conf/etc/sysctl.d/99-security.conf 中):

    # 禁用 IP 转发,除非服务器需要作为路由器
    net.ipv4.ip_forward = 0
    net.ipv6.conf.all.forwarding = 0
    # 防止 ICMP 重定向攻击
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0
    # 启用 SYN Cookies,防御 SYN Flood 攻击
    net.ipv4.tcp_syncookies = 1
    # 忽略 ICMP 请求(ping),防止系统被网络发现
    net.ipv4.icmp_echo_ignore_all = 1
    # 防止源路由
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
  • 应用配置:sysctl -p


第三部分:网络与防火墙配置

网络层是抵御外部攻击的前线。

配置防火墙

  • 使用 iptablesnftables

    • iptables 是经典工具,功能强大。

    • nftables 是新一代工具,语法更简洁,性能更好。

    • 核心策略:默认拒绝所有,然后按需开放。

    • 示例 iptables 规则:

      # 清空现有规则
      iptables -F
      iptables -X
      iptables -t nat -F
      iptables -t nat -X
      # 设置默认策略为 DROP
      iptables -P INPUT DROP
      iptables -P FORWARD DROP
      iptables -P OUTPUT ACCEPT
      # 允许本地回环
      iptables -A INPUT -i lo -j ACCEPT
      # 允许已建立的连接和相关的连接
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      # 允许 SSH 连接(假设端口是 2222)
      iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
      # 允许 HTTP/HTTPS
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      iptables -A INPUT -p tcp --dport 443 -j ACCEPT
      # 保存规则 (CentOS/RHEL)
      service iptables save
      # 或 (Debian/Ubuntu)
      iptables-save > /etc/iptables/rules.v4
  • 使用 firewalld (CentOS/RHEL 7+)

    • firewalld 提供了更友好的动态管理界面。
    • # 启动并设置开机自启
      systemctl start firewalld
      systemctl enable firewalld

    添加永久的服务(如 SSH, HTTP)

    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

禁用不必要的服务

  • 使用 systemctlchkconfig 检查并禁用所有不必要运行的服务,减少攻击面。
    • systemctl list-units --type=service --state=running
    • systemctl disable <service_name>
    • 如果服务器不提供邮件服务,禁用 postfixsendmail

第四部分:应用与服务安全

运行在服务器上的应用往往是攻击者的最终目标。

Web 服务器安全

  • Nginx/Apache
    • 以低权限用户运行:配置 Web 服务器(如 www-data, nginx, apache)运行,而不是 root
    • 定期更新:保持 Web 服务器软件及其模块(如 PHP, OpenSSL)的最新版本。
    • 配置安全头:设置 Content-Security-Policy, X-Frame-Options, X-Content-Type-Options 等 HTTP 响应头。
    • 隐藏版本信息:在配置中关闭服务器版本号的显示。
    • 禁用不必要的模块:移除未使用的模块以减少漏洞风险。

数据库安全

  • MySQL/MariaDB
    • 修改默认端口:将数据库端口从 3306 改为其他端口。
    • 禁止远程 root 登录:只允许 localhost 连接,并创建一个具有特定权限的远程管理用户。
    • 使用 SSL/TLS 加密连接
    • 定期备份数据,并确保备份文件安全。

其他服务

  • FTP:强烈建议使用 SFTP (基于 SSH) 或 FTPS (基于 SSL/TLS) 替代不安全的 FTP。
  • DNS (Bind):运行在非特权端口,限制查询来源,使用 TSIG 进行服务器间认证。
  • 邮件服务器:配置 SPF, DKIM, DMARC 以防止邮件欺骗和钓鱼。

第五部分:日志、监控与入侵检测

没有监控的安全是盲目的。

集中日志管理

  • 配置日志:确保所有服务(rsyslogjournald)都在记录日志。
  • 日志级别:对于关键服务,设置为 infodebug 级别。
  • 防止日志篡改
    • 将日志发送到远程日志服务器(如 ELK Stack, Graylog, Syslog-ng)。
    • 使用 logrotate 管理日志文件,防止磁盘被写满。
    • 设置日志文件权限为 root:root,并设置不可更改位(chattr +a)。

入侵检测系统

  • 使用 fail2ban

    • fail2ban 是一个强大的工具,它可以监控日志文件(如 SSH 登录失败日志),并自动调用防火墙规则来封禁恶意 IP 地址。
    • 示例 /etc/fail2ban/jail.local 配置:
      [sshd]
      enabled = true
      port = 2222
      filter = sshd
      logpath = /var/log/auth.log
      maxretry = 3
      bantime = 3600 # 封禁1小时
    • 启动服务:systemctl enable --now fail2ban
  • 使用 AIDE (Advanced Intrusion Detection Environment)

    • AIDE 是一个文件完整性检查工具,它在首次运行时创建一个数据库,记录所有关键文件的属性(如大小、权限、哈希值),之后可以定期运行,对比当前状态和数据库,发现任何文件被篡改。

系统监控

  • 使用 top, htop, nethogs 等工具实时查看系统资源使用情况。
  • 部署监控软件:如 Zabbix, Prometheus + Grafana,对服务器的 CPU、内存、磁盘、网络流量进行长期监控和告警。

第六部分:备份与应急响应

即使做了万全的准备,也要为最坏的情况做准备。

制定备份策略

  • 3-2-1 原则:至少保存 3 份数据副本,存放在 2 种不同类型的存储介质上,其中至少有 1 份是离线或异地备份。
  • :包括 /etc 配置目录、网站数据、数据库、用户数据等。
  • 备份周期:根据数据重要性,制定每日、每周的备份计划。
  • 测试恢复:定期测试备份文件的可用性,确保能够成功恢复。

制定应急响应计划

  1. 准备:明确团队成员和职责,准备好应急工具和联系方式。
  2. 识别:通过监控和日志发现安全事件。
  3. 遏制:立即隔离受影响的主机,断开网络连接,防止攻击扩散。
  4. 根除:清除恶意软件、后门,修复漏洞。
  5. 恢复:从干净的备份恢复系统,并逐步恢复服务。
  6. 分析事件原因,改进安全策略,防止再次发生。

Linux 服务器安全是一个系统性工程,需要从物理、网络、系统、应用和管理等多个层面进行加固,本指南提供了一个全面的框架,您可以根据服务器的具体用途和风险等级,选择性地实施这些策略。

安全不是一蹴而就的,而是一个持续迭代、不断优化的过程。 定期审查、更新和演练您的安全策略,是保持服务器长期安全的关键。

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