从0到1搭建服务器五层安全防线:Ubuntu/CentOS通用落地指南

在公有云时代,一台新上线、暴露在公网的服务器,往往不到几分钟就会被全网扫描并遭遇SSH暴力破解、挖矿木马和后门尝试。很多“事故”并非黑客多高明,而是我们在基础配置上的一丝疏忽。安全不是一次性购买的产品,而是一套可持续的策略和习惯。为此,我整理了一套面向Linux服务器的“五层联防”实战方案,用最少的成本构建防护闭环,兼容常见的 Ubuntu/Debian/CentOS/RHEL,步骤清晰、可复制落地。

这五层分别是:

  • SSH安全加固:更改默认端口、禁用root直登、使用密钥认证,从入口处降低被撞库与扫段命中的概率。
  • Fail2Ban防暴力:基于日志的动态封禁,自动挡住重复失败的来源IP。
  • 防火墙策略:UFW快速上手或iptables精细化控制,只放行业务所需端口,减少攻击面。
  • 入侵检测:通过OSSEC及简单脚本监控异常进程与端口,尽早发现异常行为。
  • 文件完整性:AIDE定期校验关键文件,及时识别被篡改风险。

谁适合阅读与实践:

  • 个人开发者、小团队、初创企业的运维与后端同学
  • 刚接手或即将上线的公有云/IDC主机
  • 想用开源工具构建“防守阵地”的人

使用前的几点提醒:

  • 改SSH配置务必先放行新端口并验证可登录后,再关闭旧端口与重启服务;确保有控制台/带外管理以防锁死。
  • Fail2Ban的日志路径不同发行版略有差异(Debian/Ubuntu多为/var/log/auth.log,CentOS/RHEL多为/var/log/secure),按实际调整。
  • 防火墙生效前确认已放行当前会话所需端口;远程操作建议开第二个会话观测,避免误封断连。
  • 先在测试环境演练,再用于生产;上线后持续关注日志与告警,定期审计与更新。

接下来正文将给出可直接复制执行的命令与配置示例,并标注关键注意点,帮助你在最短时间内为服务器加上一套可解释、可维护的安全“护城河”。

五层联防策略

第一层:SSH安全加固

1. 修改默认端口

# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 修改端口(建议使用10000-65535范围)
Port 22022

# 重启SSH服务
systemctl restart sshd

2. 禁用root直接登录

# 在sshd_config中设置
PermitRootLogin no

# 创建普通用户并加入sudo组
useradd -m -s /bin/bash admin
usermod -aG sudo admin

3. 配置密钥认证

# 生成SSH密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"

# 在服务器上创建authorized_keys
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo"your_public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 禁用密码认证
echo"PasswordAuthentication no" >> /etc/ssh/sshd_config
systemctl restart sshd

第二层:Fail2Ban防暴力破解

1.安装配置Fail2Ban

# Ubuntu/Debian
apt update && apt install fail2ban -y

# CentOS/RHEL
yum install epel-release -y && yum install fail2ban -y

2.自定义SSH防护规则

# 创建本地配置文件
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8 192.168.0.0/16

[sshd]
enabled = true
port = 22022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
EOF

# 启动服务
systemctl enable fail2ban && systemctl start fail2ban

3.查看封禁状态

# 查看被封IP
fail2ban-client status sshd

# 手动解封IP
fail2ban-client set sshd unbanip 192.168.1.100

第三层:防火墙配置

1.UFW简单防火墙

# 启用UFW
ufw enable

# 设置默认策略
ufw default deny incoming
ufw default allow outgoing

# 允许SSH连接(使用自定义端口)
ufw allow 22022/tcp

# 允许Web服务
ufw allow 80/tcp
ufw allow 443/tcp

# 查看规则
ufw status verbose

2.iptables高级配置

#!/bin/bash
# 清空现有规则
iptables -F
iptables -X
iptables -Z

# 设置默认策略
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限速(防暴力破解)
iptables -A INPUT -p tcp --dport 22022 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22022 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
iptables -A INPUT -p tcp --dport 22022 -j ACCEPT

# Web服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 保存规则
iptables-save > /etc/iptables/rules.v4

第四层:入侵检测系统

3.部署OSSEC-HIDS

# 下载安装OSSEC
wget https://github.com/ossec/ossec-hids/archive/3.6.0.tar.gz
tar -xzf 3.6.0.tar.gz && cd ossec-hids-3.6.0
./install.sh

# 配置监控规则
vim /var/ossec/etc/ossec.conf

4.自定义监控脚本

#!/bin/bash
# 系统异常检测脚本
LOG_FILE="/var/log/security_check.log"

# 检查异常进程
check_suspicious_processes() {
    echo"[$(date)] 检查可疑进程..." >> $LOG_FILE
    
    # 检查CPU使用率异常的进程
    ps aux --sort=-%cpu | head -10 | whileread line; do
        cpu=$(echo$line | awk '{print $3}')
        if (( $(echo "$cpu > 80" | bc -l) )); then
            echo"警告:发现高CPU使用率进程: $line" >> $LOG_FILE
        fi
    done
}

# 检查异常网络连接
check_network_connections() {
    echo"[$(date)] 检查网络连接..." >> $LOG_FILE
    
    # 检查异常端口监听
    netstat -tlnp | grep -E ':(1234|4444|5555|8080)' && {
        echo"警告:发现可疑端口监听" >> $LOG_FILE
    }
}

# 执行检查
check_suspicious_processes
check_network_connections

第五层:文件完整性监控

1.使用AIDE工具

# 安装AIDE
apt install aide -y  # Ubuntu/Debian
yum install aide -y  # CentOS/RHEL

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

# 创建检查脚本
cat > /usr/local/bin/aide_check.sh << 'EOF'
#!/bin/bash
aide --check | tee /var/log/aide_check.log
if [ $? -ne 0 ]; then
    echo"文件完整性检查发现异常,请查看日志文件"
    # 可以在这里添加邮件通知
fi
EOF

chmod +x /usr/local/bin/aide_check.sh

# 添加定时任务
echo"0 2 * * * /usr/local/bin/aide_check.sh" | crontab -
原文链接:,转发请注明来源!