• 如何知道是否有人正在进行网络攻击


    如何知道是否有人正在进行网络攻击

    对于一台服务器或电脑而言,网卡就是系统的门户。而门上既没有安装门铃又没有安装监控,是否有人正在敲门或搞破坏,我们往往对此一无所知。

    在操作系统层面,我们无法直接感知到网络层面正在发生的变动,只能通过工具对网络会话进行观察。通用方法是使用 netstat 查看当前已经建立的连接,或断开的连接。
    我最近在3A服务器购买了云服务器。

    # Windowsnetstat -an -p tcp# Linuxnetstat -tn -p
    
    • 1

    而这种方法很难持续地进行观察和分析。比如我们的系统正在被谁访问,以及尝试的频率和持续时间。

    实际上是有方法对网络流进来的数据包进行分析的,比如抓包工具。但抓包工具的特点就是流量非常大,很吃硬盘空间。抓的包存在文件里很快就能把硬盘撑爆,因为数据包里是含文件数据的。有没有简单地记录入站IP以及所访问的业务端口的方法?

    有,还是使用抓包工具,只是使用抓包工具的简化模式,不抓数据流量只抓访问记录。所使用的抓包工具是tcpdump,我们先给个可用版本的命令行,再对命令行进行分解:

    $ tcpdump -n -c 10 -q -t -i eth0 tcp and dst host 172.27.220.9
    
    • 1

    首先不要被这么长的命令吓住,我们一步步简化就可以看到每一个参数的效果。先解释一下上面的命令行要达到的效果:

    • -i eth0 只监听 eth0 网口
    • tcp 只监听 tcp 的数据包
    • dst 只监听入站方向的数据包
    • host 只监听目的IP为指定IP的数据包

    最终得到的监听日志为:

    IP 27.22.77.188.37490 > 172.27.220.9.7822: tcp 1692IP 27.22.77.188.37490 > 172.27.220.9.7822: tcp 1316IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 0IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 0IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 53IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 0IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 0IP 183.93.155.47.16607 > 172.27.220.9.7777: tcp 53IP 183.93.155.47.16684 > 172.27.220.9.7822: tcp 0IP 183.93.155.47.16684 > 172.27.220.9.7822: tcp 0
    
    • 1

    其中有用信息为访问者的IP,以及被访问IP的端口。源端口是动态的没有意义,目的端口是最终的业务端口。从日志上可以得到访问者的IP,以及访问的业务端口。

    tcpdump 可以一直处于监听状态,默认什么参数都不加,就是监听所有的数据包:

    tcpdump -c 10
    
    • 1

    图片

    因为数据量非常大,几乎就是刷屏,所以加了个-c参数只抓10个包。并且里面包含了很多的看不懂的字段,我们再加几个参数,简化一下输出。

    $ tcpdump -c 10 -q
    
    • 1

    图片

    此时输出已经简单了很多了,但里面有域名,我们只想看IP,可以再加个参数把域名转为IP。

    $ tcpdump -c 10 -q -n
    
    • 1

    图片

    此时基本上就达到我们的要求了,输出内容包含了时间、源地址.端口、目的地址.端口 以及包的长度。把输出重定向到文件,就可以对日志文件进行分析了。

    如果不想看时间字段可以加 -t 参数。数据包中还含有udp、arp的数据包,格式不一致。如果想抓取固定格式的数据包,可以再加一些参数,比如:

    $ tcpdump tcp
    
    • 1

    以上命令是只抓tcp的包,src 和 dst 则代表方向,多个条件用 and 连起来,如果只监听入站方向到本机IP的数据包,则命令为:

    $ tcpdump tcp and dst host 172.27.220.9
    
    • 1

    tcpdump 的命令很长,但只取一部分也可以执行。我们还原到最开始的最长的那么命令,把抓到的入站方向的日志重定向到文件中。

    $ tcpdump -n -c 10 -q -t -i eth0 tcp and dst host 172.27.220.9 > tcp.log
    
    • 1

    示例命令只抓取10个包,如果当前网络没有数据包,则命令会hung住。如果需要长时间观察数据包,可以使用 tee 代替重定向。可以在另一个窗口中使用 tail -f tcp.log 对日志进行观察。

    # console 1tcpdump -n -c 10 -q -t -i eth0 tcp and dst host 172.27.220.9 | tee tcp.log# console 2tail -f tcp.log
    
    • 1

    tcpdump 对网口的抓包是实时的,通过分析日志文件可以动态观察数据包的流向和IP访问情况。对于异常IP流量,可以对风险IP实行封堵。另一种情况,如果一个端口不应该有访问,但访问的IP特别多,此时就可以认定这些IP都是风险IP。这比设立蜜罐有效的多,因为只要有流量进来都能看到。针对特定端口的监听命令为:

    $ tcpdump -n -c 10 -q -t -i eth0 tcp and dst host 172.27.220.9 and port 7822
    
    • 1

    图片

    tcpdump 的参数很多,但语法很简单,常用的过滤字段有:

    • tcp udp 协议类型
    • src dst 方向
    • host net 主机IP 或 网段
    • port 端口

    多个条件用 and 相连即可,文中用到的参数说明:

    • -n 将域名解析为IP
    • -c 10 抓10个包
    • -q 精简模式
    • -t 不输出时间
    • -i eth0 只监听eth0网口
  • 相关阅读:
    我裂开 求助15题答案--我不会哭死
    前端程序员接私活,直呼赚麻了
    在阿里云的函数计算上部署
    【语音增强】多维谱自适应小波语音信号去噪【含Matlab源码 1972期】
    小程序中计算距离信息
    KSF绩效管理
    【算法练习Day30】无重叠区间&& 划分字母区间&&合并区间
    卷麻了,00后测试用例写的比我还好,简直无地自容.....
    shell-运算符
    树上问题——树的直径
  • 原文地址:https://blog.csdn.net/weixin_53641036/article/details/126772411