从零构建Linux服务器安全加固工程实践
date: 2025-11-07
excerpt: "从零构建Linux服务器安全加固工程实践:涵盖SSH防护、系统更新、用户权限、文件权限、防火墙配置等核心安全控制点,提供可复现的安全配置脚本和最佳实践。"
category: "security"
从零构建Linux服务器安全加固工程实践
前言
在当今网络环境下,服务器安全不再是"可选项",而是"生死线"。一台暴露在公网的Linux服务器,可能在上线5分钟内就遭遇暴力破解、挖矿木马或勒索病毒。绝大多数安全事件源于基础配置不当和弱密码。据《2024数据泄露调查报告》,83%的云服务器入侵源于配置不当和弱密码。
本文将带你进行全面的Linux安全加固工程实践,涵盖SSH安全配置、防火墙策略、用户权限最小化、关键服务保护等核心内容,助你构建坚不可摧的生产环境防线。
一、安全加固核心原则
在动手之前,先牢记三大安全原则:
- 最小权限:用户和服务只拥有完成任务所需的最小权限
- 纵深防御:多层防护(网络层、系统层、应用层)
- 默认拒绝:未明确允许的即为禁止(尤其适用于防火墙)
提示:安全是持续过程,不是一次性任务。
二、SSH安全加固:第一道防线
SSH是远程管理的核心,也是攻击者的首要目标。90%的入侵始于SSH暴力破解。
1. 禁用root直接登录(必做!)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vim /etc/ssh/sshd_config
修改以下配置:
PermitRootLogin no
重启后,必须通过普通用户sudo su -切换root。
2. 禁用密码登录,启用密钥认证(推荐)
PasswordAuthentication no
PubkeyAuthentication yes
配置流程:
ssh-keygen -t rsa -b 4096 -C "admin@company.com"
ssh-copy-id user@server_ip
优势:几乎杜绝暴力破解。
3. 修改默认SSH端口(可选但推荐)
Port 2222
避免22端口被扫描器重点关照。需同步在防火墙放行新端口。
警告:修改后确保新端口能访问,避免被锁在服务器外!
4. 限制登录用户和来源IP
AllowUsers alice bob@192.168.1.0/24
只允许alice和来自内网的bob登录。
5. 设置登录超时与失败锁定
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
结合fail2ban自动封禁暴力破解IP:
sudo apt install fail2ban
sudo yum install fail2ban
6. 重启SSH服务
sudo systemctl restart sshd
三、防火墙配置:网络层防护
防火墙是网络层的"守门人",必须配置为"默认拒绝"模式。
方案一:firewalld(CentOS/RHEL/Fedora推荐)
sudo systemctl status firewalld
sudo firewall-cmd --state
sudo systemctl enable firewalld --now
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
firewall-cmd --list-all
方案二:ufw(Ubuntu简化防火墙)
sudo apt install ufw
sudo ufw allow 2222/tcp
sudo ufw allow http
sudo ufw allow https
sudo ufw deny out to any
sudo ufw status
sudo ufw enable
方案三:iptables(通用,Debian/Ubuntu可用)
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save
四、用户与权限最小化
1. 删除或禁用无用账户
cat /etc/passwd
cat /etc/group
userdel sync
userdel shutdown
userdel halt
userdel uucp
userdel operator
userdel games
userdel gopher
groupdel adm
groupdel lp
groupdel games
groupdel dip
2. 创建并配置新用户
adduser username
passwd username
usermod -aG sudo username
sudo visudo
3. 强制使用强密码
编辑PAM配置文件启用密码策略:
sudo vim /etc/pam.d/common-password
sudo vim /etc/pam.d/system-auth
password required pam_cracklib.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
4. 最小化sudo权限
sudo cat /etc/sudoers
sudo visudo
Defaults !shell_escape
五、关键文件与目录保护
1. 锁定关键配置文件
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
lsattr /etc/passwd
chattr -i /etc/passwd
使用chattr +i后,文件将无法被修改、删除或重命名,即使是root用户。
2. 设置文件权限
chmod 600 /etc/shadow
chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 600 /etc/ssh/sshd_config
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3. 禁用不必要的服务
systemctl list-units --type=service --state=running
sudo systemctl stop service_name
sudo systemctl disable service_name
六、自动化安全检查脚本
创建一个自动化安全检查和加固脚本:
#!/bin/bash
echo "=== Linux服务器安全加固开始 ==="
echo "1. 更新系统包..."
apt update && apt upgrade -y
echo "2. 安装安全工具..."
apt install -y fail2ban ufw logwatch
echo "3. 备份SSH配置..."
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d)
echo "4. SSH安全加固..."
cat > /etc/ssh/sshd_config.d/99-security.conf <<EOF
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers admin_user
EOF
systemctl restart sshd
echo "5. 配置防火墙..."
ufw --force reset
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
echo "6. 清理不必要的用户..."
for user in sync shutdown halt uucp operator games gopher; do
userdel $user 2>/dev/null || true
done
echo "7. 锁定关键文件..."
chattr +i /etc/passwd 2>/dev/null || true
chattr +i /etc/shadow 2>/dev/null || true
chattr +i /etc/group 2>/dev/null || true
echo "8. 配置fail2ban..."
cat > /etc/fail2ban/jail.local <<EOF
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3
EOF
systemctl enable fail2ban
systemctl start fail2ban
echo "9. 配置自动更新..."
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
echo "=== 安全加固完成 ==="
echo "10. 生成安全检查报告..."
cat > /root/security_report.txt <<EOF
Linux服务器安全加固报告
生成时间: $(date)
========================
SSH配置:
- 端口: 2222
- Root登录: 禁用
- 密码认证: 禁用
- 密钥认证: 启用
防火墙状态:
$(ufw status)
运行的服务:
$(systemctl list-units --type=service --state=running | grep -E '(active|loaded)')
安全工具状态:
- Fail2ban: $(systemctl is-active fail2ban)
- UFW: $(ufw status | head -1)
关键文件状态:
$(ls -la /etc/passwd /etc/shadow /etc/group)
EOF
echo "安全加固完成!报告保存在: /root/security_report.txt"
七、持续监控与维护
1. 日志监控
sudo journalctl -u sshd
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/syslog
sudo logwatch --detail high --mailto your-email@example.com
2. 定期安全检查
创建定期检查脚本:
#!/bin/bash
echo "=== 每周安全检查 ===" > /var/log/security_weekly.log
date >> /var/log/security_weekly.log
echo "=== SSH暴力破解尝试 ===" >> /var/log/security_weekly.log
grep "Failed password" /var/log/auth.log | tail -20 >> /var/log/security_weekly.log
echo "=== Root登录记录 ===" >> /var/log/security_weekly.log
grep "Accepted password for root" /var/log/auth.log >> /var/log/security_weekly.log
echo "=== 新增用户 ===" >> /var/log/security_weekly.log
lastlog | grep "Never" >> /var/log/security_weekly.log
echo "=== 磁盘使用情况 ===" >> /var/log/security_weekly.log
df -h >> /var/log/security_weekly.log
echo "=== 可用更新 ===" >> /var/log/security_weekly.log
apt list --upgradable >> /var/log/security_weekly.log
设置定时任务:
0 2 * * * /path/to/security_check.sh
0 3 * * 0 /path/to/weekly_security_scan.sh
八、最佳实践总结
1. 分层防护策略
- 网络层:防火墙配置、端口管理
- 系统层:用户权限、文件权限、服务管理
- 应用层:SSH配置、数据库安全、Web服务加固
- 监控层:日志分析、入侵检测、行为监控
2. 常用安全检查命令
grep "Failed password" /var/log/auth.log
grep "Accepted password for root" /var/log/auth.log
netstat -tlnp
ss -tlnp
systemctl list-units --type=service --state=running
last
lastlog
top
htop
ps aux --sort=-%cpu | head -10
3. 应急响应准备
- 定期备份重要配置文件
- 准备系统恢复脚本
- 建立事件响应流程
- 保持安全工具更新
结语
Linux服务器安全加固是一个持续的过程,需要定期审查和更新安全配置。本文提供的加固方案涵盖了从基础配置到高级防护的各个方面,建议根据实际业务需求选择合适的安全控制措施。
记住:安全不是一次性的任务,而是需要持续关注和维护的系统工程。将本文的加固步骤脚本化并定期执行,可以大大提高服务器的安全防护能力。
参考资料:
- Linux安全加固实战:从SSH配置、防火墙到用户权限最小化
- 企业级Linux安全指南:SSH、sudo权限、防火墙、入侵检测
- Linux服务器部署后的必备配置与优化指南
安全提示:在实际环境中应用这些配置时,建议先在测试环境中验证,确保不会影响业务服务的正常运行。