美国服务器安全加固 Checklist:让你的服务器固若金汤
美国服务器安全加固是一个系统性工程,需要从多个层面进行防护。本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涵盖了从基础系统安全到高级监控的各个方面。建议按照以下步骤实施:
立即执行:基础防火墙、SSH加固、系统更新
短期计划:服务安全配置、入侵检测部署
长期维护:持续监控、定期审计、安全培训
记住,安全是一个持续的过程,不是一次性的任务。定期复查和更新这个Checklist,确保你的服务器始终保持最佳安全状态。
关键成功要素:
自动化安全检查流程
建立安全事件响应机制
定期进行安全培训和意识提升
保持系统和应用的最新状态
实施深度防御策略
通过严格执行这个Checklist,你的服务器将建立多层次的安全防护,大大降低被攻击的风险。


扫码关注
微信好友
关注抖音