广告位

美国服务器安全加固 Checklist:让你的服务器固若金汤

频道: 日期: 浏览:50

美国服务器安全加固是一个系统性工程,需要从多个层面进行防护。本Checklist提供了全面的安全加固指南,帮助你将服务器安全提升到企业级水平。

一、系统基础安全

1.1 系统更新与补丁管理

  • 定期更新系统

    bash

    # Ubuntu/Debiansudo apt update && sudo apt upgrade -ysudo apt autoremove# CentOS/RHELsudo yum update -ysudo yum autoremove

  • 配置自动安全更新

    bash

    # Ubuntu/Debiansudo dpkg-reconfigure -plow unattended-upgrades# CentOS/RHELsudo yum install yum-cron -ysudo systemctl enable yum-cronsudo systemctl start yum-cron

  • 内核版本管理

    bash

    # 查看当前内核uname -r# 清理旧内核 (Ubuntu)sudo apt purge $(dpkg -l | awk '/^ii linux-image-*/ && !/'"$(uname -r | sed "s/-generic//g")"'/ {print $2}')

1.2 用户与权限管理

  • 禁用root远程登录

    bash

    sudo nano /etc/ssh/sshd_config# 设置: PermitRootLogin no

  • 创建专用管理用户

    bash

    # 创建管理员用户sudo useradd -m -s /bin/bash adminusersudo passwd adminuser# 添加到sudo组sudo usermod -aG sudo adminuser  # Ubuntu/Debiansudo usermod -aG wheel adminuser # CentOS/RHEL

  • 配置强密码策略

    bash

    sudo nano /etc/pam.d/common-password# 添加: password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1sudo nano /etc/login.defs# 设置:# PASS_MAX_DAYS 90# PASS_MIN_DAYS 1# PASS_WARN_AGE 14

  • 检查空密码账户

    bash

    sudo awk -F: '($2 == "") {print $1}' /etc/shadow

1.3 文件系统安全

  • 关键文件权限设置

    bash

    sudo chmod 600 /etc/shadowsudo chmod 600 /etc/gshadowsudo chmod 644 /etc/passwdsudo chmod 644 /etc/group# 保护SSH密钥sudo chmod 700 /home/*/.sshsudo chmod 600 /home/*/.ssh/authorized_keyssudo chmod 600 /home/*/.ssh/id_*

  • 配置文件完整性监控

    bash

    # 安装AIDE (Advanced Intrusion Detection Environment)sudo apt install aide -y  # Ubuntu/Debiansudo yum install aide -y  # CentOS/RHEL# 初始化数据库sudo aideinitsudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db# 定期检查sudo aide --check

二、网络安全加固

2.1 防火墙配置

  • 配置UFW (Ubuntu/Debian)

    bash

    sudo ufw resetsudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow sshsudo ufw allow httpsudo ufw allow httpssudo ufw enablesudo ufw status verbose

  • 配置firewalld (CentOS/RHEL)

    bash

    sudo firewall-cmd --permanent --remove-service=dhcpv6-clientsudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reloadsudo firewall-cmd --list-all

  • 配置iptables (通用)

    bash

    # 基础iptables配置脚本sudo nano /etc/iptables.rules

    bash

    *filter
    :INPUT DROP [0:0]:FORWARD DROP [0:0]:OUTPUT ACCEPT [0:0]# 允许本地回环-A INPUT -i lo -j ACCEPT# 允许已建立的连接-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 允许SSH-A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT# 允许HTTP/HTTPS-A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT-A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT# 记录拒绝的包-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7COMMIT

