分析针对我的网站的攻击

2025-05-27

分析针对我的网站的攻击

最近,我偶然在自己的博客( JeremyMorgan.com )上做了一次安全审计,决定深入研究一下我的安全日志。借助一些 Linux 命令行技巧、Golang 代码和 Google Sheets,我大致了解了攻击的来源。

首先,我使用 CentOS 来托管我的网站,所以我查看了 /var/log/secure。这个日志是我服务器上存储身份验证日志的地方。

日志文件如下所示:

分析对我网站的攻击

而且有301,327行代码,我不太可能手动查看太多。让我们稍微自动化一下。

获取攻击者的IP地址

我想从这个文件中提取攻击者的IP地址。这样我就可以阻止他们。

我开始摆弄 Linux 命令,直到我想出了这个脚本

它的作用非常简单,它将查找以下字符串:



declare -a badstrings=("Failed password for invalid user"
                "input_userauth_request: invalid user"
                "pam_unix(sshd:auth): check pass; user unknown"
                "input_userauth_request: invalid user"
                "does not map back to the address"
                "pam_unix(sshd:auth): authentication failure"
                "input_userauth_request: invalid user"
                "reverse mapping checking getaddrinfo for"
                "input_userauth_request: invalid user"
                )


Enter fullscreen mode Exit fullscreen mode

这些字符串用于识别失败的攻击日志。如果他们输入了错误的用户名或尝试了其他形式的攻击,就会出现这些字符串之一。

因此我们循环遍历该列表并搜索这些字符串,然后从该字符串所在的行中提取 IP 地址。



cat /var/log/secure | grep "$i" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{print $0}' | sort | uniq >> "temp.txt"


Enter fullscreen mode Exit fullscreen mode

然后它会把 IP 地址转储到一个temp.txt文件中。它会对我“坏字符串”列表中的所有消息都执行此操作。

该文本文件中有大量重复项,因此我删除了重复项,只将唯一的 IP 放入文件中:



# grab unique ips from temp and put them in a file
cat "temp.txt" | sort | uniq > "badguyips.txt"
# remove the temp file
rm "temp.txt"


Enter fullscreen mode Exit fullscreen mode

太棒了,现在我已经准备好了 IP 地址列表。

分析对我网站的攻击

哎呀,我这里有1,141 个IP 地址。

阻止他们

现在我想屏蔽这些 IP 地址。因为我正在运行 iptables,所以我可以用这个简单的脚本来删除它们:



#!/bin/bash
input="badguyips.txt"
while IFS= read -r line
do
  iptables -A INPUT -s $line -j DROP
done < "$input"

service iptables save


Enter fullscreen mode Exit fullscreen mode

太棒了!现在攻击者已经被我的服务器屏蔽了。

然后我就好奇了。这些攻击到底是从哪里来的?

获取他们的位置数据

因为我有一份 IP 地址列表,所以我想用Maxmind之类的数据库来查找一些位置信息。所以我就这么做了。

我编写了一个名为“find the bad guys”的 Golang 程序,它会遍历 IP 地址的文本文件,查找他们的位置信息,然后将其写入一系列文本文件中。

我根据以下内容写出了地点:

  • 大陆
  • 国家
  • 城市
  • 城市细分

我想了解攻击来自哪里并分享这些信息。所以我运行了我构建的程序,现在有一些有用的位置信息列表:

分析对我网站的攻击

大洲

所以现在我想看一下 continents.txt。

分析对我网站的攻击

嗯,这将是一个问题,有一些重复。

我可以运行一个快速命令并获取唯一值:



cat continents | sort | uniq


Enter fullscreen mode Exit fullscreen mode

如果你曾经观察过地球仪,那么结果就不应该令你感到惊讶:

分析对我网站的攻击

但我想看看每个大洲的攻击次数。所以我请我的老朋友uniq帮忙:



awk -F '\n' '{print $0}' continents.txt | sort | uniq -c


Enter fullscreen mode Exit fullscreen mode

分析对我网站的攻击

很棒吧?所以我会删除前面的空格,在计数后插入一个逗号,然后将其拖放到文本文件中。



awk -F '\n' '{print $0}' continents.txt | sort | uniq -c | awk '{$1=$1};1' | sed -r 's/\s+/,/'  > contintent-totals.txt


Enter fullscreen mode Exit fullscreen mode

分析对我网站的攻击

现在我可以将其放入 Google 表格中。

分析对我网站的攻击

并得到这个漂亮的图表:

分析对我网站的攻击

我已经在其他地点(国家、城市、分区)重复了这个过程,所以就不再赘述了。结果如下:

国家

分析对我网站的攻击

以下是攻击者来自的十大国家:

  • 中国 (304)
  • 美国(138)
  • 法国 (95)
  • 印度 (46)
  • 新加坡 (43)
  • 韩国(38)
  • 德国 (37)
  • 俄罗斯 (37)
  • 巴西 (35)
  • 英国(29)

城市

分析对我网站的攻击

每个城市的袭击事件更加集中。

  • 北京 (57)
  • 上海 (53)
  • 合肥 (25)
  • 阿姆斯特丹 (21)
  • 班加罗尔 (16)
  • 伦敦 (14)
  • 新浦 (14)
  • 克利夫顿 (10)
  • 北卑尔根 (9)

但仍然很有趣。

细分

分析对我网站的攻击

这份报告的汇总程度更高,但深入程度更高。以下是攻击者来自的十大细分领域:

  • 北京 (145)
  • 上海 (61)
  • 安徽 (26)
  • 英格兰 (22)
  • 江苏 (22)
  • 新泽西州 (22)
  • 北荷兰 (22)
  • 加利福尼亚州 (18)
  • 圣保罗 (18)
  • 卡纳塔克邦 (16)

结论

伟大的事情总是源于好奇心。我很好奇还能从中提取出哪些其他类型的模式和数据,所以我会继续尝试和探索。

如果您决定要为您的网站执行此操作,请尝试以下步骤,如果您需要任何帮助请告诉我。

文章来源:https://dev.to/jeremycmorgan/analyzing-the-attacks-on-my-website-30jf
PREV
让我们构建一个 Chrome 扩展程序!
NEXT
面向所有开发人员的免费真实 Web 开发项目