应急响应-主机安全之网络相关命令(Linux操作系统)


概述

本文介绍下在应急响应过程中,linux系统下排查网络可能用到的命令,有些命令选项很多,读者可以仅看常用选项。

netstat

netstat 命令以符号形式显示各种与网络相关的数据结构的内容。根据所选选项,有多种输出格式可供选择。

  • 命令的第一种形式显示每个协议的活动套接字列表
  • 第二种形式根据所选选项显示其他网络数据结构的内容。
  • 使用第三种形式,并指定等待间隔,netstat 将持续显示已配置的网络接口上的数据包流量信息。
  • 第四种形式显示指定协议或地址族的统计信息。如果指定了等待间隔,则会显示过去若干秒内的协议信息。
  • 第五种形式显示指定协议或地址族的每个接口的统计信息。
  • 第六种形式显示 mbuf(9) 的统计信息。
  • 第七种形式显示指定地址族的路由表。
  • 第八种形式显示路由统计信息。

默认显示活动套接字的本地和远程地址、发送和接收队列大小(以字节为单位)、协议以及协议的内部状态。地址格式的形式为“host.port”或“network.port”,如果套接字的地址指定了一个网络但没有具体的主机地址。如果已知,主机和网络地址将根据/etc/hosts和/etc/networks数据库进行符号显示。如果对于一个地址的符号名称未知,或者指定了-n选项,该地址将按照地址族的方式以数值形式打印出来。

网络共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的:

  • LISTEN:首先服务端需要打开一个socket进行监听,状态为 LISTEN,侦听来自远方TCP端口的连接请求 ;
  • SYN_SENT:客户端通过应用程序调用connect进行active open,于是客户端tcp发送一个SYN以请求建立一个连接,之后状态置为 SYN_SENT,在发送连接请求后等待匹配的连接请求;
  • SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN,之后状态置为,在收到和发送一个连接请求后等待对连接请求的确认;
  • ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了, 代表一个打开的连接,数据可以传送给用户;
  • FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态, 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
  • CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT, 等待从本地用户发来的连接中断请求;
  • FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2,从远程TCP等待连接中断请求;
  • LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接,这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK,等待原来发向远程TCP的连接中断请求的确认;
  • TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认;
  • CLOSING: 比较少见,等待远程TCP对连接中断的确认;
  • CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态;
  • UNKNOWN:未知的Socket状态;

常见标志位

  • SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
  • ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
  • FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

标题行解释

  • Proto:协议类型,表示套接字使用的协议,例如TCP、UDP等。
  • Local Address:本地地址,即本地主机的IP地址和端口号。
  • Foreign Address:远程地址,即与本地主机建立连接的对方主机的IP地址和端口号。
  • State:连接的状态,表示套接字当前所处的内部状态。
  • Send-Q:发送队列的大小,表示等待发送的数据在发送队列中的字节数。
  • Recv-Q:接收队列的大小,表示等待接收的数据在接收队列中的字节数。
  • PID/Program name:关联的进程ID和对应的程序名称。
  • Timer:
    • 第一个值表示定时器的状态,可以是"off"(关闭)、“on”(开启)或其他特定的定时器状态。
      第二个值表示定时器的剩余时间,以秒为单位。
      第三个值表示定时器超时次数。

选项

-r, --route              显示路由表
-I, --interfaces=<Iface> 显示指定接口的接口表
-i, --interfaces         显示接口表
-g, --groups             显示组播组成员
-s, --statistics         显示网络统计信息(如 SNMP)
-M, --masquerade         显示伪装连接
-v, --verbose            显示详细信息
-W, --wide               不截断 IP 地址
-n, --numeric            不解析名称
--numeric-hosts          不解析主机名
--numeric-ports          不解析端口名
--numeric-users          不解析用户名
-N, --symbolic           解析硬件名称
-e, --extend             显示其他/更多信息
-p, --programs           显示套接字的 PID/程序名
-o, --timers             显示计时器
-c, --continuous         连续列出
-l, --listening          显示正在监听的服务器套接字
-a, --all                显示所有套接字(默认:已连接)
-F, --fib                显示转发信息库(默认)
-C, --cache              显示路由缓存而非 FIB
-Z, --context            显示套接字的 SELinux 安全上下文

常用选项组合

netstat -nalop 列出监听中的端口

在这里插入图片描述

netstat -tulnp 显示所有的监听状态的TCP 和 UDP 连接

在这里插入图片描述

netstat -atunp 显示所有的 TCP 和 UDP 连接

在这里插入图片描述

netstat -nr 显示当前的路由表

