在网络世界里,网站遭受攻击似乎成了家常便饭。作为一个系统运维人员,我们总是时刻准备着应对这些不测风云。
虽然云服务器的防护服务听起来不错,但作为一名精打细算的系统管理员,我更倾向于用智慧而非金钱来解决问题(毕竟,服务器的费用已经让我喘不过气,哪里还有余裕去支付额外的防护费用呢)。
最近,尽管我已经部署了fail2ban来加强防御,但这一轮猛烈的攻击还是让我的网站CPU飙升至100%,数据库在fail2ban监控生产之前就挂掉了,整个应用陷入了无法访问的窘境。面对这种情况,迅速定位并封锁攻击者的IP成了当务之急。以下是我采取的应对策略:
第一步:分析NGINX日志
分析日志主要目的是寻找那些异常活跃的IP地址,通过以下命令可以快速找出。
cat access.log | awk \\\'{print$1}\\\' |sort|uniq -c|sort -rn|head -10
命令说明:
-
cat access.log
:将access.log
文件的内容输出到标准输出。 -
awk \\\'{print $1}\\\'
:awk
是一个强大的文本处理工具。这里用于打印每一行的第一个字段。 -
sort
:这个命令将awk
命令的输出进行排序。 -
uniq -c
:uniq
命令用于去除连续的重复行。-c
选项表示在输出中显示每个唯一行出现的次数。 -
sort -rn
:这个命令再次对uniq -c
的输出进行排序,-r
表示反向排序(即从大到小),-n
表示按照数值排序。 -
head -10
:head
命令用于显示文件的前几行。这里显示排序后的前10行。
将这些命令组合起来,整个命令的作用是:
读取access.log文件,从每一行中提取出第一个字段,对这些字段进行排序,统计每个字段出现的次数,并去除连续的重复项,按照出现次数从高到低排序,输出出现次数最多的前10个字段。
通过这一条命令,我注意到了两个频繁出现的IP地址:104.28.229.11和104.28.155.247,它们各自出现了1500次。
第二步:分析高频访问IP都干了些啥
接下来,我需要了解这些IP究竟做了些什么。通过以下命令,我将目光聚焦在104.28.229.11这个IP上。
grep \\\'104.28.229.11\\\' /var/log/nginx/access.log-20240428
这不查不知道,一查吓一跳,如上图,可以看到有大量的sql注入攻击。
第三步:封禁IP
找到了罪魁祸首,接下来就是封锁环节。我使用了iptables来拒绝这个IP的所有访问:
iptables -I INPUT -s 104.28.229.11 -j DROP
iptables更多的操作命令这里不再赘述。
当然以上解决办法只是紧急临时方案,要一劳永逸还是要使用安全防护服务,比如上面我提到的使用fail2ban工具。此次事件fail2ban未能及时生效的原因还是因为我的配置不太合理,后面再将fail2ban的安装及配置,让你的服务无懈可击。
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49773.html