2.2 SSH安全加固

  • 修改SSH默认配置

    bash

    sudo nano /etc/ssh/sshd_config

    bash

    # 基本安全配置Port 2222                          # 修改默认端口PermitRootLogin no                 # 禁止root登录PasswordAuthentication no          # 禁用密码认证PubkeyAuthentication yes           # 启用密钥认证PermitEmptyPasswords no            # 禁止空密码MaxAuthTries 3                     # 最大认证尝试次数ClientAliveInterval 300            # 客户端活跃间隔ClientAliveCountMax 2              # 客户端活跃计数LoginGraceTime 60                  # 登录宽限时间# 高级安全配置AllowUsers adminuser               # 只允许特定用户Protocol 2                         # 只使用SSHv2X11Forwarding no                   # 禁用X11转发AllowTcpForwarding no              # 禁用TCP转发

    bash

    sudo systemctl restart sshd

  • 配置SSH密钥认证

    bash

    # 在客户端生成密钥ssh-keygen -t ed25519 -C "server_access"# 将公钥复制到服务器ssh-copy-id -i ~/.ssh/id_ed25519.pub adminuser@server_ip -p 2222

2.3 端口与服务管理

  • 关闭不必要的服务

    bash

    # 查看运行的服务sudo systemctl list-units --type=service --state=running# 禁用不必要的服务sudo systemctl disable bluetoothsudo systemctl disable cupssudo systemctl disable avahi-daemon

  • 端口扫描自检

    bash

    # 使用netstat检查监听端口sudo netstat -tulpn# 使用ss检查sudo ss -tulpn# 使用nmap扫描sudo nmap -sS -O localhost

三、服务安全配置

3.1 Web服务器安全

  • Nginx安全配置

    nginx

    # /etc/nginx/nginx.confserver_tokens off;                  # 隐藏版本信息client_max_body_size 10m;           # 限制请求体大小# 安全头部add_header X-Frame-Options "SAMEORIGIN" always;add_header X-XSS-Protection "1; mode=block" always;add_header X-Content-Type-Options "nosniff" always;add_header Referrer-Policy "no-referrer-when-downgrade" always;add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;# 限制请求方法if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 405;}

  • Apache安全配置

    apache

    # /etc/apache2/conf-available/security.conf
    ServerTokens Prod
    ServerSignature Off
    TraceEnable Off
    FileETag None
    
    # 安全头部
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Content-Type-Options "nosniff"

3.2 数据库安全

  • MySQL安全配置

    bash

    # 运行安全脚本sudo mysql_secure_installation# 创建专用用户CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO 'appuser'@'localhost';FLUSH PRIVILEGES;

  • PostgreSQL安全配置

    bash

    # 修改pg_hba.confsudo nano /etc/postgresql/*/main/pg_hba.conf# 设置: host all all 127.0.0.1/32 md5

四、入侵检测与监控

4.1 Fail2ban配置

  • 安装和配置Fail2ban

    bash

    sudo apt install fail2ban -y# 创建本地配置sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo nano /etc/fail2ban/jail.local

    ini

    [DEFAULT]bantime = 3600findtime = 600maxretry = 3banaction = iptables-multiportbackend = auto[sshd]enabled = trueport = 2222filter = sshdlogpath = /var/log/auth.logmaxretry = 3[sshd-ddos]enabled = trueport = 2222filter = sshd-ddoslogpath = /var/log/auth.logmaxretry = 5

4.2 系统监控与日志

  • 配置日志轮转

    bash

    sudo nano /etc/logrotate.conf# 设置: rotate 52, weekly, compress

  • 安装和配置监控工具

    bash

    # 安装基础监控工具sudo apt install htop iotop nethogs -y# 配置进程监控sudo nano /etc/monit/monitrc

  • 关键文件监控脚本

    bash

    #!/bin/bash# file-integrity-check.shIMPORTANT_FILES=(
      "/etc/passwd"
      "/etc/shadow" 
      "/etc/group"
      "/etc/sudoers"
      "/etc/ssh/sshd_config"
      "/etc/hosts")for file in "${IMPORTANT_FILES[@]}"; do
      if [ -f "$file" ]; then
        current_hash=$(sha256sum "$file" | awk '{print $1}')
        stored_hash=$(grep "$file" /var/log/file-integrity.log 2>/dev/null | awk '{print $1}')
        
        if [ "$stored_hash" != "$current_hash" ]; then
          echo "ALERT: $file has been modified!" | logger -t FILE_INTEGRITY      echo "$current_hash $file" >> /var/log/file-integrity.log    fi
      fidone

