AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1069102
Accepted
Ali
Ali
Asked: 2021-07-10 01:38:53 +0800 CST2021-07-10 01:38:53 +0800 CST 2021-07-10 01:38:53 +0800 CST

如何保护 SSH?

  • 772

我检查 /var/log/secure 我有这些日志:

Jul  9 13:02:56 localhost sshd[30624]: Invalid user admin from 223.196.172.1 port 37566
Jul  9 13:02:57 localhost sshd[30624]: Connection closed by invalid user admin 223.196.172.1    port 37566 [preauth]
Jul  9 13:03:05 localhost sshd[30626]: Invalid user admin from 223.196.174.150 port 61445
Jul  9 13:03:05 localhost sshd[30626]: Connection closed by invalid user admin 223.196.174.150 port 61445 [preauth]
Jul  9 13:03:16 localhost sshd[30628]: Invalid user admin from 223.196.169.37 port 62329
Jul  9 13:03:24 localhost sshd[30628]: Connection closed by invalid user admin 223.196.169.37 port 62329 [preauth]
Jul  9 13:03:29 localhost sshd[30630]: Invalid user admin from 223.196.169.37 port 64099
Jul  9 13:03:30 localhost sshd[30630]: Connection closed by invalid user admin 223.196.169.37 port 64099 [preauth]
Jul  9 13:03:45 localhost sshd[30632]: Invalid user admin from 223.196.174.150 port 22816
Jul  9 13:03:46 localhost sshd[30632]: Connection closed by invalid user admin 223.196.174.150 port 22816 [preauth]
Jul  9 13:06:17 localhost sshd[30637]: Invalid user admin from 223.196.168.33 port 33176
Jul  9 13:06:17 localhost sshd[30637]: Connection closed by invalid user admin 223.196.168.33 port 33176 [preauth]
Jul  9 13:07:09 localhost sshd[30639]: Invalid user admin from 223.196.173.152 port 61780
Jul  9 13:07:25 localhost sshd[30641]: Invalid user admin from 223.196.168.33 port 54200
Jul  9 13:07:26 localhost sshd[30641]: Connection closed by invalid user admin 223.196.168.33 port 54200 [preauth]
...

似乎有人试图通过 SSH 登录。我禁用 root 用户登录并启用公钥/私钥登录,但这是 DDoS 攻击吗?它是否使用 RAM/CPU?

我应该怎么办?

linux ssh ddos
  • 7 7 个回答
  • 4254 Views

