CentOS 上 vsftpd 防恶意攻击实用清单
一 基础加固
- 禁用匿名访问:将 anonymous_enable=NO,仅开放给受控账户,降低被批量扫描与滥用风险。
- 启用本地用户并限制家目录:设置 local_enable=YES、chroot_local_user=YES,必要时用 allow_writeable_chroot=NO 避免可写 chroot 的安全隐患。
- 精细化用户名单控制:
- /etc/vsftpd/ftpusers 为永久黑名单(如 root 等高权账户),始终生效;
- /etc/vsftpd/user_list 配合 userlist_enable=YES 与 userlist_deny=NO 实现白名单(仅名单内可登录),或 userlist_deny=YES 作为黑名单。
- 传输与审计:开启 xferlog_enable=YES、xferlog_std_format=YES,便于追踪上传下载与异常行为。
- 系统层安全:保持系统与 vsftpd 更新(如 yum update),并启用 SELinux enforcing 配合最小权限原则。
二 网络与访问控制
- 最小暴露面:通过 firewalld 仅放通必要来源与端口,例如放通控制端口 21/tcp,被动模式端口范围(示例 50000–60000/tcp),并仅允许可信 IP/网段 访问。
- 阻断恶意来源:在 firewalld 中对恶意网段使用“拒绝”规则(如 192.168.1.0/24),并持久化与重载。
- 端口策略:控制连接端口与数据端口范围,便于防火墙与 IDS/IPS 精确匹配与限速。
三 加密与传输安全
- 启用 TLS/SSL:配置 ssl_enable=YES,指定证书与私钥(如 rsa_cert_file、rsa_private_key_file),强制或优先加密会话,防止凭据与数据被嗅探。
- 客户端兼容:不支持加密的客户端会被拒绝或提示,需使用支持 TLS/SSL 的客户端(如 FileZilla)。
四 抗暴力破解与资源限制
- 强口令与口令策略:要求用户设置复杂口令,并通过 PAM 策略(如 pam_pwquality.so)设置最小长度与字符类别。
- 登录失败处置:结合 PAM 模块(pam_tally2 或 pam_faillock) 对失败次数进行计数与锁定,阻断暴力破解。
- 会话与速率限制:设置空闲超时(如 idle_session_timeout=600、data_connection_timeout=120)、最大客户端数(max_clients)、每 IP 最大连接数(max_per_ip)、以及速率上限(local_max_rate/anon_max_rate),抑制滥用与资源耗尽。
- 日志与告警:持续监控 /var/log/secure 与 /var/log/vsftpd.log(或 xferlog),对频繁失败、异常 IP、异常时段与异常流量设置告警。
五 推荐最小配置示例
# /etc/vsftpd/vsftpd.conf 最小安全模板(按需增改)
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=NO
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
xferlog_enable=YES
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=100
max_per_ip=5
local_max_rate=51200
anon_max_rate=20480
ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/your_cert.crt
rsa_private_key_file=/etc/pki/tls/private/your_key.key
- 用户名单:在 /etc/vsftpd/ftpusers 中列入 root 等高权账户;在 /etc/vsftpd/user_list 中仅保留允许登录的账户(白名单模式)。
- 防火墙:仅放通 21/tcp 与控制好的被动端口范围(如 50000–60000/tcp),并对恶意来源使用 firewalld reject 规则。
- 说明:vsftpd 原生不提供“登录失败 N 次自动禁用账户”的参数,建议通过 PAM 实现失败计数与锁定。