五、内核与系统参数加固

5.1 内核参数优化

  • 配置sysctl安全参数

    bash

    sudo nano /etc/sysctl.d/99-security.conf

    bash

    # 网络安全net.ipv4.ip_forward = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.default.accept_redirects = 0net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0net.ipv4.conf.all.log_martians = 1net.ipv4.conf.default.log_martians = 1# 防止SYN Flood攻击net.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_syn_backlog = 2048net.ipv4.tcp_synack_retries = 2# 核心转储限制fs.suid_dumpable = 0# 内存保护kernel.randomize_va_space = 2

    bash

    sudo sysctl -p /etc/sysctl.d/99-security.conf

5.2 文件系统加固

  • 配置文件系统挂载选项

    bash

    # 编辑 /etc/fstabsudo nano /etc/fstab# 为分区添加安全选项,例如:# /dev/sda1 / ext4 defaults,noatime,nodiratime,nodev,nosuid 0 1# tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0

六、应用安全

6.1 Web应用防火墙

  • 配置ModSecurity (Apache)

    bash

    sudo apt install libapache2-mod-security2 -ysudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf# 启用规则sudo nano /etc/modsecurity/modsecurity.conf# 设置: SecRuleEngine On

  • 配置NAXSI (Nginx)

    bash

    # 安装NAXSIsudo apt install nginx-naxsi -y# 启用基础规则sudo nano /etc/nginx/naxsi_core.rules

6.2 SSL/TLS安全配置

  • 生成强SSL配置

    nginx

    # Nginx SSL配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;ssl_prefer_server_ciphers off;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 启用HSTSadd_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

七、备份与恢复

7.1 备份策略

  • 配置自动备份

    bash

    #!/bin/bash# backup-script.shBACKUP_DIR="/backup/$(date +%Y%m%d)"MYSQL_USER="backupuser"MYSQL_PASSWORD="SecurePassword123"mkdir -p $BACKUP_DIR# 备份重要配置文件tar -czf $BACKUP_DIR/etc-backup.tar.gz /etc/# 备份网站数据tar -czf $BACKUP_DIR/website-backup.tar.gz /var/www/# 备份数据库mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases > $BACKUP_DIR/databases.sql# 清理旧备份(保留30天)find /backup -name "*.tar.gz" -mtime +30 -deletefind /backup -name "*.sql" -mtime +30 -delete

  • 配置定时备份

    bash

    # 添加到crontabsudo crontab -e# 添加: 0 2 * * * /root/backup-script.sh

八、安全审计与合规

8.1 定期安全扫描

  • 使用Lynis进行安全审计

    bash

    # 安装Lynissudo apt install lynis -y# 运行审计sudo lynis audit system

  • 使用OpenVAS进行漏洞扫描

    bash

    # 安装OpenVASsudo apt install openvas -ysudo gvm-setup

8.2 合规性检查

  • CIS基准检查

    bash

    # 下载CIS基准脚本wget https://github.com/ovh/debian-cis/archive/master.zipunzip master.zipcd debian-cis-mastersudo ./hardening.sh --audit

九、应急响应计划

