2022年4月

nginx自动屏蔽不友好的ip

查看nginx日志的时候发现大量的404302尝试访问不存在的资源,大概率是使用工具扫描。

{"connection": "2572288","pid": "176228","request_id": "7d5dcaac3e4be47a536a4a0d1b5c7abb","request_length": "157","remote_addr": "52.170.115.255","time_local": "08/Apr/2022:17:44:50 +0800","status":"302","host":"fengqi.me","uri":"/Panels.txt","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/Panels.txt","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"138","http_x_forwarded_for":"","http_user_agent":"python-requests/2.27.1","upstream_response_time":""}
{"connection": "2572337","pid": "176261","request_id": "cf56fa6708c4b68d1b8e3b4d7871103c","request_length": "150","remote_addr": "52.170.115.255","time_local": "08/Apr/2022:17:45:09 +0800","status":"302","host":"fengqi.me","uri":"/Panels.txt","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/Panels.txt","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"146","http_x_forwarded_for":"","http_user_agent":"python-requests/2.27.1","upstream_response_time":""}
{"connection": "2186500","pid": "164519","request_id": "aa21defaa0a590422420732b52c58f83","request_length": "253","remote_addr": "13.93.105.179","time_local": "08/Apr/2022:16:18:21 +0800","status":"302","host":"fengqi.me","uri":"/new-index.php","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/new-index.php","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"138","http_x_forwarded_for":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36","upstream_response_time":""}

正常用户不会这么访问,所以基本上一个ip重复来这么几次就是有问题的,写个脚本,定时扫描nginxaccess.log统计出频繁的ip,然后干掉。

脚本内容解释:

  • tail -n $line 是用来控制分析最近多少条的日志
  • times 用来控制一个IP重复多少次才干掉
  • conf 是生成的屏蔽列表文件路径,需要在nginx.conf内引入

放到crontab内,每小时执行一次就行了,有些脚本小子可能刷一会儿就换ip,可以缩小执行的频率和条数。

参考

http://www.zuobin.net/2016/05/338.html

我通过自制的Kodi命令行刮削器申请到了JetBrains的开源许可证

项目地址

Kodi 刮削器命令行版本,使用TMDB数据源
带logo、分类、节目表的北京IPTV单播列表
命令行批量字幕命名工具

更早的起源

2021年的双十一我在京东购买了索尼的X91J 65英寸版本,同时幸运的使用了那个2000的特殊优惠券,感谢京东没有回收这个羊毛。

电视安装完成后,我开始着手构建自己的影音环境,在此之前,我是通过PT下载到NAS,然后电脑+2.0音箱播放,没有刮削,这之后我会转移到电视上来。

索尼电视使用的是和当贝合作的Android系统国内特供版,不过也允许用户随意的安装第三方应用,我进行了大量的尝试,最后只保留了Bilibili、Kodi、SmartTubeNext、Netflix、Aptoide这几个应用。

其中Kodi用来管理我从网络下载的电影和剧集,提供海报墙,观看进度跟踪,因为Kodi自带的刮削器不能满足我的需求,tinyMediaManager等半自动又太麻烦,所以我决定自制刮削器。

申请过程

大约4个月前,我研究了下Kodi自带的刮削器的源码,发现大致的原理是Kodi负责扫描视频文件并提取名称,刮削器只能根据处理好的名称来获取信息,这会有很多问题,我在v2ex发帖求助如何改进这个扫描过程,评估大家给的意见后,我决定自制刮削器。

今年1月份的时候,我提交了第一行代码,两天后整理在Github开源,然后开始后续的维护,并且处理了很多特殊情况,还支持了调用Kodi主动刷新媒体库,后续可能还会支持音乐刮削,不过优先级并不高,毕竟在电视上听音乐的场景不多。

本月1号的时候,我申请了JetBrains的开源许可证,这几天放假只顾着玩,今天才发现已经收到许可了,全家桶有效期1年,一年后项目还在活跃就可以续期。鉴于部署成本比较高,而且我也没有去推广,所以项目并不热,只有9个star,不过这并没有影响我的申请。

其他

申请开源许可证,需要打开Github个人主页的邮箱显示,我是在申请成功后重新隐藏。

根据描述,如果一年后许可过期项目不在活跃不再续期,我还是可以继续使用2021.03版本,只是不能再升级,这和付费版本是一样的授权方式。

这个命令行刮削器的具体情况可以去Github主页了解,这里就不详说了,后续我应该还会继续更新,毕竟自己还要用,只是担心1年后可能没有什么可以加的功能导致项目不再活跃。

除开这个刮削器,为了更好的看电视,我还创建了很多其他的小工具,暂时放出来的只有文首的两个,IPTV列表这个配合Kodi的IPTV插件,观看效果还不错,重命名是解决从网上下载的字幕因为命名不规范导致Kodi识别不到的问题。