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

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

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

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

# Windowsnetstat -an -p tcp# Linuxnetstat -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 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

其中有用信息为访问者的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 1tcpdump -n -c 10 -q -t -i eth0 tcp and dst host 172.27.220.9 | tee tcp.log# console 2tail -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网口
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值