•
此次维护内容:
- 移动现有日志文件到备份服务器
- 为OpenVPN服务添加fail2ban规则
- 通过debugfs找回了被删除了日志文件
经查,本次VPN服务器磁盘空间被占满是由于服务器遭到重播攻击,服务器接到大量编号错误的包,由于每个错误包都会被OpenVPN写入日志,这导致日志体积急剧膨胀(100KB/s的速度增长),磁盘被迅速占满。且触发大量IO操作,使系统负载上升,网络性能大幅下降(校内连接VPN,VPN网关ping延迟高达200ms)。遂在事发后删除了日志文件,但这下闯下大祸,OpenVPN的日志系统不会侦测日志文件变化,而是继续写在老的文件中,因此空间并没有腾出来。然而OpenVPN是通过inode访问文件的,能够正常写入,因此日志文件依然在不断膨胀。
通过查找资料,使用debugfs工具恢复了被删除的文件,并清空了日志。具体如下:
查看被删除的文件index node
| # lsof | grep deleted |
返回:
openvpn 2874 root 1w REG 8,1 76118359 228107 /var/log/openvpn-eth0.log (deleted)
openvpn 2874 root 2w REG 8,1 76118359 228107 /var/log/openvpn-eth0.log (deleted)
openvpn 2891 root 1w REG 8,1 164998894 228418 /var/log/openvpn-eth1.log (deleted)
openvpn 2891 root 2w REG 8,1 164998894 228418 /var/log/openvpn-eth1.log (deleted)
恢复文件:
# debugfs -w /dev/disk/by-uuid/2f0734bc-bd74-4a0c-8183-d635c8fc4651 -R ‘link <228107> /var/log/openvpn-eth0.log’
# debugfs -w /dev/disk/by-uuid/2f0734bc-bd74-4a0c-8183-d635c8fc4651 -R ‘link <228418> /var/log/openvpn-eth1.log’
清空文件:
# echo -n > /var/log/openvpn-eth0.log
# echo -n > /var/log/openvpn-eth1.log
此次维护为服务器增加fail2ban规则,当错误尝试次数超过100时,该ip会被列入fail2ban阻止列表中,具体为:
增加/etc/fail2ban/filter.d/openvpn.conf,内容:
[Definition]
_daemon = openvpn
failregex = ^.*\/<HOST>:[0-9]{4,5} TLS ERROR:.*$
^.*\/<HOST>:[0-9]{4,5} TLS Error:.*$
^.* <HOST>:[0-9]{4,5} VERIFY ERROR:.*$
^.*\/<HOST>:[0-9]{4,5} Authenticate\/Decrypt packet error:.*$
ignoreregex =
增加以下内容至/etc/fail2ban/jail.conf:
[openvpn]
enabled = true
port = openvpn
protocol = udp
filter = openvpn
logpath = /var/log/openvpn-*.log
maxretry = 100
如果您的正常VPN请求受到影响,请致信lug(AT)ustc.edu.cn(附带您的VPN日志)。