Linux 服务器安全加固实战:从 SSH 到自动化部署的完整方案 原创

温馨提示:
本文最后更新于 2026-06-20,已超过 1 天没有更新。 若文章内的图片失效(无法正常加载),请留言反馈或直接 联系我

引言

在 2026 年的网络安全环境下,服务器安全已从”可选项”变为”必选项”。无论是个人博客、企业应用还是云原生基础设施,安全加固都是运维工作的第一道防线。然而,很多运维人员在面对安全加固时往往感到无从下手——市面上充斥着碎片化的建议,缺乏系统化的实践指南。

本文将从 Linux 服务器安全加固的实际操作出发,涵盖 SSH 安全、防火墙配置、入侵检测、日志审计、自动化加固等核心主题,提供一套可落地、可验证的安全加固方案。

一、SSH 安全加固

1.1 密钥认证替代密码登录

密码登录是 SSH 安全的第一大隐患。暴力破解工具可以在短时间内尝试数百万个密码组合。切换到密钥认证是最基础也最有效的加固措施。

配置步骤:

  1. 生成密钥对:ssh-keygen -t ed25519 -a 100(推荐 Ed25519 算法,比 RSA 更安全高效)
  2. 复制公钥到服务器:ssh-copy-id user@server
  3. 修改 /etc/ssh/sshd_configPasswordAuthentication no
  4. 重启 SSH 服务:systemctl restart sshd

1.2 SSH 配置文件最佳实践

以下是一份经过安全加固的 sshd_config 配置:

# 协议版本
Protocol 2

# 密钥认证
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 端口与绑定
Port 2222                 # 修改默认端口,减少扫描攻击
ListenAddress 0.0.0.0

# 登录限制
PermitRootLogin prohibit-password  # 禁止 root 密码登录,允许密钥登录
MaxAuthTries 3            # 最大认证尝试次数
MaxSessions 10            # 最大并发会话数
LoginGraceTime 30         # 登录超时时间(秒)

# 空闲超时
ClientAliveInterval 300   # 每 300 秒发送保活包
ClientAliveCountMax 2     # 最大保活失败次数

# 日志与审计
LogLevel VERBOSE          # 详细日志记录

1.3 Fail2Ban 防暴力破解

即使关闭了密码登录,Fail2Ban 仍然是 SSH 安全的重要补充。它通过分析日志文件,对频繁失败的 IP 进行临时封禁。

安装与配置:

# 安装
apt-get install fail2ban

# 创建本地配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# SSH 防护配置
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

二、防火墙与网络访问控制

2.1 iptables/nftables 基础策略

现代 Linux 系统推荐使用 nftables 替代 iptables。以下是一份基础防火墙策略:

#!/bin/bash
# 清空规则
nft flush ruleset

# 创建地址族
nft add table inet filter

# 创建链
nft add chain inet filter input { type filter hook input priority 0\; policy drop\; }
nft add chain inet filter forward { type filter hook forward priority 0\; policy drop\; }
nft add chain inet filter output { type filter hook output priority 0\; policy accept\; }

# 允许已建立的连接
nft add rule inet filter input ct state established,related accept

# 允许本地回环
nft add rule inet filter input iif lo accept

# 允许 SSH(修改为你的端口)
nft add rule inet filter input tcp dport 2222 accept

# 允许 HTTP/HTTPS
nft add rule inet filter input tcp dport { 80, 443 } accept

# 允许 ICMP(ping)
nft add rule inet filter input icmp type { echo-request, echo-reply } accept

# 记录并丢弃其他流量
nft add rule inet filter input log prefix "DROP: " drop

2.2 UFW 简化管理

对于不想直接操作 nftables 的用户,UFW(Uncomplicated Firewall)提供了更友好的接口:

ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

2.3 端口扫描防护

使用 PortSentry 或 psad 检测端口扫描行为:

# 安装 psad
apt-get install psad

# 配置
psad --sig-update
psad -H

# 查看警报
tail -f /var/log/psad/psad_alerts

三、入侵检测与文件完整性监控

3.1 AIDE 文件完整性检查

AIDE(Advanced Intrusion Detection Environment)通过数据库记录文件哈希值,检测文件篡改:

# 安装
apt-get install aide

# 初始化数据库
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 配置监控路径(/etc/aide/aide.conf)
/etc p+i+n+u+g+s+m+c+md5+sha256
/bin p+i+n+u+g+s+m+c+md5+sha256
/sbin p+i+n+u+g+s+m+c+md5+sha256

# 定期检查
aide --check

3.2 rkhunter Rootkit 检测

Rootkit Hunter 可以检测系统中隐藏的恶意软件:

# 安装
apt-get install rkhunter