9.1 入侵检测响应

  • 创建应急响应脚本

    bash

    #!/bin/bash# incident-response.shLOG_FILE="/var/log/incident-response.log"echo "$(date): 开始应急响应检查" >> $LOG_FILE# 检查可疑进程echo "=== 可疑进程检查 ===" >> $LOG_FILEps aux --forest >> $LOG_FILE# 检查网络连接echo "=== 网络连接检查 ===" >> $LOG_FILEnetstat -tulpan >> $LOG_FILE# 检查计划任务echo "=== 计划任务检查 ===" >> $LOG_FILEcrontab -l >> $LOG_FILEls -la /etc/cron.* >> $LOG_FILE# 检查用户登录echo "=== 用户登录检查 ===" >> $LOG_FILElast >> $LOG_FILEecho "$(date): 应急响应检查完成" >> $LOG_FILE

9.2 安全事件报告模板

  • 创建安全事件报告模板

    bash

    # security-incident-report.txt安全事件报告=============事件ID: 
    发现时间: 
    报告人: 
    影响系统: 
    
    事件描述:
    ---------
    
    影响评估:
    ---------
    
    处理措施:
    ---------
    
    根本原因分析:
    -------------
    
    预防措施:
    ---------

十、持续监控与改进

10.1 安全监控仪表板

  • 配置安全监控脚本

    bash

    #!/bin/bash# security-dashboard.shecho "=== 服务器安全状态仪表板 ==="echo "更新时间: $(date)"echo ""# 系统更新状态echo "1. 系统更新状态:"if [ -f /var/run/reboot-required ]; then
      echo "   ✗ 需要重启"else
      echo "   ✓ 系统已更新"fi# 防火墙状态echo "2. 防火墙状态:"if sudo ufw status | grep -q "Status: active"; then
      echo "   ✓ 防火墙已启用"else
      echo "   ✗ 防火墙未启用"fi# Fail2ban状态echo "3. Fail2ban状态:"if sudo systemctl is-active fail2ban > /dev/null; then
      banned_count=$(sudo fail2ban-client status sshd | grep "Currently banned" | awk '{print $4}')
      echo "   ✓ Fail2ban运行中,当前封禁: $banned_count"else
      echo "   ✗ Fail2ban未运行"fi# 端口监听检查echo "4. 端口监听检查:"suspicious_ports=$(sudo netstat -tulpn | grep LISTEN | grep -vE ":22|:80|:443|:25" | wc -l)if [ $suspicious_ports -eq 0 ]; then
      echo "   ✓ 无异常端口监听"else
      echo "   ✗ 发现 $suspicious_ports 个可疑监听端口"fi

10.2 定期安全评估

  • 月度安全检查清单

    bash

    # monthly-security-check.sh#!/bin/bashMONTH=$(date +%Y%m)REPORT_FILE="/var/log/security-report-$MONTH.log"{
      echo "月度安全报告 - $MONTH"
      echo "======================"
      
      # 1. 用户账户检查
      echo "1. 用户账户审计"
      echo "--------------"
      awk -F: '($3 >= 1000) {print $1}' /etc/passwd  
      # 2. 权限检查
      echo ""
      echo "2. 文件权限审计"
      echo "--------------"
      find / -perm -4000 -type f 2>/dev/null  
      # 3. 日志分析
      echo ""
      echo "3. 安全日志分析"
      echo "--------------"
      grep "Failed password" /var/log/auth.log | wc -l
      } > $REPORT_FILE

总结

这个完整的安全加固Checklist涵盖了从基础系统安全到高级监控的各个方面。建议按照以下步骤实施:

  1. 立即执行:基础防火墙、SSH加固、系统更新

  2. 短期计划:服务安全配置、入侵检测部署

  3. 长期维护:持续监控、定期审计、安全培训

记住,安全是一个持续的过程,不是一次性的任务。定期复查和更新这个Checklist,确保你的服务器始终保持最佳安全状态。

关键成功要素:

  • 自动化安全检查流程

  • 建立安全事件响应机制

  • 定期进行安全培训和意识提升

  • 保持系统和应用的最新状态

  • 实施深度防御策略

通过严格执行这个Checklist,你的服务器将建立多层次的安全防护,大大降低被攻击的风险。

生成文章图片 (44).jpg

关键词: