Debian SFTP如何防止恶意攻击
小樊
35
2025-11-20 08:21:18
Debian SFTP 防恶意攻击实用清单
一 基础加固
- 保持系统与软件为最新:执行 apt update && apt upgrade -y,及时修补 OpenSSH 等组件漏洞。
- 禁用 root 远程登录:在 /etc/ssh/sshd_config 设置 PermitRootLogin no。
- 优先使用密钥认证:启用 PubkeyAuthentication yes,在客户端生成 4096 位 RSA 密钥对并部署公钥到 ~/.ssh/authorized_keys;在确认密钥可用后再关闭密码登录 PasswordAuthentication no。
- 禁止空密码:设置 PermitEmptyPasswords no。
- 更改默认端口:将 Port 22 改为非标准端口(如 2222),仅作为“安全通过 obscurity”的辅助手段,仍需配合密钥与防火墙。
- 限制可登录主体:使用 AllowUsers your_username@your_ip 或 DenyUsers 精确控制访问来源与账户。
- 会话与资源控制:设置 MaxAuthTries 3–5、MaxSessions 3–5,减少暴力尝试与并发滥用空间。
- 连接保活与超时:设置 ClientAliveInterval 300、ClientAliveCountMax 0,自动断开空闲会话。
二 访问控制与网络边界
- 防火墙最小化放行:使用 ufw allow OpenSSH 或 iptables 仅开放 SSH/SFTP 端口;对外仅暴露必要端口。
- 来源 IP 白名单:在 sshd_config 用 AllowUsers user@IP/CIDR 限制;或在边界防火墙对 SSH 端口做 IP 白名单。
- 入侵防御:部署 Fail2ban,对 /var/log/auth.log 的失败登录进行自动封禁,例如:
- 安装:apt install fail2ban
- 配置(/etc/fail2ban/jail.local):
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
- 启动:systemctl restart fail2ban
- 禁用不必要服务与端口:关闭未使用的 TCP/UDP 端口与后台服务,降低攻击面。
三 SFTP 专用安全配置
- 使用 internal-sftp 并强制 SFTP:在 /etc/ssh/sshd_config 设置 Subsystem sftp internal-sftp,对特定用户/组使用 Match 段并指定 ForceCommand internal-sftp,避免 shell 逃逸。
- Chroot 监狱:对 SFTP 用户启用 ChrootDirectory %h,将其根目录限制在主目录;注意 ChrootDirectory 上级目录必须由 root 拥有且权限为 755,否则 internal-sftp 会拒绝登录。
- 目录与权限示例:
- 家目录:chown root:root /home/sftpuser;chmod 755 /home/sftpuser
- 可写目录:mkdir /home/sftpuser/uploads;chown sftpuser:sftpusers /home/sftpuser/uploads;chmod 755 /home/sftpuser/uploads
- 禁用隧道与转发:在 Match Group sftpusers 中设置 AllowTcpForwarding no、X11Forwarding no,减少滥用可能。
- 用户隔离:创建 sftpusers 组,将仅用于传输的用户加入该组并应用上述 Match 策略。
四 加密与算法强化
- 主机密钥完整性:确保 /etc/ssh/ssh_host_*_key 存在并受保护,禁用过时或不安全的密钥类型(如 DSA)。
- 密钥交换与加密套件:在 sshd_config 中禁用不安全的 KexAlgorithms(如 diffie-hellman-group1-sha1),优先使用 curve25519-sha256、ecdh-sha2-nistp256/384/521 等现代曲线;仅启用强加密与 MAC(如 chacha20-poly1305@openssh.com、aes256-gcm@openssh.com)。
- 协议与压缩:设置 Protocol 2;如非必要可关闭 Compression delayed 以减少侧信道风险。
五 监控审计与运维
- 集中日志与告警:持续监控 /var/log/auth.log 与 journalctl -u ssh,对异常登录、频繁失败、来源突变设置告警;可使用 Logwatch 做日报汇总。
- 完整性校验:定期校验 /etc/ssh/sshd_config 与 authorized_keys 的完整性,变更留痕。
- 强制访问控制:在支持的系统中启用 AppArmor/SELinux 对 sshd/sftp 进程进行最小权限约束。
- 备份与演练:对 用户数据、配置与密钥 做离线/异地备份;定期在测试环境验证 Fail2ban 与 Chroot 策略的有效性,变更前保留可回滚方案。