# 更新特征库
rkhunter --update
rkhunter --propupd

# 执行扫描
rkhunter --check --skip-keypress

# 配置定时扫描(crontab)
0 3 * * * /usr/bin/rkhunter --check --cronjob --report-warnings-only

3.3 实时文件监控

使用 auditd 实现实时文件变更监控:

# 安装
apt-get install auditd audispd-plugins

# 配置规则(/etc/audit/rules.d/audit.rules)
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /var/www/html -p wa -k web_content

# 查看审计日志
ausearch -k identity --start today
aureport -k

四、日志审计与集中管理

4.1 rsyslog 配置最佳实践

日志是安全事件的”黑匣子”,合理配置日志系统至关重要:

# /etc/rsyslog.conf 配置
# 开启远程日志接收
module(load="imudp")
input(type="imudp" port="514")

# 日志格式模板
template(name="SecureFormat" type="string"
  string="%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")

# 按类型分类存储
auth,authpriv.*                 /var/log/secure
cron.*                          /var/log/cron
kern.*                          /var/log/kern.log
*.info;mail.none;authpriv.none  /var/log/messages

4.2 logrotate 日志轮转

防止日志文件无限增长导致磁盘耗尽:

# /etc/logrotate.d/custom
/var/log/secure
/var/log/messages
/var/log/kern.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

4.3 集中日志管理

对于多服务器环境,推荐使用 ELK Stack 或 Loki 实现日志集中管理:

  • Filebeat:轻量级日志采集器,部署在每个节点
  • Logstash:日志解析与过滤
  • Elasticsearch:日志存储与搜索
  • Kibana:日志可视化与告警

五、自动化安全加固脚本

5.1 一键加固脚本

以下是一个综合安全加固脚本的核心逻辑:

#!/bin/bash
# Linux 服务器安全加固脚本

echo "[+] 开始安全加固..."

# 1. 系统更新
apt-get update && apt-get upgrade -y

# 2. 禁用不必要的服务
systemctl disable --now cups bluetooth avahi-daemon

# 3. 内核参数优化
cat >> /etc/sysctl.conf << EOF
# 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
# 禁止 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
# SYN Flood 防护
net.ipv4.tcp_syncookies = 1
EOF
sysctl -p

# 4. 文件权限加固
chmod 640 /etc/shadow
chmod 640 /etc/gshadow
chmod 644 /etc/passwd
chmod 644 /etc/group

# 5. 安装安全工具
apt-get install -y fail2ban rkhunter aide auditd

echo "[+] 安全加固完成!"

5.2 Ansible 自动化部署

对于多服务器环境,使用 Ansible 实现安全加固的自动化:

---
- name: 服务器安全加固
  hosts: all
  become: yes
  tasks:
    - name: 更新系统包
      apt:
        upgrade: dist
        update_cache: yes

    - name: 配置 SSH
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: "{{ item.regexp }}"
        line: "{{ item.line }}"
      loop:
        - { regexp: '^PasswordAuthentication', line: 'PasswordAuthentication no' }
        - { regexp: '^PermitRootLogin', line: 'PermitRootLogin prohibit-password' }
        - { regexp: '^Port', line: 'Port 2222' }

    - name: 配置 UFW
      ufw:
        rule: "{{ item.rule }}"
        port: "{{ item.port }}"
        proto: tcp
      loop:
        - { rule: allow, port: '2222' }
        - { rule: allow, port: '80' }
        - { rule: allow, port: '443' }

六、持续监控与应急响应

6.1 建立安全基线

安全加固不是一次性工作,而是一个持续的过程。建立安全基线包括:

  • 定期漏洞扫描(推荐 OpenVAS 或 Nessus)
  • CVE 监控(订阅相关产品的安全公告)
  • 配置变更审计(使用 etcd 或 Git 跟踪配置变更)

6.2 应急响应流程

当检测到安全事件时,遵循以下流程:

  1. 隔离:立即断开受影响服务器的网络连接
  2. 取证:保存内存快照、日志文件、进程列表
  3. 分析:确定攻击向量、影响范围、数据泄露情况
  4. 清除:移除恶意软件、修补漏洞
  5. 恢复:从备份恢复系统、重置所有密码
  6. 复盘:分析根本原因、更新安全策略

结语

服务器安全加固是一项系统工程,没有"银弹"。本文提供的方案覆盖了从基础 SSH 加固到自动化部署的完整链路,适用于个人服务器到企业级集群的不同场景。关键在于:安全不是配置完就结束的,需要持续监控、定期审计、及时响应。

记住一个原则:最小权限——只开放必要的端口、只授予必要的权限、只运行必要的服务。遵循这个原则,你的服务器安全性将提升一个数量级。