V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tool2d
V2EX  ›  程序员

为了对抗互联网背景噪音,写了一个 fail2ban。

  •  
  •   tool2d · 2023-07-10 13:36:13 +08:00 · 4373 次点击
    这是一个创建于 537 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本来想用现成的 py 工具,结果服务器弄了半天配置没生效,想一想原理也不复杂,还是自己手动写一个吧。

    就两步,第一步收集/var/log/auth.log 失败的 sshd 日志。第二步根据登录失败次数排序,用程序自动化添加 ip 到 iptables drop 黑名单里。

    本来以为把 ssh 的 22 端口,换到别的端口能解决问题,结果并不是。以前也不关心这些,心想 opensshd 密码那么强,完全不可能攻破。但是我发现有些 ip 不讲武德,短时间内连续暴力 sshd 密码破解上千次,这种情况还不少,白白为这些互联网噪音,浪费流量,浪费 CPU 资源,不值得。
    23 条回复    2023-07-12 12:52:48 +08:00
    RoccoShi
        1
    RoccoShi  
       2023-07-10 13:39:23 +08:00
    现成的 fail2ban 有什么问题?
    tool2d
        2
    tool2d  
    OP
       2023-07-10 13:41:44 +08:00
    @RoccoShi banaction 没生效,我也不知道为啥。

    自己写 fail2ban ,以后还有别的用途。www 这种服务也需要一大堆 IP 黑名单。
    ysicing
        3
    ysicing  
       2023-07-10 14:05:53 +08:00
    我自己写了一个程序,收集所有我认为的黑 ip ,然后所有服务器共享
    u20237
        4
    u20237  
       2023-07-10 14:10:46 +08:00
    没人访问我的网站怎么办?我只适合使用 ipv6 80 做 HTTP 服务(我不开防火墙,但一些人访问不到,也有一些人能访问的到)
    hxy100
        5
    hxy100  
       2023-07-10 14:11:57 +08:00
    现成的 fail2ban 也支持 www 等各种服务啊,估计是你自己暂时没玩明白。
    u20237
        6
    u20237  
       2023-07-10 14:14:33 +08:00
    既然是 Linux ,难道还有解决不了的网络配置问题?
    deplivesb
        7
    deplivesb  
       2023-07-10 14:17:43 +08:00
    现有的 fail2ban 不都可以么?
    tool2d
        8
    tool2d  
    OP
       2023-07-10 14:23:57 +08:00
    @deplivesb 是可以,不过在 chatgpt 的帮助下,相关代码很简单,一个晚上就搞定了,就当成是一个练手项目了。
    tool2d
        9
    tool2d  
    OP
       2023-07-10 14:25:26 +08:00
    @hxy100 "现成的 fail2ban 也支持 www 等各种服务啊"

    我的意思是用接口的形式,去对接 www 服务。不仅仅是分析日志。

    有些 www 内部错误全部输出到日志没太大必要。
    linuxgo
        10
    linuxgo  
       2023-07-10 15:56:53 +08:00
    我的 fail2ban 连续 5 次 ssh 错误就永久 ban 掉,很好用啊,还用自己重写
    kkocdko
        11
    kkocdko  
       2023-07-10 17:20:47 +08:00   ❤️ 1
    SSH 密码被暴力破解其实占用不了多少系统资源,可以自行分析一下,自己暴破一下然后看看系统负载。无论你用的是 OpenSSH 还是什么别的服务端,“上千次”这个量级都不会有任何问题。

    fail2ban 这种依赖于日志分析的实现本质上是很不可靠的,而且 IP 换来换去,黑名单列表会越来越大,我曾经见过有个人的 ip 很有规律,结果没有开 fail2ban 之前还好,开了之后内存占用几天后涨到数十兆的情况。

    如果你依然觉得被不断尝试很不爽,很无聊,那么目前流行的方法是使用 knockd 。
    systemcall
        12
    systemcall  
       2023-07-10 17:38:45 +08:00 via Android
    常用的加密算法,一秒钟几千次,每次就不到 1k ,真的算不上什么
    你可以自己跑一下 crypto 的一些 benchmark ,一般来说,sha1 和 sha256 ,正经一点的路由器都能跑到几 Mbps ,更不用说电脑
    tool2d
        13
    tool2d  
    OP
       2023-07-10 18:20:32 +08:00
    @systemcall sshd 还算相对好,很多网页爬虫真的是无下限。

    我也不太想封 IP ,只是互联网什么破事都会被无限放大。所谓人善被人欺,太友善的结果,就是别人来搞你。
    dnsaq
        14
    dnsaq  
       2023-07-10 18:52:23 +08:00 via iPhone
    所以为什么要开放 sshd 服务,白名单不行?
    ysw
        15
    ysw  
       2023-07-10 19:16:17 +08:00
    不开 ssh 端口,用 cloudflared 映射出来
    documentzhangx66
        16
    documentzhangx66  
       2023-07-10 20:37:08 +08:00
    @tool2d

    开源软件日常了。

    各种开源软件,其配置功能,总会有几个没有作用,或者逻辑奇奇怪怪。

    比如 fping ,那个 timeout 参数的逻辑,感觉是程序员喝多了设计出来的。
    pppan
        17
    pppan  
       2023-07-10 21:26:22 +08:00
    推荐端口敲门的方案: https://github.com/EtherDream/js-port-knocking
    使用白名单,而不是像 fail2ban 这种黑名单
    vibbow
        18
    vibbow  
       2023-07-10 22:08:06 +08:00
    sshguard 了解一下
    docx
        19
    docx  
       2023-07-10 22:19:24 +08:00 via Android
    我就是 sshd 白名单,常用 ip 段丢进去很省事
    laydown
        20
    laydown  
       2023-07-11 05:14:55 +08:00 via iPhone
    改端口,上两步。破了的话我认栽。
    Love4Taylor
        21
    Love4Taylor  
       2023-07-11 11:26:48 +08:00 via iPhone
    改端口+关密码强制密钥,完事
    realpg
        22
    realpg  
       2023-07-11 15:57:30 +08:00
    @linuxgo #10
    首先把非东亚的 IP 按/8 整体 ban 掉就可以解决 90%的扫描口令
    yagamil
        23
    yagamil  
       2023-07-12 12:52:48 +08:00
    www 的爬虫,先把访问日志读一些,统计 ua 头, 去除几个常见的搜索引擎的 spider 外,把莫名奇妙的 ban 就也不多了。
    不要写代码,在云服务商的 cdn 页面加下就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:14 · PVG 23:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.