Skip to main content

使用 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.confserver.conf 发我,我可以帮你进一步做最优配置。