在这里插入图片描述

netstat -s 显示传输层协议(TCP、UDP)的统计信息

在这里插入图片描述

查看连接某服务端口最多的的IP地址

以80端口为例

netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr

在这里插入图片描述

实验

python3 -m http.server 8080

在这里插入图片描述

ps结果

ps -axf | grep python

在这里插入图片描述

netstat结果

在这里插入图片描述

ss-比netstat更好用的工具

选项

-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
在这里插入图片描述

ifconfig-网络接口信息

在这里插入图片描述
eth0 表示第一块网卡。

inet 用来表示网卡的IP地址,广播地址broadcast,掩码地址netmask。

lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

MTU(最大传输单元),单位 字节。

混杂模式会有 UPBROADCAST RUNNING PROMISC MULTICAST 字样。

ip-网络接口信息

选项

语法

ip(选项)(对象)
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename

选项
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec |
-f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
-4 | -6 | -I | -D | -B | -0 |
-l[oops] { maximum-addr-flush-attempts } |
-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
-rc[vbuf] [size] | -n[etns] name | -a[ll] }

网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
help:显示网络对象支持的操作命令的帮助信息。

对象
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
netns | l2tp | macsec | tcp_metrics | token }

-V:显示指令版本信息;
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。

查看地址

ip addr

在这里插入图片描述

查看路由

ip route

在这里插入图片描述

tcpdump-抓包

tcpdump是一个在命令行下使用的网络数据包分析工具。它能够实时捕获网络接口上的数据包,并将其以可读的格式展示出来。tcpdump可以帮助网络管理员和开发人员分析网络流量,诊断网络问题,了解网络通信的细节。

以下是一些tcpdump的特点和功能:

  • 支持多种操作系统:tcpdump可在多种操作系统平台上运行,包括Linux、macOS和Windows。
  • 强大的过滤器:tcpdump支持使用BPF(Berkeley Packet Filter)语法进行复杂的数据包过滤。用户可以根据协议类型、IP地址、端口等条件来过滤捕获的数据包,以便集中关注感兴趣的内容。
  • 解析多种网络协议:tcpdump能够解析和展示多种网络协议的数据包信息,包括以太网、IPv4和IPv6、TCP、UDP、ICMP等。它还能识别常见的应用层协议,如HTTP、DNS、SSH等。
  • 保存和读取数据包:tcpdump可以将捕获到的数据包保存为文件,方便之后的离线分析和查看。同时,它也能读取保存的数据包文件,并将其展示出来。
  • 灵活的输出格式控制:tcpdump提供了多种输出格式控制选项,可以根据需要选择展示的信息,如源和目的IP地址、端口号、时间戳等。
  • 支持IPv6:tcpdump对IPv6协议有很好的支持,能够分析和捕获IPv6数据包。

以下是tcpdump的一个输出示例

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:55:37.416400 IP (tos 0x10, ttl 64, id 40393, offset 0, flags [DF], proto TCP (6), length 188)
    10.0.0.6.36000 > 175.27.43.112.49492: Flags [P.], cksum 0x10ac (correct), seq 3375829152:3375829300, ack 2610564101, win 261, length 148
1 packet captured
3 packets received by filter
0 packets dropped by kernel
  • 18:55:37.416400:时间戳,格式为时:分:秒.毫秒。表示该数据包在捕获时的时间。
  • IP:指示协议类型,这里是IP(Internet Protocol)。
  • (tos 0x10, ttl 64, id 40393, offset 0, flags [DF], proto TCP (6), length 188):IP包头,含有与该IP数据包相关的信息:
    • tos 0x10:服务类型,十六进制数值0x10转换成二进制为00010000,表示该数据包传输优先级比较高。
    • ttl 64:time to live(生存时间),表示该数据包能在网络中存活的最大时间,避免数据包在网络中无限制地循环传输,防止数据包不断在网络中转发而不能被丢弃。
    • id 40393:IP数据报的唯一标识符,用于标识该数据包。
    • offset 0:偏移量,表示该数据包在分片(fragmentation)后的位置。
    • flags [DF]:标志位,DF代表“Don’t Fragment”,表示该数据包不可以分片。
    • proto TCP (6):指示数据包使用的协议为TCP(Transmission Control Protocol)。
    • length 188:表示该IP数据包(包括IP协议头和TCP协议头)的长度,以字节为单位。
  • 10.0.0.6.36000 > 175.27.43.112.49492:源和目的IP地址及端口号,分别表示数据包的发送者和接收者的IP地址及端口号。.36000是源端口号,.49492是目标端口号。
  • Flags [P.]:TCP标志位,P代表“Push”,. 点表示ACK或SYN标志没有被置位。
  • cksum 0x10ac (correct):校验和,用于检测数据的完整性。
  • seq 3375829152:3375829300:序列号,表示数据包中所携带数据的序列号范围。
  • ack 2610564101:确认号,表示上一条成功接收的数据包中下一条期望接受的序列号。
  • win 261:窗口大小,表示接收方缓冲区的大小。
  • length 148:表示数据包中携带数据的长度,以字节为单位。

