Linux系统运维脚本:如何查看访问我的linux系统的IP地址,并判断是否有网络攻击?

目                    录

一、需求

二、解决思路

三、实现方式

1、抓一定数量的数据包

2、抓取1小时的数据包

3、以小时为周期,周期性的执行抓包1小时

4,抓包分析并输出结果

5,周期性分析并输出结果

(1)定时设置

(2)命令部分


一、需求

        如果一个Linux网络主机接收到太多来自某个未知IP地址的数据包,可能涉及多种情况,以下是一些可能的原因:

1、网络扫描或探测

        未知IP地址可能正在进行网络扫描或探测,尝试发现主机上的开放端口和服务。这种活动可能用于后续的恶意攻击,如尝试利用已知的漏洞。

2、拒绝服务攻击(DoS/DDoS)

        大量来自同一未知IP地址的数据包可能是拒绝服务攻击的一部分,旨在耗尽主机的资源(如带宽、CPU或内存),导致服务不可用。

3、误配置或网络故障

        在某些情况下,数据包洪流可能只是由于网络配置错误或故障导致的。例如,网络设备可能错误地将流量路由到目标主机,或者主机可能错误地配置了监听大量不必要的流量。

4、僵尸网络活动

        僵尸网络(Botnet)是由大量被恶意软件感染并受远程控制的计算机组成的网络。这些被感染的计算机可能被用来发动大量针对特定目标的攻击,包括发送大量数据包。

5、正常但由于意外而带来的流量

        在某些情况下,大量来自同一IP地址的数据包可能是正常的活动,但是出现了错误的动作。例如,一个合法的用户或服务可能配置不当,导致生成过多的网络流量。

       总之,出现这种情况,基本上是危险的前兆。那么,我们有没有办法通过命令或者脚本等手段,找到这个问题根源呢?

二、解决思路

       要查看网络情况,首先要进行抓包,然后对抓到的数据包进行分析。比如我们可以用最常见的tcpdump进行抓包,然后通过awk,cut等工具对数据包进行分析,最后把所有发过来的数据包筛选出来,统计IP地址相同的包,并显示出来。因此,可以列出如下步骤:
       1、通过tcpdump抓取一定时间的数据包保存下来;

       2、周期性的执行这个命令;

       3、对抓到的数据包进行分析,主要是对源IP地址这部分进行分析;

       4、统计出源IP地址的数量;

       5、对IP地址数量进行排序。      

三、实现方式

1、抓一定数量的数据包

        抓取1万数据包的命令如下:

tcpdump -c 10000 -i eth0

        实际操作效果如下:

[root@ecs-52a1 121yunwei]# tcpdump -c 10000 -i eth0  >/home/pkts.pcap
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10000 packets captured
20172 packets received by filter
8890 packets dropped by kernel
[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]#

2、抓取1小时的数据包

        命令如下:

timeout 1h tcpdump -i eth0 -w /home/pkts.pcap

        为了可以周期性的执行,可以把这个命令保存为shell脚本文件,方便调用,如下:

#!/bin/bash 
# capture_packets.sh 
# 定义抓包文件名称(固定不变,以便后续覆盖) 
PCAP_FILE="/home/pkts.pcap " 
# 执行 tcpdump 抓包一个小时,使用 timeout 命令限制时间,并覆盖之前的文件 
timeout 1h tcpdump -w "$PCAP_FILE" -i eth0

3、以小时为周期,周期性的执行抓包1小时

crontab -e

         内容编辑如下:

*/5 * * * * capture_packets.sh

4,抓包分析并输出结果

        采用如下命令分析结果

awk '{print $3}' /home/pkts.pcap | cut -d. -f 1-4 | sort | uniq -c | sort -nk 1

        测试效果如下:

[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]# awk '{print $3}' /home/pkts.pcap | cut -d. -f 1-4 | sort | uniq -c | sort -nk 1
      1
      1 ecs-52a1.45937
      1 ecs-52a1.49669
      1 ecs-52a1.7060
     12 112.86.84.88
     30 ecs-52a1.gbjd816
    324 222.93.149.89
[root@ecs-52a1 121yunwei]#

        根据这个结果,最大的访问量是222.93.149.89过来的访问,只有324个,所以不存在网络攻击。

5,周期性分析并输出结果

        可以生成脚本文件analysis_packets.sh,把命令也写到crontab中,如下

*/5 * * * * capture_packets.sh && sleep 2s && analysis_packets.sh

(1)定时设置

        这个表达式前半部分为定时任务设置,如下:

        */5: 这表示每5分钟执行一次。星号(*)代表任意值,而斜杠(/)后面跟的数字表示间隔。因此,*/5 意味着从0分钟开始,每隔5分钟。

        *: 小时。星号表示“每小时”。

        *: 一个月中的哪一天。星号表示“每天”。

        *: 月份。星号表示“每个月”。

        *: 一周中的哪一天(0代表星期日,1代表星期一,依此类推)。星号表示“每周的每一天”。

        综上,这个定时任务表示:每小时的每5分钟执行后面的命令。

(2)命令部分

       如下为命令部分的解释:

        capture_packets.sh: 这是一个shell脚本,它的功能很可能是捕获网络数据包。

        &&: 这是一个逻辑操作符,表示“如果前一个命令成功执行(返回值为0),则执行后面的命令”。

        sleep 2s: 这个命令会使系统暂停2秒。

        &&: 同上,是逻辑操作符。

        analysis_packets.sh: 这是另一个shell脚本,它的功能可能是分析之前捕获的数据包。

        总结下来,这个 crontab 行的作用是:每小时的每5分钟,执行 capture_packets.sh 脚本捕获数据包,等待2秒,然后执行 analysis_packets.sh 脚本分析数据包。注意,如果 capture_packets.sh 执行失败(返回值不为0),则后续的 sleep 和 analysis_packets.sh 将不会执行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值