此次维护内容:

  • 移动现有日志文件到备份服务器
  • 为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日志)。