暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

生有可恋 2022-08-27
2332

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


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

    # Windows
    netstat -an -p tcp
    # Linux
    netstat -tn -p


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


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


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

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


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

      • -i eth0 只监听 eth0 网口

      • tcp     只监听 tcp 的数据包

      • dst     监听入站方向的数据包

      • host   只监听目的IP为指定IP的数据包


      最终得到的监听日志为:

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

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


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

          tcpdump -c 10


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

            $ tcpdump -c 10 -q


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

              $ tcpdump -c 10 -q -n


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


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

                $ tcpdump tcp

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

                  tcpdump tcp and dst host 172.27.220.9

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

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

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

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


                      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


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

                        • tcp udp  协议类型

                        • src dst     方向

                        • host net  主机IP 或 网段

                        • port 端口

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

                        • -n  将域名解析为IP

                        • -c 10 抓10个包

                        • -q 精简模式

                        • -t 不输出时间

                        • -i eth0 只监听eth0网口

                        全文完。


                        如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

                               
                        文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论