V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
elboble
V2EX  ›  Linux

ssh 一分钟被打 1000 次, fail2ban 有用吗?

  •  
  •   elboble · 2022-04-22 08:03:32 +08:00 · 8885 次点击
    这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Apr 20 23:40:03 debian99 sshd[2443]: Failed password for invalid user liyanjun from 134.209.229.252 port 44720 ssh2
    Apr 20 23:40:03 debian99 sshd[2450]: Failed password for invalid user liyaocheng from 134.209.229.252 port 44948 ssh2
    Apr 20 23:40:03 debian99 sshd[2453]: Failed password for invalid user liyifei from 134.209.229.252 port 45180 ssh2
    Apr 20 23:40:03 debian99 sshd[2431]: Failed password for invalid user lixy from 134.209.229.252 port 43946 ssh2
    Apr 20 23:40:03 debian99 sshd[2415]: Failed password for invalid user lixiang from 134.209.229.252 port 43168 ssh2
    Apr 20 23:40:03 debian99 sshd[2459]: Failed password for invalid user liyongmin from 134.209.229.252 port 45918 ssh2
    Apr 20 23:40:03 debian99 sshd[2441]: Failed password for invalid user liyanhao from 134.209.229.252 port 44636 ssh2
    Apr 20 23:40:03 debian99 sshd[2446]: Failed password for invalid user liyanjun from 134.209.229.252 port 44794 ssh2
    @:~$ sudo cat /var/log/auth.log | grep 134.209.229.252 | grep invalid | wc -l
    948
    @:~$ 
    

    暂时没用 fail2ban ,自己写个脚本,每一分钟扫一次 auth.log,大于 10 次就 ban ,但是有的 ip 一分钟就能尝试 1000 次,太凶残了,能限制 ssh 并发个数吗,超过 10 个,就不要管了。

    第 1 条附言  ·  2022-04-26 10:56:33 +08:00

    这么多回复还有收藏,我把脚本贴出来,也是网上搜的,然后改改只能算能用,大家帮忙多提意见。

    第一,第二行是搜集auth.log中失败的

    第三行是我用ngrok做内网穿透,这台机是服务端,12345是透给内网一台机器的ssh端口,也会被敲,但是不好在内网机器上做类似的屏蔽,因为在内网机器看起来都是127.0.0.1登录的,不能区分正常和恶意的。只好在服务端上查,如果4个以上session同时登录ssh,那就是不正常的,从服务端禁止掉。

    这个脚本每分钟运行一次,syslog.conf里关掉cron的log,否则auth.log都是cron的记录。

    #!/bin/sh
    #ssh login fail 4 times,will be put in denyhosts
    
    cat /var/log/auth.log |awk '/Failed/{print $(NF-3)}' |sort |uniq -c |awk '{print $2"="$1;}' >/var/log/black.list
    cat /var/log/auth.log |awk '/Connection closed/{print $( NF-3)}' | sort | uniq -c | awk '{print $2"="$1;}' >> /var/log/black.list
    netstat -anp |awk '/6:12345/{print$(NF-2)}' | awk -F: '{print$1}' | sort | uniq -c | awk '{print $2"="$1;}' >> /var/log/black.list
    for i in `cat /var/log/black.list`
    do
        IP=`echo $i |awk -F= '{print $1}'`
        NUM=`echo $i |awk -F= '{print $2}'`
        if [ $NUM -gt 4 ]; then
            grep $IP /etc/hosts.deny >/dev/null
            if [ $? -gt 0 ]; then
                echo "ALL: $IP" >>/etc/hosts.deny
                iptables -I INPUT -s $IP -j DROP
                echo "$IP is denied now." 
            fi
        fi
    done
    
    第 2 条附言  ·  2022-06-17 07:40:44 +08:00

    查日志,2022.6.16-17之间居然封了180个IP,来源全球都有,难道是真的被盯上了,间隔大概10几分钟一波,从下午到半夜。

    不过碰巧拨号21天了,早上换了ip。

    DROP all -- 50-239-114-84-static.hfc.comcastbusiness.net anywhere
    DROP all -- 210-65-10-144.hinet-ip.hinet.net anywhere
    DROP all -- host81-133-189-239.in-addr.btopenworld.com anywhere
    DROP all -- 125-227-75-51.hinet-ip.hinet.net anywhere
    DROP all -- 5.145.161.9 anywhere
    DROP all -- 45.55.75.215 anywhere
    DROP all -- 123.139.156.125 anywhere
    DROP all -- 43.247.102.81 anywhere
    DROP all -- 161.132.96.90 anywhere
    DROP all -- 117.22.228.62 anywhere
    DROP all -- 190-107-162-132.levefibra.net.br anywhere
    DROP all -- 18.43.175.210.in-addr.arpa anywhere
    DROP all -- 190-107-162-136.levefibra.net.br anywhere
    DROP all -- 218.92.175.102 anywhere
    DROP all -- 191-243-61-57.netpeu.com.br anywhere
    DROP all -- ip-36-4.sn3.clouditalia.com anywhere
    DROP all -- 125-227-87-122.hinet-ip.hinet.net anywhere
    DROP all -- 120.221.150.219 anywhere
    DROP all -- 1.234.79.66 anywhere
    DROP all -- 223.95.81.159 anywhere
    DROP all -- 106.14.61.79 anywhere
    DROP all -- ipv4-80-39-78.as55666.net anywhere
    DROP all -- 85.184.70.58 anywhere
    DROP all -- 110.188.70.99 anywhere
    DROP all -- 113.105.94.66 anywhere

    65 条回复    2022-04-23 03:36:15 +08:00
    villivateur
        1
    villivateur  
       2022-04-22 08:06:39 +08:00 via Android
    禁用密码登录就好了
    billgong
        2
    billgong  
       2022-04-22 08:13:38 +08:00 via iPhone   ❤️ 3
    f2b 当然有用了,就是为了防这种情况的。这一点并发问题不大,没必要自己写。
    JeromeCui
        3
    JeromeCui  
       2022-04-22 08:13:46 +08:00   ❤️ 1
    如果是自己的机器,把用 geoip 把国外的 ip 全给禁了会好很多
    Mithril
        4
    Mithril  
       2022-04-22 08:15:37 +08:00
    我自己的服务器都是直接把端口封了,需要的时候再从控制台里开。
    主要是也没什么需要经常 SSH 上去的工作,甚至有的时候直接用网页的就够了。
    lijinma
        5
    lijinma  
       2022-04-22 08:29:26 +08:00
    禁用密码登陆吧
    mingl0280
        6
    mingl0280  
       2022-04-22 08:35:50 +08:00
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshuser --set
    iptables -A INPUT -m recent --update --name sshuser --seconds 3600 --hitcount 5 -j DROP
    随便抄了个 IPTables 规则,一小时内只能连接 5 次,超过则阻断。
    顺便一提 f2b 其实也差不多……
    imnpc
        7
    imnpc  
       2022-04-22 08:38:09 +08:00
    我的都是密钥登录 + 更换高位端口
    deasty
        8
    deasty  
       2022-04-22 08:38:37 +08:00 via iPhone
    fail2ban + Google 动态口令
    elboble
        9
    elboble  
    OP
       2022-04-22 08:41:17 +08:00
    @billgong 我看 f2b 原理也是定期扫 log ,1 分钟是最低间隔了,如果不能限制访问频率,那和我这个脚本效果一样啊,1 分钟疯狂跑字典,从 di 跑到 li 了
    anytk
        10
    anytk  
       2022-04-22 08:42:36 +08:00
    复杂点用 iptables ,简单点 ufw limit ,外加改 ssh 端口,禁止密码登陆
    markgor
        11
    markgor  
       2022-04-22 08:43:43 +08:00
    >能限制 ssh 并发个数吗,超过 10 个,就不要管了。
    那别人一直打,你正常登陆不也登陆不了?

    我一般都是改 sshd 端口+f2b 的,但就现有日志来看,就算不加 f2b 也一样。所以建议你还是直接改 ssh 端口吧
    cslive
        12
    cslive  
       2022-04-22 08:46:57 +08:00
    禁用密码登录,让他扫
    angryfish
        13
    angryfish  
       2022-04-22 08:49:01 +08:00
    使用防火墙,平常不用的时候关闭所有目标访问,自己用的时候,允许自己 ip 访问就好了。
    我一般情况都不怎么登录 ssh ,只有发布程序的时候登录,感觉还行。
    luxor
        14
    luxor  
       2022-04-22 09:03:04 +08:00
    这不是被打,而是有人在暴力破解 ssh 的账号。改端口也没啥用,很快就能再次连过来。最有效的办法还是建立 iptables ssh 端口的白名单规则。
    elboble
        15
    elboble  
    OP
       2022-04-22 09:06:17 +08:00
    @mingl0280 这个没限 ip ,被打了自己也上不了吧?
    moxuanyuan
        16
    moxuanyuan  
       2022-04-22 09:06:52 +08:00
    我家里路由器也是。。天天被扫
    Fri Apr 22 08:56:40 2022 auth.info sshd[12203]: Invalid user demo from 93.95.230.165 port 54250
    Fri Apr 22 08:56:40 2022 auth.info sshd[12203]: Connection closed by invalid user demo 93.95.230.165 port 54250 [preauth]
    Fri Apr 22 08:57:09 2022 auth.info sshd[12316]: Invalid user demo from 93.95.230.165 port 54478
    Fri Apr 22 08:57:10 2022 auth.info sshd[12316]: Connection closed by invalid user demo 93.95.230.165 port 54478 [preauth]
    Fri Apr 22 08:57:39 2022 auth.info sshd[12487]: Invalid user demo from 93.95.230.165 port 54702
    Fri Apr 22 08:57:40 2022 auth.info sshd[12487]: Connection closed by invalid user demo 93.95.230.165 port 54702 [preauth]
    elboble
        17
    elboble  
    OP
       2022-04-22 09:08:59 +08:00
    @luxor @anytk @imnpc 已经是高位端口了。
    就是普通家宽,看来只能禁止密码登录了事。
    wu67
        18
    wu67  
       2022-04-22 09:09:10 +08:00
    先把密码登陆关了.
    我印象中是可以用白名单的吧? ssh 只放行自己常用的机器的 ip. 当然如果没有公网 ip 、全是动态的, 那可能有点难办
    HeyEvan
        19
    HeyEvan  
       2022-04-22 09:16:39 +08:00   ❤️ 1
    我的做法

    1. 禁用 root 登录,更改默认 22 端口
    2. 服务器防火墙开放 SSH ,云防火墙关闭 SSH
    3. 安装 ZeroTier

    平时通过 Zerotier 连过去,要是连不上或连接缓慢,直接开放云防火墙,用完再关
    aru
        20
    aru  
       2022-04-22 09:23:37 +08:00
    怎么会没用呢。
    攻击者的 IP 是有限的,封一个少一个,一段时间就清净了
    但是 fail2ban 的默认封禁时间是 10 分钟,记得调成一周或一月,还有扫描时间范围设成 1 天
    m4d3bug
        21
    m4d3bug  
       2022-04-22 09:25:49 +08:00 via Android
    开个 cockpit 用算了,sshd 都不开
    duzhor
        22
    duzhor  
       2022-04-22 09:32:40 +08:00   ❤️ 3
    修改以下设置减少 99%攻击

    ```
    生成密钥
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -N '' -q
    ```

    把密钥保存到本地

    ```
    #/etc/ssh/sshd_config
    Port 23456 #修改 SSH 端口
    PermitRootLogin prohibit-password #root 禁止密码和交互登录
    PasswordAuthentication no #禁止密码登录
    ```

    修改前记得开启防火墙端口. 重启 ssh 服务
    des
        23
    des  
       2022-04-22 09:47:54 +08:00 via iPhone   ❤️ 1
    你可能搜索的是 端口敲门
    makelove
        24
    makelove  
       2022-04-22 09:50:21 +08:00
    从来不折腾这种,只要起个合理长度的密码或禁密码就可以了
    webshe11
        25
    webshe11  
       2022-04-22 09:50:51 +08:00
    @elboble #9 我记得 Fail2ban 用的是 inotify 吧?
    Mark24
        26
    Mark24  
       2022-04-22 10:12:47 +08:00   ❤️ 1
    上周好像有个新闻。美国对中国网络发起攻击。提权了就会当肉鸡攻击俄罗斯、白俄罗斯。
    lolizeppelin
        27
    lolizeppelin  
       2022-04-22 10:17:44 +08:00
    端口改了没....?
    没改端口的话,改个端口能屏蔽 95%
    iqoo
        28
    iqoo  
       2022-04-22 10:21:03 +08:00
    ssh 用高位端口,加上 iptables 防端口扫描就可以

    https://github.com/EtherDream/anti-portscan
    3dwelcome
        29
    3dwelcome  
       2022-04-22 10:27:17 +08:00
    @iqoo 我还在想,端口怎么防扫描,原来是下陷阱,真有创意。
    FullBridgeRect
        30
    FullBridgeRect  
       2022-04-22 11:05:35 +08:00
    @elboble 如果对自己的用户名密码有自信,f2b 也够用了,即使再凶残被探测到了就 ban 了,就 1 分钟的事
    justrand
        31
    justrand  
       2022-04-22 11:32:45 +08:00
    关闭密码登录就不管了,我刚才去看了下每天 10w 条扫描日志,不管他就行了。
    davidyin
        32
    davidyin  
       2022-04-22 11:37:31 +08:00 via Android
    指定允许登录的 IP ,白名单。
    yujinchn
        33
    yujinchn  
       2022-04-22 12:32:31 +08:00
    可以设置连续超过多少次就 ban 掉 ip 的吧
    yujinchn
        34
    yujinchn  
       2022-04-22 12:33:10 +08:00
    就用 fail2ban 限制,很快的
    huangzxx
        35
    huangzxx  
       2022-04-22 12:34:43 +08:00
    正确姿势:换端口,只允许密钥登录
    iBugOne
        36
    iBugOne  
       2022-04-22 12:53:24 +08:00 via Android
    fail2ban 没有性能问题,只要你姿势正确。它扫描日志有个 inotify ( pyinotify )后端,可以随日志变化来增量扫描,就像 tail -f 一样
    dengshen
        37
    dengshen  
       2022-04-22 13:01:20 +08:00 via iPhone
    禁用密码登陆+证书登陆+改 sshd 端口
    woshinide300yuan
        38
    woshinide300yuan  
       2022-04-22 13:05:52 +08:00
    我都是用安全组里的限制 IP 访问 22 端口,不知道有用没。反正我不写自己的 IP ,我打不开 SSH 都!~
    hgc81538
        39
    hgc81538  
       2022-04-22 13:51:59 +08:00
    改成很長+複雜密碼
    例如: ZZ&7A:Y_J@Te2]mM2I#Fy@U?N8jmg~`q|0!M%Zi-|e-8vsD?|9l]llg2!6~q6zkb
    tiny1994
        40
    tiny1994  
       2022-04-22 13:55:00 +08:00
    可以试试新出来的工具~
    CrowdSec
    mingl0280
        41
    mingl0280  
       2022-04-22 14:07:02 +08:00
    @elboble 你自己给你自己的 IP 开白名单啊,有啥困难的?不就是在前面加一条 ACCEPT 的事情?另外不知道为啥你不设这个但是我 22 端口是不用密码的……
    suifengdang666
        42
    suifengdang666  
       2022-04-22 14:44:42 +08:00
    fail2ban 的搜索时间可以说是近实时,基本上 1s 左右可以检测到 login failed 存在并输出到 fail2ban.log
    gesse
        43
    gesse  
       2022-04-22 16:42:45 +08:00
    直接 ban c 段 ip 啊。
    ctro15547
        44
    ctro15547  
       2022-04-22 16:52:59 +08:00
    有用,已经 ban 了几个 W 的 ip 了 ,每个都封 1 个月 爱打就打吧 累了
    shellic
        45
    shellic  
       2022-04-22 17:30:59 +08:00
    禁掉密码登录换密钥登录,瞬间清净了
    documentzhangx66
        46
    documentzhangx66  
       2022-04-22 18:09:41 +08:00
    这其实非常简单。

    攻击者,会先扫描 tcp 22 端口,如果扫不出来,才去扫高位端口。

    所以,你在服务器上,先把 ssh 改为高位端口,然后做个脚本:

    只要有 IP 连接 tcp 22 ,直接永久封掉它的 IP 。
    cco
        47
    cco  
       2022-04-22 18:33:15 +08:00
    从来不开放 22 端口
    从来不使用密码登录
    linglin0924
        48
    linglin0924  
       2022-04-22 18:33:58 +08:00
    当时端口默认,也是一堆脚本小子扫。后来端口改成 6w+以上,每次登录的 banner 就很清爽了。
    zpfhbyx
        49
    zpfhbyx  
       2022-04-22 18:54:35 +08:00
    😃 加个 2fa 就屏蔽了大部分了..
    elboble
        50
    elboble  
    OP
       2022-04-22 19:16:38 +08:00
    @documentzhangx66 是个办法,但是不能轮询,要用中断。
    SpicaStar
        51
    SpicaStar  
       2022-04-22 19:22:18 +08:00
    22 端口只对 ipv6 开放不就行了,如果是服务器域名不要直接解析到机器上
    想扫你无异于大海捞针
    datocp
        52
    datocp  
       2022-04-22 19:31:14 +08:00 via Android
    搜索一下 iptables recent hacker/ipset ,实现一点不输 fail2ban 。制造陷阱,动态封锁。
    documentzhangx66
        53
    documentzhangx66  
       2022-04-22 19:43:55 +08:00
    @elboble 直接改 fail2ban 的代码就是轮询,改 iptables 代码就是中断。看你怎么用。我喜欢后者。
    acbot
        54
    acbot  
       2022-04-22 19:54:38 +08:00
    除开 Web 80 443 这种端口不方便改之外,其他服务改非常用端口 + IP 白名单段(不要给我说动态 IP ,或者说么有公网啥的,我要说在现有大 NAT 环境下,都不难统计出来),能解决大部分安全问题!
    AS4694lAS4808
        55
    AS4694lAS4808  
       2022-04-22 20:05:00 +08:00 via Android
    @m4d3bug 如果要远程管理还得开着 sshd 。。
    icegaze
        56
    icegaze  
       2022-04-22 20:05:17 +08:00 via Android
    敲端口很好,
    自己设置几个不特定端口顺序,
    能杜绝一切 ssh 登录的尝试… …
    yeqizhang
        57
    yeqizhang  
       2022-04-22 20:29:11 +08:00 via Android
    host.deny 禁 22 host.allow 再允许国内的 ip 段,比如我就 allow 我这个省份,最后一道防线是定时处理日志找出 ip 用 iptable 禁用
    pengtdyd
        58
    pengtdyd  
       2022-04-22 21:29:09 +08:00
    换端口啊!!!!!!把 22 端口封了
    EVJohn
        59
    EVJohn  
       2022-04-22 21:34:23 +08:00
    换端口,或者上个 zerotier/tinc/wg ,22 只对 sdlan 服务
    aaa5838769
        60
    aaa5838769  
       2022-04-22 21:38:52 +08:00
    换端口+key 登陆+防火墙白名单。
    tomcats
        61
    tomcats  
       2022-04-22 22:09:14 +08:00
    看了你的贴,我才想起我有 2 台 vps ,买了几年一直都是默认的,上去看了下日志,幸好我密码够长字符种类够多,没被破解。赶紧改了端口,禁止密码登陆,日志干净多了。
    docx
        62
    docx  
       2022-04-22 22:14:03 +08:00 via iPhone
    sshd 整个白名单,只加自己常用的 IP 段,一般都能安静了
    YaakovZiv
        63
    YaakovZiv  
       2022-04-22 22:14:25 +08:00
    不需要往系统里安软件,如果自己发起访问的 IP 是固定的,在虚拟防火墙开启白名单,只允许制定 IP 进行 ssh ,其他的会自动被虚拟防火墙拦截,系统内无开支压力。 系统内安软件,量大的时候,系统就浪费一部分资源。
    Dart
        64
    Dart  
       2022-04-22 23:03:54 +08:00
    这种不是用 aws 的 security group 吗
    saleacy
        65
    saleacy  
       2022-04-23 03:36:15 +08:00 via Android
    我服务端防火墙是关闭状态 就把 ssh 端口 禁止 root 登录 脚本遍历 secure 一分钟超过三次拉入 hosts.deny
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1540 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:02 · PVG 01:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.