Ubuntu vsftpd监控与报警设置指南
要确保vsftpd正常运行,首先需掌握其服务状态及网络端口监听情况。
systemctl命令(适用于Ubuntu 16.04及以上版本)查看vsftpd服务是否处于active (running)状态,命令如下:sudo systemctl status vsftpdsudo systemctl start vsftpd启动;若需开机自启,执行sudo systemctl enable vsftpd。sudo ss -tuln | grep -E '21|990'0.0.0.0:21或:::21,说明端口已正常监听。日志是排查问题、检测异常的关键工具,vsftpd的日志主要记录在/var/log/auth.log(Ubuntu默认)或/var/log/vsftpd.log(需手动配置)。
tail -f命令实时输出日志最新内容,便于快速定位问题:sudo tail -f /var/log/auth.log | grep vsftpd/etc/vsftpd.conf中启用xferlog_enable=YES),可使用:sudo tail -f /var/log/vsftpd.loggrep命令筛选异常日志(如登录失败、连接超时),例如查找“invalid user”(无效用户)的登录尝试:sudo journalctl -u vsftpd | grep "invalid user"sudo journalctl -u vsftpd | grep "timeout"暴力破解是FTP服务器的常见威胁,可通过fail2ban自动封禁恶意IP,实现基础报警(邮件通知需额外配置)。
sudo apt install fail2bansudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.baksudo nano /etc/fail2ban/jail.local[vsftpd]
enabled = true
port = ftp,ftp-data
filter = vsftpd
logpath = /var/log/auth.log
maxretry = 5 # 允许的最大失败次数
bantime = 3600 # 封禁时间(秒)
findtime = 600 # 检测时间窗口(秒)
sudo systemctl restart fail2banfindtime时间内失败登录超过maxretry次,fail2ban将自动封禁该IP,并在/var/log/fail2ban.log中记录报警信息。对于生产环境,需更全面的监控(如CPU、内存、连接数)及可视化展示,推荐以下工具:
sudo apt install monitsudo nano /etc/monit/conf.d/vsftpdcheck process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
start program = "/etc/init.d/vsftpd start"
stop program = "/etc/init.d/vsftpd stop"
if failed port 21 protocol ftp then restart
if 5 restarts within 5 cycles then timeout
if memory usage > 200 MB for 5 cycles then alert
sudo systemctl restart monitdocker-compose.yml文件(包含Prometheus、Grafana、node-exporter):version: '3.7'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
docker-compose up -dhttp://localhost:3000,添加Prometheus数据源,导入vsftpd监控仪表盘(如社区提供的“FTP Server Monitoring”模板)。若需特定场景的报警(如每日传输量超过阈值),可编写Shell脚本结合cron定时任务实现。
/usr/local/bin/vsftpd_monitor.sh,内容如下:#!/bin/bash
MAX_CONNECTIONS=50
CURRENT_CONNECTIONS=$(ss -tnp | grep vsftpd | wc -l)
if [ "$CURRENT_CONNECTIONS" -gt "$MAX_CONNECTIONS" ]; then
echo "警告:vsftpd当前连接数($CURRENT_CONNECTIONS)超过阈值($MAX_CONNECTIONS)" | mail -s "vsftpd连接数报警" your-email@example.com
fi
赋予执行权限:sudo chmod +x /usr/local/bin/vsftpd_monitor.shcron定时任务(每5分钟执行一次):sudo crontab -e*/5 * * * * /usr/local/bin/vsftpd_monitor.sh