# 使用 logrotate 自动切割Openvpn日志

下面给你一套 **在生产环境可直接使用、不会中断 OpenVPN 服务、无日志丢失风险** 的安全日志分割方案，适用于 Ubuntu/Debian/CentOS 等绝大多数系统。

---

# ✅ **一、最推荐方式：使用 logrotate 自动切割（安全、不重启、不丢日志）**

OpenVPN 默认使用 `syslog` 或直接写文件，都可以用 logrotate 来切割。

## **1. 创建 OpenVPN 日志轮转配置**

创建文件：

```bash
sudo nano /etc/logrotate.d/openvpn

```

写入以下内容（可直接复制）：

```bash
/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
}

```

---

## 🔍 **配置说明**

<table id="bkmrk-%E9%85%8D%E7%BD%AE%E9%A1%B9-%E5%90%AB%E4%B9%89-daily-%E6%AF%8F%E5%A4%A9%E5%88%86%E5%89%B2%E4%B8%80%E6%AC%A1-"><thead><tr><th>配置项</th><th>含义</th></tr></thead><tbody><tr><td>`daily`</td><td>每天分割一次</td></tr><tr><td>`rotate 7`</td><td>保留 7 天日志</td></tr><tr><td>`compress`</td><td>Gzip 压缩旧日志</td></tr><tr><td>`delaycompress`</td><td>延迟一天再压缩，避免影响写入</td></tr><tr><td>`kill -USR1 $(pidof openvpn)`</td><td>**让 OpenVPN 重新打开日志文件（不会重启）**</td></tr></tbody></table>

> `USR1` 是 OpenVPN 官方推荐的 **安全 reopen-log** 信号，不会影响连接。

---

## **2. 手动立即触发一次切割**

这样可以测试是否生效：

```bash
sudo logrotate -f /etc/logrotate.d/openvpn

```

切割后你会看到：

```
/var/log/openvpn/openvpn.log
/var/log/openvpn/openvpn.log.1.gz

```

---

# ✅ **二、确认 OpenVPN 的 log 文件是否允许切割**

检查 OpenVPN 配置：

```bash
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 强制清空（会导致服务日志失效）**

以下危险操作千万不要做：

```bash
echo "" > /var/log/openvpn/openvpn.log
rm openvpn.log

```

因为：

- OpenVPN 仍会写入旧的文件描述符
- 会导致日志不再更新
- 有时会令 debug 无法进行

除非你同时发 `USR1` 信号让其 reopen。

---

# 🔧 **四、如果你想立即安全清空日志**

**先切割，再通知 OpenVPN 重新打开文件：**

```bash
sudo mv /var/log/openvpn/openvpn.log /var/log/openvpn/openvpn.log.bak
sudo kill -USR1 $(pidof openvpn)

```

此后 `openvpn.log` 会重新生成（0 字节），100% 安全。

---

# 🧾 **五、如果日志增长异常快，该检查什么？**

常见原因：

<table id="bkmrk-%E5%8E%9F%E5%9B%A0-%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95-%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%A2%91%E7%B9%81%E9%87%8D%E8%BF%9E-%E6%A3%80%E6%9F%A5%E7%BD%91%E7%BB%9C"><thead><tr><th>原因</th><th>解决办法</th></tr></thead><tbody><tr><td>客户端频繁重连</td><td>检查网络、证书有效期</td></tr><tr><td>配置开启了 `verb 6~9` 超详细日志</td><td>调低：`verb 3`</td></tr><tr><td>DoS 攻击/暴力扫描</td><td>设置防火墙、fail2ban</td></tr><tr><td>报错：TLS Error / Authenticate failed</td><td>检查证书、时间同步</td></tr></tbody></table>

建议查看最新 20 行日志：

```bash
tail -f /var/log/openvpn/openvpn.log

```

---

# 🎯 如需，我可以帮你：

✔ 优化你的 OpenVPN 配置  
✔ 根据现网日志判断是否被攻击  
✔ 配置 fail2ban 保护 OpenVPN  
✔ 优化日志级别（verb）减少磁盘写入

如果你愿意，把你当前的 `openvpn.conf` 或 `server.conf` 发我，我可以帮你进一步做最优配置。

你现在遇到的报错原因非常明确：

# ❌ **OpenVPN 2.6 已经移除了 log-rotate 选项**

你的错误日志：

```
Options error: Unrecognized option ... log-rotate (2.6.14)

```

这就是 OpenVPN 2.6 版本（Ubuntu 24.04 默认）不再支持 `log-rotate` 的结果。

---

# 🎯 **根因：你加了 log-rotate 0，但 OpenVPN 2.6 不支持该指令**

因此：

✔ openvpn 启动失败  
✔ 客户端无法连接  
✔ 日志不断被 truncate（因为进程一直在崩溃重启）

---

# ✅ **正确方式（OpenVPN 2.6）**

OpenVPN **2.6 已经废弃所有日志轮转选项**，包括：

- `log-rotate`
- `mute-replay-warnings`
- 部分 `suppress-timestamps` 行为变化

OpenVPN 官方建议：

# ✔ **日志轮转只能靠 logrotate，不再由 OpenVPN 自己处理**

---

# ⭐ 正确配置（最终版）

请把 `/etc/openvpn/server.conf` 中删除该行：

```
log-rotate 0

```

并保留：

```
log-append /var/log/openvpn/openvpn.log

```

这是 OpenVPN 2.6 唯一推荐的日志配置。

---

# ⭐ 正确的 logrotate（最终版）

`/etc/logrotate.d/openvpn` 保持：

```
/var/log/openvpn/openvpn.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    create 640 root adm
    sharedscripts
    postrotate
        if pidof openvpn >/dev/null; then
            kill -HUP $(pidof openvpn)
        fi
    endscript
}

```

---

# ⭐ 重启 OpenVPN（你使用的是 SysV init，不是 systemd）

执行：

```
/etc/init.d/openvpn restart
实际使用
systemctl restart openvpn
```

确认是否成功：

```
ps aux | grep openvpn
tail -f /var/log/openvpn/openvpn.log

```

你应该看到：

```
Initialization Sequence Completed

```

表示服务已恢复。

---

# ⭐ 现在检查客户端连接

一旦服务启动正常，OpenVPN 客户端应该可以重新连接。

---

# 🔍 如果你愿意，我可以帮你进一步优化

你可发我：

```
cat /etc/openvpn/server.conf

```

我可以帮你清理所有不兼容 2.6 的旧参数（常见问题）。