选项

tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
                [ -Q|-P in|out|inout ]
                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
                [ -Z user ] [ expression ]

解释如下:

-a:以ASCII码打印网络层和传输层的信息。
-A:以ASCII码打印应用层的信息(比如HTTP、SMTP等),同时忽略掉网络层和传输层的信息。
-c:抓取指定数量的数据包后停止,比如-c 10表示只抓取10个数据包。
-D:列出系统上可用的网络接口列表。
-e:以详细格式输出数据包,包括链路层信息(比如源MAC地址、目标MAC地址等)。
-E:将数据包导出到指定文件中,可以配合-r选项使用。
-f:不将抓取到的数据包放入缓存中,直接输出。
-F:从指定文件中读取过滤条件。
-G:循环运行tcpdump并每隔指定时间生成一个新的捕获文件。
-i:指定监听的网络接口,比如-i eth0代表监听eth0接口。
-l:使用线路缓冲(line-buffered)模式,并在屏幕上实时输出数据包。
-n:不将地址转化为名称,直接以数字形式输出。
-N:不解析任何名称,直接以数字形式输出。
-O:关闭指定的输出选项,比如-O ip表示关闭IP层信息的输出。
-p:设置为非混杂模式,只监听本机上发往该机器或者由该机器发出的数据包。
-q:以更精简的格式输出捕获到的数据包。
-r:从指定文件中读取并解析数据包,而不是从网络中抓取数据包。
-s:指定捕获数据包的截止长度,比如-s 200表示只抓取前200个字节。
-S:以绝对时间戳(精确到微秒)格式输出数据包。
-t:不打印时间戳。
-T:指定输出文件的格式,可以是ASCII、PS、PDF等格式。
-u:使用无缓存模式,即立即输出接收到的所有数据包。
-v:详细输出tcpdump的运行状态和统计信息。
-vvv:输出更详细的信息。
-w:将捕获到的数据包保存到指定的文件中,可以配合-r选项使用。
-x:以十六进制格式输出每个字节的内容。
-X:以十六进制和ASCII码的形式输出每个字节的内容。
-y:指定抓取的数据包类型,比如以“link”抓取链路层数据包。

一以下指定多个时需要通过and或or连接

  • host: 主机
  • port:端口
  • src: 源
  • dst: 目的
  • net: 网段CIDR格式
  • proto:指定协议 \协议名称

常用选项组合

tips:多个条件可以使用and、or进行连接,有的也可以使用逗号填写多个值

抓取所有数据包

不清楚任何条件时使用,一般时间短

tcpdump

抓取指定数量的数据包

tcpdump -c 1

在这里插入图片描述

抓取指定网卡的数据包

可使用ifconfig等命令查看当前的网卡,然后指定

tcpdump -i eth0

在这里插入图片描述

抓取指定ip的数据包

可以通过host、src或dst指定ip、源ip或目的ip

tcpdump dst 10.0.0.6

在这里插入图片描述

tcpdump dst 10.0.0.6 and src 175.27.43.112 -c 1

在这里插入图片描述

抓取指定端口的数据包

tcpdump src 10.0.0.6 and src port 36000 -c 1

在这里插入图片描述

捕获所有报文内容

-s为0时可以捕获到最大字节262144的数据包
在这里插入图片描述

优化加速

-nn不解析域名和端口,用于抓取大量数据包时

提取 HTTP 请求的主机名和路径

tcpdump -s0 -v -n | egrep -i "POST /|GET /|Host:"

在这里插入图片描述
同理,可以抓取代理、cookies、账号密码等,例如代理:

tcpdump -nn -A -s1500 -l | grep "User-Agent:"

保存数据包到文件

tcpdump -i eth0 -c 1 -w eth0.pcap

在这里插入图片描述
之后可以使用wireshark打开
在这里插入图片描述

iptables、firewalld-防火墙设置

之前写过,不再重复
Linux-Centos7学习笔记

更多主机安全相关命令:
应急响应-主机安全之文件相关命令(Linux操作系统)
应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇)

参考

《网络安全应急响应技术实战指南》

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值