系统层面
CPU 方面
vmstat、sar top、htop、nmon、mpstat
内存
free 、ps -aux
IO 设备(磁盘、网络)
iostat 、 ss 、 netstat 、 iptraf、iftop、lsof
网络工具
mtr
更多介绍 : https://mp.weixin.qq.com/s/-lru6FAhkXTo7gLCCfWlyg
有几种方法来查看当前服务和端口
1、使用lsof命令
$ sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN
3、使用nmap命令sudo nmap -sT -O localhost 或者 sudo nmap -sTU -O localhost 扫描TCP / TCP及UDP
$ sudo nmap -sT -O localhost
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
3306/tcp open mysql
5666/tcp open nrpe
TCP/UDP端口一起扫描
$ sudo nmap -sTU -O localhost
Starting Nmap 7.01 ( https://nmap.org ) at 2019-01-15 16:12 GMT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00028s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 1994 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
3306/tcp open mysql
5666/tcp open nrpe
161/udp open snmp
1、ping命令
测试网络编辑
ping就是对一个网址发送测试数据包,看对方网址是否有响应并统计响应时间,以此测试网络。
windows具体方式是,开始–运行–cmd,在调出的dos窗口下输入 ping 空格 + 你要ping的网址,回车。
比如 “ pingXXX网址” 之后屏幕会显示类似信息:
Ping XXX 网址[61.135.169.105] with 32 bytes of data:
Reply from 61.135.169.105: bytes=32 time=1244ms TTL=46
Reply from 61.135.169.105: bytes=32 time=1150ms TTL=46
Reply from 61.135.169.105: bytes=32 time=960ms TTL=46
Reply from 61.135.169.105: bytes=32 time=1091ms TTL=46
后面的time=1244ms 是响应时间,这个时间越小,说明你连接这个地址速度越快
linux直接输入 :ping www.baidu.com ping后面加网址
PING测试编辑
查看本地的TCP/IP协议是否设置好,输入命令:ping 空格127.0.0.1 如果接受和发送的数据都相等那就是完好的
ping正在 Ping 127.*具有32字节的数据:
来自 127.0. 的回复: 字节=32 时间〈1ms TTL=64
127.0.0.1的ping 统计信息:
数据包:已发送=4,已接收=4,丢失=0 〈0%丢失〉,
往返行程的估计时间以毫秒为单位:
最短=0ms,最长=0ms,平均=0ms
C:\>ping -n 50 202.103.96.68
Pinging 202.103.96.68 with 32 bytes of data:
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Request timed out.
………………
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Ping statistics for 202.103.96.68:
Packets: Sent = 50,Received = 48,Lost = 2 (4% loss),Approximate round trip times in milli-seconds:
Minimum = 40ms,Maximum = 51ms,Average = 46ms
从以上我就可以知道在给202.103.96.68发送50个数据包的过程当中,返回了48个,其中有两个由于未知原因丢失,这48个数据包当中返回速度最快为40ms,最慢为51ms,平均速度为46ms。
注意 :使用ping命令检测基本网络连接
2、cat /proc/interrupts命令可以查看网卡的中断
3、lprm -命令刷新打印机队列
4、lsmod命令显示所有装载的模块
5、after installing a new kernel情况下必须运行lilo
6、在/etc/aliases文件中保存了sendmail的别名?
7、如何停止一台机器的telnet服务?
答 : Comment the telnet entry in /etc/xinetd.conf
8、你在局域网内想获得IP 192.168.1.2 的MAC,在Windows系统的命令提示符中如何操作?
答 : 在CMD命令行输入 nbtstat -a 192.168.1.2
十款Linux网络监视工具
9、iftop命令
iftop系统监视工具,查看应用占用的网络流量(网速),它允许我们知道在我们的系统中实时运行的进程,并可以很容易地管理它们。iftop 与 top 应用程序类似,但它是专门监视网络的,通过它可以知道更多的关于网络的详细情况和使用网络的所有进程。
10、vnstat
vnstat 是一个缺省包含在大多数 Linux 发行版中的网络监视工具。它允许我们对一个用户选择的时间周期内发送和接收的流量进行实时控制。
11、iptraf
IPTraf 是一个基于控制台的 Linux 实时网络监视程序。它会收集经过这个网络的各种各样的信息作为一个 IP 流量监视器,包括 TCP 标志信息、ICMP 详细情况、TCP / UDP 流量故障、TCP 连接包和字节计数。它也收集接口上全部的 TCP、UDP、…… IP 协议和非 IP 协议 ICMP 的校验和错误、接口活动等等的详细情况。
12、Monitorix-系统和网络监视
Monitorix 是一个轻量级的免费应用程序,它设计用于去监视尽可能多的 Linux / Unix 服务器的系统和网络资源。它里面添加了一个 HTTP web 服务器,可以定期去收集系统和网络信息,并且在一个图表中显示它们。它跟踪平均系统负载、内存分配、磁盘健康状态、系统服务、网络端口、邮件统计信息(Sendmail、Postfix、Dovecot 等等)、MySQL 统计信息以及其它的更多内容。它设计用于去管理系统的整体性能,以及帮助检测故障、瓶颈、异常活动等等。
13、dstat
14、bwm-ng
它允许你去从连接中交互式取得数据,并且,为了便于其它设备使用,在取得数据的同时,能以某些格式导出它们。
15、ibmonitor
它显示连接接口上过滤后的网络流量,并且,明确地将接收流量和发送流量区分开。
16、Htop-Linux进程跟踪
Htop 是一个更先进的、交互式的、实时的 Linux 进程跟踪工具。它类似于 Linux 的 top 命令,但是有一些更高级的特性,比如,一个更易于使用的进程管理界面、快捷键、水平和垂直的进程视图等更多特性。Htop 是一个第三方工具,它不包含在 Linux 系统中,你必须使用 YUM 或者 APT-GET 或者其它的包管理工具去安装它。
17、arpwatch-以太网活动监视器
arpwatch 是一个设计用于在 Linux 网络中去管理以太网通讯的地址解析程序。它持续监视以太网通讯并记录一个网络中的 IP 地址和 MAC 地址的变化,该变化同时也会记录一个时间戳。它也有一个功能是当一对 IP 和 MAC 地址被添加或者发生变化时,发送一封邮件给系统管理员。在一个网络中发生 ARP 攻击时,这个功能非常有用。
18、Wireshark-网络监视工具
Wireshark 是一个自由的应用程序,它允许你去捕获和查看前往你的系统和从你的系统中返回的信息,它可以去深入到数据包中并查看每个包的内容 —— 以分别满足你的不同需求。它一般用于去研究协议问题和去创建和测试程序的特别情况。这个开源分析器是一个被公认的分析器商业标准,它的流行要归功于其久负盛名。
最初它被叫做 Ethereal,Wireshark 有轻量化的、易于理解的界面,它能分类显示来自不同的真实系统上的协议信息
在这里插入图片描述
19、查看进程占用带宽情况-Nethogs
Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。
下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/download
#yum -y install libpcap-devel ncurses-devel
20、硬盘读取性能测试-IOZone
IOZone是一款Linux文件系统性能测试工具 可以测试不同的操作系统中文件系统的读写性能。
下载:http://www.iozone.org/src/current/
#tar xvf iozone3_420.tar
21、实时监控磁盘IO-IOTop
IOTop命令是专门显示硬盘IO的命令,界面风格类似top命令。
#yum -y install iotop
22、网络流量监控-IPtraf
IPtraf是一个运行在Linux下的简单的网络状况分析工具。
#yum -y install iptraf
23、网络流量监控-IFTop
iftop是类似于linux下面top的实时流量监控工具。比iptraf直观些。
下载:http://www.ex-parrot.com/~pdw/iftop/
#iftop -i eth0 #指定监控网卡接口
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
24、进程实时监控-HTop
HTop是一个 Linux 下的交互式的进程浏览器可以用来替换Linux下的top命令。
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm(安装第三方YUM源)
#yum -y install htop
25、系统资源监控-NMON
NMON是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具
下载:http://sourceforge.jp/projects/sfnet_nmon/releases/
[root@localhost ~]# chmod +x nmon_x86_64_rhel6
[root@localhost ~]# mv nmon_x86_64_rhel6 /usr/sbin/nmon
[root@localhost ~]# nmon
26、监控多个日志-MultiTail
MultiTail是在控制台打开多个窗口用来实现同时监控多个日志文档、类似tail命令的功能的软件。
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm (安装第三方YUM源)
[root@localhost ~]# yum -y install multitail
[root@localhost ~]# multitail -e "fail" /var/log/secure #筛选关键字进行监控
[root@localhost ~]# multitail -l "ping baidu.com" #监控后面的命令-l将要执行的命令
[root@localhost ~]# multitail -i /var/log/messages -i /var/log/secure #-i指定一个文件名
27、SSH暴力破解防护-Fail2ban
Fail2ban可以监视你的系统日志然后匹配日志的错误信息正则式匹配执行相应的屏蔽动作一般情况下是调用防火墙屏蔽
下载:http://www.fail2ban.org/wiki/index.php/Downloads
[root@localhost ~]# cd fail2ban-0.8.11
[root@localhost fail2ban-0.8.11]# python setup.py install
[root@localhost fail2ban-0.8.11]# cd files/
[root@localhost files]# cp ./redhat-initd /etc/init.d/fail2ban
[root@localhost files]# service fail2ban start
[root@localhost files]# chkconfig --add fail2ban
[root@localhost files]# chkconfig fail2ban on
注:需要配置iptables实用,如果重启iptables了也要重启fail2ban,因为fail2ban的原理是调用iptables实时阻挡外界的攻击。
[root@localhost ~]# grep -v "^#" /etc/fail2ban/jail.conf | grep -v "^$"
[DEFAULT]
ignoreip = 127.0.0.1/8#忽略本机IP
bantime = 600 #符合规则后封锁时间
findtime = 600 #在多长时间内符合规则执行封锁如600秒达到3次则执行
maxretry = 3 #最大尝试次数
backend = auto #日志修改检测日志gamin、polling和auto这三种
usedns = warn
[ssh-iptables]
enabled = true#默认是禁用false
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
#sendmail-whois[name=SSH,dest=收件人邮箱, sender=发件人邮箱, sendername="Fail2Ban"]
logpath = /var/log/sshd.log #响应的错误日志一般在/var/log/secure
maxretry = 5 #尝试错误次数覆盖全局中的maxretry
注:默认所有的应用防护都是关闭的,需要我们手动开启。fail2ban.conf文件是日志信息,jail.conf文件是保护的具体服务和动作配置信息。
[root@localhost ~]# touch /var/log/sshd.log
[root@localhost ~]# service fail2ban restart
[root@localhost ~]# fail2ban-client status #查看监控已经开启
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
[root@localhost ~]# iptables -L #iptables过滤表有fail2ban一条规则
fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh
28、连接会话终端持续化-Tmux
Tmux是一个优秀的终端复用软件类似GNU Screen比Screen更加方面、灵活和高效。为了确保连接SSH时掉线不影响任务运行。
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm(安装第三方YUM源)
29、页面显示磁盘空间使用情况-Agedu
下载:http://www.chiark.greenend.org.uk/~sgtatham/agedu/
30、安全扫描工具-NMap
NMap是Linux下的网络连接扫描和嗅探工具包用来扫描网上电脑开放的网络连接端。
下载:http://nmap.org/download.html
[root@localhost ~]# tar jxvf nmap-6.40.tar.bz2
[root@localhost nmap-6.40]# ./configure
[root@localhost nmap-6.40]# make && make install
[root@localhost ~]# nmap 192.168.0.10 #获取基本信息
[root@localhost ~]# nmap -O 192.168.0.10 #获取系统版本信息
[root@localhost ~]# nmap -A 192.168.0.10 #获取系统综合信息
[root@localhost ~]# nmap 192.168.0.0/24 #获取一个网段工作设备基本信息
31、Web压力测试-Httperf
Httperf比ab更强大,能测试出web服务能承载的最大服务量及发现潜在问题;比如:内存使用、稳定性。最大优势:可以指定规律进行压力测试,模拟真实环境。
下载:http://code.google.com/p/httperf/downloads/list
[root@localhost ~]# tar zxvf httperf-0.9.0.tar.gz
[root@localhost ~]# cd httperf-0.9.0
[root@localhost httperf-0.9.0]# ./configure
[root@localhost httperf-0.9.0]# make && make install
[root@localhost ~]# httperf --hog --server=192.168.0.202 --uri=/index.html --num-conns=10000 --wsess=10,10,0.1
参数说明:
–hog:让httperf尽可能多产生连接,httperf会根据硬件配置,有规律的产生访问连接
–num-conns:连接数量,总发起10000请求
–wsess: 用户打开网页时间规律模拟,第一个10表示产生10个会话连接,第二个10表示每个会话连接进行10次请求,0.1表示每个会话连接请求之间的间隔时间/s
32、nethogs:一个带宽监视工具,按进程来分组显示活动网络连接,实时汇报每个进程占用的(上传/下载)带宽。
33、ngxtop:一个网页服务器访问日志解析和监视工具,界面受到了top命令启发。它可以实时汇报整理过的页面请求列表,包括频率、大小、HTTP返回值、IP地址,等等。
34、jnettop
jnettop 以相同的方式来监测网络流量但比 iftop 更形象。它还支持自定义的文本输出,并能以友好的交互方式来深度分析日志。
35、bmon
bmon 能监控并帮助你调试网络。它能捕获网络相关的统计数据,并以友好的方式进行展示。你还可以与 bmon 通过脚本进行交互。
36、netstat 是一个内置的工具,它能显示 TCP 网络连接,路由表和网络接口数量,被用来在网络中查找问题。
比起 netstat,使用 ss 更好。ss 命令能够显示的信息比 netstat 更多,也更快。如果你想查看统计结果的总信息,你可以使用命令 ss -s。
37、Nmap
Nmap 可以扫描你服务器开放的端口并且可以检测正在使用哪个操作系统。但你也可以将其用于 SQL 注入漏洞、网络发现和***测试相关的其他用途。
nmap -v ip地址/22
38、Glances
glances监控您的系统,旨在以最小的空间量呈现最大量的信息。它具有在客户端/服务器模式下运行以及远程监控的功能。它还有一个Web界面。
39、saidar
saidar是一个非常小的工具,可以为您提供有关系统资源的基本信息。它显示标准系统资源的全屏。sayar的重点是尽可能简单
40、collectl
与sar collectl类似,可收集您机器的性能指标。默认情况下,它显示cpu,网络和磁盘统计信息,但它收集了更多。与sar的区别在于,collectl能够处理1秒以下的时间,它可以直接输入绘图工具,并且collectl可以更广泛地监控进程。
41、mtr
# Debian/Ubuntu 系统
apt install mtr
# RedHat/CentOS 系统
yum install mtr
使用
mtr qq.com
使用 -s 来指定ping数据包的大小
#mtr -s 100 qq.com
100 bytes 数据包会用来发送,测试,如果设置为负数,则每一次发送的数据包的大小都会是一个随机数。
指定发送数量
#mtr -c 100 qq.com
不进行主机解释
使用 -n 选项来让 mtr 只输出 IP,而不对主机 host name 进行解释
#mtr -n qq.com
https://mp.weixin.qq.com/s/uZ8ZRum9UhWW27tGTVzVyA
具体输出的参数含义为:
第一列是IP地址
丢包率:Loss
已发送的包数:Snt
最后一个包的延时:Last
平均延时:Avg
最低延时:Best
最差延时:Wrst
方差(稳定性):StDev
如何看当前系统有多少连接呢?可以使用netstat结合awk进行统计。如下脚本,统计了每一种状态的tcp连接数量
# netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'
LISTEN 41
CLOSE_WAIT 24
ESTABLISHED 150
Foreign 1
TIME_WAIT 92
但如果你在一台有上万连接的服务器上执行这个命令,你可能会等上很长时间。所以,我们有了第二代网络状态统计工具:netstat => ss。
# ss -s
Total: 191 (kernel 220)
TCP: 5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469
...
netstat属于net-tools工具集,而ss属于iproute。其命令对应如下,是时候和 net-tools 说 Bye 了。
基本使用
我们按照使用场景来看下ss的用法。
查看系统正在监听的tcp连接
ss -atr
ss -atn #仅ip
查看系统中所有连接
ss -alt
查看监听444端口的进程 pid
ss -ltp | grep 444
查看进程555占用了哪些端口
ss -ltp | grep 555
显示所有 UDP 连接
ss -u -a
和某个 IP 的所有连接
ss dst 10.66.224.130
ss dst 10.66.224.130:http
ss dst 10.66.224.130:smtp
ss dst 10.66.224.130:443
显示所有的 HTTP 连接
ss dport = :http
查看连接本机最多的前 10 个 IP 地址
netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c | sort -n -k1 -r | head -n 10
注意ss的执行结果,我们说明一下Recv-Q和Send-Q。
这两个值,在LISTEN和ESTAB状态分别代表不同意义。一般,正常的应用程序这两个值都应该为0(backlog除外)。数值越大,说明问题越严重。
有很多工具可以看网络流量,但我最喜欢sar。sar是linux上功能最全的监控软件。如图,使用sar -n DEV 1即可每秒刷新一次网络流量。
watch cat /proc/net/dev
有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。如图,可以很容易的找出流量来自哪台主机。
当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他。
当我们需要判断是否有流量,或者调试一个难缠的 netty 应用问题,则可以通过抓包的方式去进行进一步的判断。在 Linux 上,可以通过 tcpdump 命令抓取数据,然后使用Wireshark 进行分析。
tcpdump -i eth0 -nn -s0 -v port 80
1)加入-A选项将打印 ascii ,-X打印 hex 码。
tcpdump -A -s0 port 80
2)抓取特定 IP 的相关包
tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 dst 10.10.1.20
3)-w参数将抓取的包写入到某个文件中
tcpdump -i eth0 -s0 -w test.pcap
4)tcpdump支持表达式,还有更加复杂的例子,比如抓取系统中的get,post请求(非https)
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
更多参见
https://hackertarget.com/tcpdump-examples/
抓包工具将自身当作代理,能够抓取你的浏览器到服务器之间的通讯,并提供修改、重放、批量执行的功能。是发现问题,分析协议,攻击站点的利器。常用的有以下三款:
你可能需要使你的生产环境HTTP真实流量在开发环境或者预演环境重现,这样就用到了流量复制功能。
有三个工具可供选择,个人倾向于Gor。
根据TCP/IP介绍,socket大概包含10个连接状态。我们平常工作中遇到的,除了针对SYN的拒绝服务攻击,如果有异常,大概率是TIME_WAIT和CLOSE_WAIT的问题。
TIME_WAIT一般通过优化内核参数能够解决;CLOSE_WAIT一般是由于程序编写不合理造成的,更应该引起开发者注意。
TIME_WAIT 是主动关闭连接的一方保持的状态,像 nginx、爬虫服务器,经常发生大量处于time_wait状态的连接。TCP 一般在主动关闭连接后,会等待 2MS,然后彻底关闭连接。由于 HTTP 使用了 TCP 协议,所以在这些频繁开关连接的服务器上,就积压了非常多的 TIME_WAIT 状态连接。
某些系统通过 dmesg 可以看到以下信息。
__ratelimit: 2170 callbacks suppressed
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
通过ss -s命令查看,可以看到timewait已经有2w个了。
ss -s
Total: 174 (kernel 199)
TCP: 20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785
sysctl 命令可以设置这些参数,如果想要重启生效的话,加入/etc/sysctl.conf文件中。
# 修改阈值
net.ipv4.tcp_max_tw_buckets = 50000
# 表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_reuse = 1
#启用timewait 快速回收。这个一定要开启,默认是关闭的。net.ipv4.tcp_tw_recycle= 1
# 修改系統默认的TIMEOUT时间,默认是60s
net.ipv4.tcp_fin_timeout = 10
CLOSE_WAIT一般是由于对端主动关闭,而我方没有正确处理的原因引起的。说白了,就是程序写的有问题,属于危害比较大的一种。
代码是使用HttpClient的一个使用片段。在这段代码里,通过调用in.close()来进行连接资源的清理。但可惜的是,代码中有一个判断:非200状态的连接直接返回null。在这种情况下,in连赋值的机会都没有,当然也就无法关闭,然后就发生了连接泄漏。
所以,HttpClient的正确关闭方式是使用其api:abort()。
# 断点续传下载文件
wget -c $url
# 下载整站
wget -r -p -np -k $url
# 发送网络连接(常用)
curl -XGET $url
# 传输文件
scp
sftp
# 数据镜像备份
rsync
# 连通性检测
ping google.com
# 到端路由检测
tracepath google.com
# 域名检测
dig google.com
nslookup google.com
# 网络扫描工具
nmap
# 压力测试
iperf
# 全方位监控工具(好东西)
nmon
# 停止某个网卡
ifdown
# 开启某个网卡
ifup
# 多功能管理工具
ethtool
wrk
ab
webbench
http_load
# 远程登录
telnet
ssh
nc
# 防火墙
iptables -L
43、
44、
45、
46、
1、WireShark
2、Tcptrace
3、QPA
4、Tstat
5、CapAnalysis
6、Xplico
参考链接 :
运维工程师必备:请收好 Linux 网络命令集锦 :https://mp.weixin.qq.com/s/BKcgqGrJvAnQ3wQf3nmayw
网络流量特征提取工具 :https://mp.weixin.qq.com/s/kAyfVUN6lK7iQ7DdVARm2Q
10 个非常赞的网络监视工具! : https://mp.weixin.qq.com/s/TlrdXGjkrXhASUO6dgo5Mw
查看ubuntu当前服务和监听端口
https://www.jianshu.com/p/d2cd1740fab0