使用 logrotate 自动切割Openvpn日志
下面给你一套 在生产环境可直接使用、不会中断 OpenVPN 服务、无日志丢失风险 的安全日志分割方案,适用于 Ubuntu/Debian/CentOS 等绝大多数系统。
✅ 一、最推荐方式:使用 logrotate 自动切割(安全、不重启、不丢日志)
OpenVPN 默认使用 syslog 或直接写文件,都可以用 logrotate 来切割。
1. 创建 OpenVPN 日志轮转配置
创建文件:
sudo nano /etc/logrotate.d/openvpn
写入以下内容(可直接复制):
/var/log/openvpn/openvpn.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 640 root adm
postrotate
# 让 OpenVPN 重新打开日志文件 (不会重启 VPN 服务)
if pidof openvpn >/dev/null; then
kill -USR1 $(pidof openvpn)
fi
endscript
}
🔍 配置说明
| 配置项 | 含义 |
|---|---|
daily |
每天分割一次 |
rotate 7 |
保留 7 天日志 |
compress |
Gzip 压缩旧日志 |
delaycompress |
延迟一天再压缩,避免影响写入 |
kill -USR1 $(pidof openvpn) |
让 OpenVPN 重新打开日志文件(不会重启) |
USR1是 OpenVPN 官方推荐的 安全 reopen-log 信号,不会影响连接。
2. 手动立即触发一次切割
这样可以测试是否生效:
sudo logrotate -f /etc/logrotate.d/openvpn
切割后你会看到:
/var/log/openvpn/openvpn.log
/var/log/openvpn/openvpn.log.1.gz
✅ 二、确认 OpenVPN 的 log 文件是否允许切割
检查 OpenVPN 配置:
grep -E "log|status" /etc/openvpn/*.conf
你应看到:
log /var/log/openvpn/openvpn.log
如果配置里启用了 log-append,也没问题:
log-append /var/log/openvpn/openvpn.log
logrotate 依旧能安全切割。
⚠️ 三、不要使用 rm /truncate 强制清空(会导致服务日志失效)
以下危险操作千万不要做:
echo "" > /var/log/openvpn/openvpn.log
rm openvpn.log
因为:
-
OpenVPN 仍会写入旧的文件描述符
-
会导致日志不再更新
-
有时会令 debug 无法进行
除非你同时发 USR1 信号让其 reopen。
🔧 四、如果你想立即安全清空日志
先切割,再通知 OpenVPN 重新打开文件:
sudo mv /var/log/openvpn/openvpn.log /var/log/openvpn/openvpn.log.bak
sudo kill -USR1 $(pidof openvpn)
此后 openvpn.log 会重新生成(0 字节),100% 安全。
🧾 五、如果日志增长异常快,该检查什么?
常见原因:
| 原因 | 解决办法 |
|---|---|
| 客户端频繁重连 | 检查网络、证书有效期 |
配置开启了 verb 6~9 超详细日志 |
调低:verb 3 |
| DoS 攻击/暴力扫描 | 设置防火墙、fail2ban |
| 报错:TLS Error / Authenticate failed | 检查证书、时间同步 |
建议查看最新 20 行日志:
tail -f /var/log/openvpn/openvpn.log
🎯 如需,我可以帮你:
✔ 优化你的 OpenVPN 配置
✔ 根据现网日志判断是否被攻击
✔ 配置 fail2ban 保护 OpenVPN
✔ 优化日志级别(verb)减少磁盘写入
如果你愿意,把你当前的 openvpn.conf 或 server.conf 发我,我可以帮你进一步做最优配置。