7 个回答

  • Voted
  1. Best Answer
    Simon Richter
    2021-07-10T02:29:04+08:002021-07-10T02:29:04+08:00

    这只是人们扫描易受攻击的服务器的正常 Internet 背景噪音。

    您可以添加一个 iptables 规则来限制传入连接的速率(例如四分钟内四次)以进行简单修复(但如果您打开太多连接或有人伪造源自您地址的 SYN 数据包,这也会将您锁定):

    iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 240 --hitcount 4 --name ssh-v4 --mask 255.255.255.255 --rsource -j REJECT --reject-with tcp-reset
    iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name ssh-v4 --mask 255.255.255.255 --rsource -j ACCEPT
    

    正确的解决方案是使用像fail2ban这样的工具来解析失败登录的日志文件并根据需要创建防火墙规则——需要做更多的工作来设置,但它需要建立连接和触发失败的身份验证,所以它会不像简单的方法那样对伪造的连接尝试或成功登录做出反应。

    • 45
  2. Samuel Prevost
    2021-07-11T08:21:53+08:002021-07-11T08:21:53+08:00

    正如@Simon Richter 提到的那样,这只是互联网背景噪音,您不必担心。您必须确保的几件事是:

    • 您不允许基于密码的身份验证,但只允许公钥身份验证
    • 您可以禁用不安全和设计不佳的密码,删除小的 Diffie-Hellman 模数和其他加密改进
    • 你可以安装fail2ban

    更改端口将使问题消失,但它是通过默默无闻的安全性,它可以创造安全的错觉,而没有提供任何东西。

    以下是围绕 SSH 的其他一些建议,以及对主流“最佳实践”论点的反驳。

    • 9
  3. Criggie
    2021-07-12T05:01:06+08:002021-07-12T05:01:06+08:00

    你在印度吗?列出的所有这些 IP 地址都在块中:

    223.196.160.0 - 223.196.191.255   
    

    根据 WHOIS 数据库分配给

    descr:   Andhra Pradesh State FiberNet Limited
    address: 10-2-1,III Floor, FDC Complex,AC Guards,Hyderabad,Andhra Pradesh-500028
    

    一个短期的解决方案是223.196.160.0/19在防火墙处阻止整个区块,但这是对 IP 地址进行微观管理,并且是一场艰苦的战斗。


    相反,您可以拒绝所有 ssh,除了您知道受信任的源 IP。只需注意不要将自己锁定在自己的主机之外。如果您没有静态 IP,则可以允许阻止,或者可能查看在主机上运行 VPN 服务器。

    或者,如果您不需要允许来自 Internet 的 SSH 连接,只需拒绝它们并仅在需要时重新启用。

    • 3
  4. HatLess
    2021-07-12T05:48:10+08:002021-07-12T05:48:10+08:00

    这是我编写的一个简单脚本,用于阻止所有未经授权的登录我的开发服务器的尝试。

    #!/bin/bash
    
    ban=$HOME/banned.txt
    b_log=/var/log/banned.log
    
    log () {
    cat $ban | uniq >>  $b_log
    }
    
    l_log () {
    lastb | awk '{ print $3 }' | sed -r '/(Mon|Tue|Wed|Thu|Fri|Sat|Sun|boot|tty2)/d' | sort | sed '/^$/d' | uniq | tee $ban
    }
    
    drop () {
    for x in $(cat $ban); do iptables -A INPUT -s $x -j DROP; done
    }
    
    l_log
    drop
    log
    rm -f $ban
    echo > /var/log/btmp
    iptables-save
    

    如果您将脚本设置为每分钟通过 cron 运行一次,它将显着减少日志中的噪音并阻止违规 IP,让它们在被阻止之前只有 1 分钟的时间尝试暴力破解。

    将您的 IP 和您访问服务器的任何其他 IP 插入防火墙是一个好主意iptables -I INPUT -s xxx.xx.xxx.xx -j ACCEPT

    将生成所有被禁止 IP 的日志。

    • 1
  5. user996142
    2021-07-12T16:17:21+08:002021-07-12T16:17:21+08:00
    1. 仅使用基于密钥的身份验证。许多机器人只攻击基于密码的系统。无论如何,使用基于密码的身份验证是个坏主意。
    2. 使用https://www.sshguard.net/:它会在几次登录失败后阻止 IP。
    3. 使用随机端口(不是 22),它会阻止一些机器人。
    4. 确保您的系统不允许 root 登录
    5. 如果您只在家中登录,请考虑只为您的 IP/ISP 或国家/地区打开 SSH。
    • 1
  6. cyqsimon
    2021-07-13T05:49:57+08:002021-07-13T05:49:57+08:00

    1.改变你的sshd监听端口

    听起来很简单,将您的端口从默认值更改为公共 IP 上22的自定义值(例如2200)可以将端口扫描次数从每天数千次减少到几十次。有关教程,请参见此处。

    话虽如此,虽然这确实减少了端口扫描的烦恼,但它并不能提供真正的安全性。“默默无闻的安全”是一个神话,仅此而已。

    2.使用公钥登录,禁用密码登录

    机器人可能会猜对密码,但他们永远不会猜对私钥。只要您使用现代算法并且不会意外泄漏您的密钥。有关教程,请参见此处。

    请注意,这确实意味着您将无法再从任何随机机器登录,除非您随身携带密钥(您需要通过其他方式保护密钥)。

    3.使用fail2ban

    如果他们失败了 5 次,禁止他们在一天之内再次尝试。这将向他们展示。对蛮力尝试非常有效。有关教程,请参见此处。

    不利的一面是,如果有一天你的手指颤抖(喝醉了什么的,我不知道),你可能会把自己锁在外面。

    4.预先禁止已知滥用的IP列表

    像AbuseIPDB这样的来源维护着可通过 API 访问的大量已知恶意 IP。您需要一个 API 密钥才能使用它,但您可以轻松注册一个免费帐户。拉出列表并使用诸如iptables批量禁止那些已知 IP 之类的方法。设置一个 cron 作业以定期将其自动化以获得最佳效果。这是我编写(并且我个人使用)的一个非常简单的脚本来做到这一点。随意将其用作参考,但不要在生产中使用它。

    以我个人的经验,这种方法与方法 3 一样有效(如果不是更有效的话)。


    就我个人而言,我使用了上面列出的所有 4 种方法,而且我的 VPS 在我的安全日志中最多可能会收到一两次恶意登录尝试,在糟糕的一个月里。iptables这是via方法#4的拦截历史:

    $ abip-hist
    Chain abip-ban (1 references)
     pkts bytes target     prot opt in     out     source               destination
      362 14480 DROP       all  --  *      *       45.143.200.6         0.0.0.0/0
      307 12280 DROP       all  --  *      *       185.156.73.104       0.0.0.0/0
      288 12672 DROP       all  --  *      *       212.133.164.75       0.0.0.0/0
      277 19911 DROP       all  --  *      *       146.88.240.4         0.0.0.0/0
      250 11000 DROP       all  --  *      *       212.133.164.14       0.0.0.0/0
      230  9200 DROP       all  --  *      *       45.146.164.213       0.0.0.0/0
      215  8600 DROP       all  --  *      *       185.156.73.67        0.0.0.0/0
      214  8560 DROP       all  --  *      *       5.188.206.18         0.0.0.0/0
      202  8080 DROP       all  --  *      *       193.27.228.63        0.0.0.0/0
      201  8040 DROP       all  --  *      *       193.27.228.64        0.0.0.0/0
      199  7960 DROP       all  --  *      *       193.27.228.59        0.0.0.0/0
      197  7880 DROP       all  --  *      *       193.27.228.65        0.0.0.0/0
      197  7880 DROP       all  --  *      *       193.27.228.61        0.0.0.0/0
      196  7840 DROP       all  --  *      *       45.135.232.119       0.0.0.0/0
      196  7840 DROP       all  --  *      *       193.27.228.60        0.0.0.0/0
      196  7840 DROP       all  --  *      *       193.27.228.58        0.0.0.0/0
      189  7560 DROP       all  --  *      *       45.146.165.149       0.0.0.0/0
      184  7360 DROP       all  --  *      *       45.155.205.247       0.0.0.0/0
      184  7360 DROP       all  --  *      *       195.54.160.228       0.0.0.0/0
      182  7280 DROP       all  --  *      *       45.143.203.12        0.0.0.0/0
      181  7240 DROP       all  --  *      *       45.141.84.57         0.0.0.0/0
      180  7200 DROP       all  --  *      *       45.135.232.85        0.0.0.0/0
      176  7040 DROP       all  --  *      *       45.146.165.148       0.0.0.0/0
    ...
    this goes on for 1700 lines...
    
    $ uptime
    06:36:49 up 16 days, 15:24
    
    • 1
  7. lev
    2021-07-13T05:07:34+08:002021-07-13T05:07:34+08:00

    正如其他答案所提到的,您不必担心太多,但如果您确实想添加另一层安全性,您可以尝试使用端口敲门。

    这个想法是保持 ssh 端口关闭,并且只向 ips 打开它,这些 ips 之前执行特定的操作序列,例如:

    syn port 1000
    syn port 2000
    syn port 3000
    # ssh port is now open
    ssh ...
    

    可以在这里获得更多详细信息:https ://www.rapid7.com/blog/post/2017/10/04/how-to-secure-ssh-server-using-port-knocking-on-ubuntu-linux/

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve