--- 摄于 2017 年 9 月 藏川线前段
这事要从去年说起,我启用了闲置已久的老电脑作为假的 NAS 服务器在家里,这机器大概有十多年历史了。用的是 archlinux,小巧精悍。一切进展顺利,美滋滋。直到今年过年附近,某次升级内核之后重启,它崩了,毫无防备,kernel panic 的很销魂。可以在开机几分钟到几个小时莫名出现,咱也没太在意,随意将内核版本回滚到一个月之前,看上去好像没啥问题了。
就在昨天(五月九日),一大早起来,它又 kernel panic 了,而且这次更诡异的是,lts 内核重启读不了 block(0,0),导致开机直接 panic。俺并没有装双系统来着,BIOS 引导 + 全盘 ext4,然而,它起不来了。。。
于是,尝试使用非 lts 内核启动,成功了,但,下载旧版本内核就 panic,接着,拿出 U 盘,进入 livecd,下载旧版本 lts 内核,试了几个都不行,读第一个 block 就崩溃,无法正常启动。退而求其次,开始下载,linux-lily 内核,这是社区大佬维护的版本,完成后,正常启动,下载崩溃,这个东西有点不太对劲。
这个下载崩溃问题到底是驱动呢?还是网卡呢?还是硬盘呢?尝试使用网线连接下载,不崩溃了,这是个好现象,说明问题就在无线网卡周边。仔细看了看崩溃的输出(这是手抄的一小段):
....
---[ end trace xxxx ]---
RIP: 0010:brcms_c_ampdu_dotxstatus...
....
linux 内核的驱动模块,brcms 是 broadcom 公司的网卡,随手查了一下,这家公司它的网卡驱动不是开源的,内核自带的是大佬逆向出来的,再结合俺电脑是是多年前的芯片,大胆猜测,逆向的驱动在老芯片上出现了异常行为,这应该是下载东西就内核崩溃的元凶了。
根据 wiki 上的描述,将逆向版本在内核中禁用,再装上适配老芯片的闭源驱动,重启下载,不再崩溃了,完美。
整个解决过程大概是,从早上七点左右到下午两点,俺好不容易留下的休息日就无了,本以为下午可以好好休息,但,其他事情又出了幺蛾子。
在自己博客程序上,一直有奇怪的 panic,刚好这时候抓到了,是个小问题,解决之后,部署上去,发现了一些异常流量,公网上的爬虫,漏洞扫描器等等太多了,它们会尽可能扫一些看起来像是网站的东西,而我看到的异常流量就是这些东西。而巧合的是,因为自己 serve 实现的问题,当时的每一次无效 url 访问都会造成一次磁盘 io 访问,这是一个相对高的开销,是需要修复的问题,不然这些无效访问带来的消耗相对来说太大了。
这些扫描器尤其是漏洞扫描器,讲道理是有点烦的,于是俺寻思着,有木有办法给它爆破掉,讲道理,允许被扫,就允许主动攻击对的吧,如果按规则访问,那也不会被炸。最简单的方式是,弄个 10G 及以上的垃圾数据压缩包,比如全是 0,然后奇怪的 url 访问就直接用 chunk 的方式扔回去,如果对面的没有做防护,且内存太小,这个扫描程序就有可能被直接爆破掉,当然,如果对面是土豪,那也没办法,毕竟能打败魔法的只有魔法。最差最差,也是两败俱伤嘛,这是一种简单的方法,当然,目前还没有启用,流量耗费不是问题,问题是值不值得(狗头.webp
幽灵事件的解决方法只能是重现、定位、大胆猜测+小心验证,虽然解决之后心情舒畅,但过程中的煎熬少不了。
请登录后评论
评论区
加载更多