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

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

  •  
  •   elboble · 164 天前 · 7146 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条附言  ·  160 天前

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

    第一,第二行是搜集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 条附言  ·  108 天前

    查日志,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  
       164 天前 via Android
    禁用密码登录就好了
    billgong
        2
    billgong  
       164 天前 via iPhone   ❤️ 3
    f2b 当然有用了,就是为了防这种情况的。这一点并发问题不大,没必要自己写。
    JeromeCui
        3
    JeromeCui  
       164 天前   ❤️ 1
    如果是自己的机器,把用 geoip 把国外的 ip 全给禁了会好很多
    Mithril
        4
    Mithril  
       164 天前
    我自己的服务器都是直接把端口封了,需要的时候再从控制台里开。
    主要是也没什么需要经常 SSH 上去的工作,甚至有的时候直接用网页的就够了。
    lijinma
        5
    lijinma  
       164 天前
    禁用密码登陆吧
    mingl0280
        6
    mingl0280  
       164 天前
    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  
       164 天前
    我的都是密钥登录 + 更换高位端口
    deasty
        8
    deasty  
       164 天前 via iPhone
    fail2ban + Google 动态口令
    elboble
        9
    elboble  
    OP
       164 天前
    @billgong 我看 f2b 原理也是定期扫 log ,1 分钟是最低间隔了,如果不能限制访问频率,那和我这个脚本效果一样啊,1 分钟疯狂跑字典,从 di 跑到 li 了
    anytk
        10
    anytk  
       164 天前
    复杂点用 iptables ,简单点 ufw limit ,外加改 ssh 端口,禁止密码登陆
    markgor
        11
    markgor  
       164 天前
    >能限制 ssh 并发个数吗,超过 10 个,就不要管了。
    那别人一直打,你正常登陆不也登陆不了?

    我一般都是改 sshd 端口+f2b 的,但就现有日志来看,就算不加 f2b 也一样。所以建议你还是直接改 ssh 端口吧
    cslive
        12
    cslive  
       164 天前
    禁用密码登录,让他扫
    angryfish
        13
    angryfish  
       164 天前
    使用防火墙,平常不用的时候关闭所有目标访问,自己用的时候,允许自己 ip 访问就好了。
    我一般情况都不怎么登录 ssh ,只有发布程序的时候登录,感觉还行。
    luxor
        14
    luxor  
       164 天前
    这不是被打,而是有人在暴力破解 ssh 的账号。改端口也没啥用,很快就能再次连过来。最有效的办法还是建立 iptables ssh 端口的白名单规则。
    elboble
        15
    elboble  
    OP
       164 天前
    @mingl0280 这个没限 ip ,被打了自己也上不了吧?
    moxuanyuan
        16
    moxuanyuan  
       164 天前
    我家里路由器也是。。天天被扫
    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
       164 天前
    @luxor @anytk @imnpc 已经是高位端口了。
    就是普通家宽,看来只能禁止密码登录了事。
    wu67
        18
    wu67  
       164 天前
    先把密码登陆关了.
    我印象中是可以用白名单的吧? ssh 只放行自己常用的机器的 ip. 当然如果没有公网 ip 、全是动态的, 那可能有点难办
    HeyEvan
        19
    HeyEvan  
       164 天前   ❤️ 1
    我的做法

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

    平时通过 Zerotier 连过去,要是连不上或连接缓慢,直接开放云防火墙,用完再关
    aru
        20
    aru  
       164 天前
    怎么会没用呢。
    攻击者的 IP 是有限的,封一个少一个,一段时间就清净了
    但是 fail2ban 的默认封禁时间是 10 分钟,记得调成一周或一月,还有扫描时间范围设成 1 天
    m4d3bug
        21
    m4d3bug  
       164 天前 via Android
    开个 cockpit 用算了,sshd 都不开
    duzhor
        22
    duzhor  
       164 天前   ❤️ 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  
       164 天前 via iPhone   ❤️ 1
    你可能搜索的是 端口敲门
    makelove
        24
    makelove  
       164 天前
    从来不折腾这种,只要起个合理长度的密码或禁密码就可以了
    webshe11
        25
    webshe11  
       164 天前
    @elboble #9 我记得 Fail2ban 用的是 inotify 吧?
    Mark24
        26
    Mark24  
       164 天前   ❤️ 1
    上周好像有个新闻。美国对中国网络发起攻击。提权了就会当肉鸡攻击俄罗斯、白俄罗斯。
    lolizeppelin
        27
    lolizeppelin  
       164 天前
    端口改了没....?
    没改端口的话,改个端口能屏蔽 95%
    iqoo
        28
    iqoo  
       164 天前
    ssh 用高位端口,加上 iptables 防端口扫描就可以

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

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

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

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