Linux运维自学坊

Linux运维自学坊

Linux安全加固指南

发布于 2023年12月10日 | 预计阅读时间 7 分钟
⚠️ 重要提示:在执行任何安全加固操作前,请确保有完整的系统备份,并在测试环境中验证。错误的配置可能导致系统无法访问。

在数字化时代,服务器安全不再是可选项,而是必需品。Linux系统虽然相对安全,但默认配置往往存在诸多安全隐患。本文提供一套完整的Linux安全加固方案,帮助您构建坚如磐石的服务器环境。

1. 系统更新与补丁管理

保持系统更新是安全的第一道防线:

# Ubuntu/Debian
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y

# CentOS/RHEL
sudo yum update -y
sudo yum clean all

# 设置自动安全更新
# Ubuntu/Debian
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

# CentOS/RHEL 8+
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

2. 用户与权限管理

最小权限原则是安全的核心:

# 创建新用户(避免使用root)
sudo adduser username
sudo usermod -aG sudo username  # 授予sudo权限

# 禁用root SSH登录
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# 设置密码策略
sudo apt install libpam-pwquality  # Ubuntu/Debian
sudo yum install libpwquality      # CentOS/RHEL

# 编辑密码策略
sudo nano /etc/security/pwquality.conf
# 设置最小长度、复杂度要求等

3. SSH安全配置

SSH是攻击者的主要入口,必须严格加固:

# 备份原始配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

# 编辑SSH配置
sudo nano /etc/ssh/sshd_config

# 推荐配置
Port 2222                    # 修改默认端口
PermitRootLogin no           # 禁用root登录
PasswordAuthentication no    # 禁用密码登录,使用密钥
PubkeyAuthentication yes     # 启用公钥认证
MaxAuthTries 3               # 最大尝试次数
ClientAliveInterval 300      # 客户端活动间隔
ClientAliveCountMax 2        # 最大活动计数
AllowUsers username          # 只允许特定用户登录

# 重启SSH服务
sudo systemctl restart sshd
💡 提示:修改SSH端口后,确保防火墙允许新端口,并测试连接后再关闭旧端口。

4. 防火墙配置

使用防火墙控制网络访问:

# Ubuntu/Debian (UFW)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp      # SSH新端口
sudo ufw allow 80/tcp        # HTTP
sudo ufw allow 443/tcp       # HTTPS
sudo ufw enable

# CentOS/RHEL (Firewalld)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --remove-service=ssh  # 移除默认SSH
sudo firewall-cmd --reload

5. 文件系统安全

保护关键文件和目录:

# 设置文件权限
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 700 /root
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/shadow

# 安装文件完整性监控工具
sudo apt install aide        # Ubuntu/Debian
sudo yum install aide        # CentOS/RHEL

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

# 定期检查
sudo aide --check

6. 服务最小化

关闭不必要的服务:

# 查看运行中的服务
sudo systemctl list-units --type=service --state=running

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

# 检查监听端口
sudo netstat -tulpn
sudo ss -tulpn

7. 日志监控与分析

建立有效的日志监控机制:

# 安装日志分析工具
sudo apt install logwatch    # Ubuntu/Debian
sudo yum install logwatch    # CentOS/RHEL

# 配置logwatch
sudo nano /etc/logwatch/conf/logwatch.conf

# 查看关键日志
sudo tail -f /var/log/auth.log      # 认证日志
sudo tail -f /var/log/syslog        # 系统日志
sudo journalctl -f                  # systemd日志

# 设置日志轮转
sudo nano /etc/logrotate.conf

8. 入侵检测系统

部署入侵检测系统:

# 安装Fail2ban
sudo apt install fail2ban    # Ubuntu/Debian
sudo yum install fail2ban    # CentOS/RHEL

# 配置Fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

# 添加SSH保护规则
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

# 启动Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

9. 定期安全扫描

使用自动化工具进行安全扫描:

# 安装Lynis安全审计工具
sudo apt install lynis       # Ubuntu/Debian
sudo yum install lynis       # CentOS/RHEL

# 运行安全审计
sudo lynis audit system

# 安装ClamAV病毒扫描
sudo apt install clamav clamav-daemon
sudo freshclam               # 更新病毒库
sudo clamscan -r /home       # 扫描目录

10. 安全备份策略

最后但同样重要的是备份:

# 创建备份脚本
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)

# 备份重要目录
tar -czf $BACKUP_DIR/etc_backup_$DATE.tar.gz /etc
tar -czf $BACKUP_DIR/home_backup_$DATE.tar.gz /home
tar -czf $BACKUP_DIR/var_backup_$DATE.tar.gz /var/www

# 备份数据库(如果有)
# mysqldump -u root -p database > $BACKUP_DIR/db_backup_$DATE.sql

# 保留最近7天的备份
find $BACKUP_DIR -type f -mtime +7 -delete

# 设置定时任务
# sudo crontab -e
# 0 2 * * * /path/to/backup_script.sh

安全不是一次性的任务,而是一个持续的过程。定期审计、及时更新、持续监控是保持系统安全的关键。记住:最安全的系统是那些你了解并持续维护的系统。

安全加固检查清单

通过实施以上安全措施,您的Linux服务器将具备强大的防御能力。但请记住,安全是一个动态的过程,需要根据新的威胁和技术发展不断调整策略。