lnstat

lnstat命令用来显示Linux系统的网路状态。

语法

lnstat(选项)

选项

-h:显示帮助信息;
-V:显示指令版本信息;
-c:指定显示网络状态的次数,每隔一定时间显示一次网络状态;
-d:显示可用的文件或关键字;
-i:指定两次显示网络状的间隔秒数;
-k:只显示给定的关键字;
-s:是否显示标题头;
-w:指定每个字段所占的宽度。

nstat/rtacct

nstat命令rtacct命令是一个简单的监视内核的SNMP计数器和网络接口状态的实用工具。

语法

nstat/rtacct(选项)

选项

-h:显示帮助信息;
-V:显示指令版本信息;
-z:显示0计数器;
-r:清零历史统计;
-n:不显示任何内容,仅更新历史;
-a:显示计数器的绝对值;
-s:不更新历史;
-d:以守护进程的方式运行本指令。

实例

[root@localhost ~]# nstat
#kernel
IpInReceives                    15766482           0.0
IpInDelivers                    15538384           0.0
IpOutRequests                   9746938            0.0
IpReasmReqds                    8                  0.0
IpReasmOKs                      4                  0.0
IcmpInErrors                    28701              0.0
IcmpInDestUnreachs              405                0.0
IcmpInTimeExcds                 1812               0.0
IcmpInParmProbs                 173                0.0
IcmpInEchoReps                  26613              0.0
IcmpInTimestamps                100                0.0
IcmpOutErrors                   27065              0.0
IcmpOutTimeExcds                331                0.0
IcmpOutEchoReps                 121                0.0
IcmpOutTimestamps               26613              0.0
IcmpMsgInType0                  100                0.0
IcmpMsgInType3                  1812               0.0
IcmpMsgInType8                  26613              0.0
IcmpMsgInType11                 173                0.0
IcmpMsgOutType0                 26613              0.0
IcmpMsgOutType3                 331                0.0
IcmpMsgOutType8                 121                0.0
TcpActiveOpens                  24760              0.0
TcpPassiveOpens                 573863             0.0
TcpAttemptFails                 18347              0.0
TcpEstabResets                  67353              0.0
TcpInSegs                       15324047           0.0
TcpOutSegs                      9296351            0.0
TcpRetransSegs                  118479             0.0
TcpInErrs                       560                0.0
TcpOutRsts                      15269              0.0
UdpInDatagrams                  185300             0.0
UdpNoPorts                      331                0.0
UdpOutDatagrams                 305043             0.0
TcpExtSyncookiesFailed          14328              0.0
TcpExtEmbryonicRsts             15116              0.0
TcpExtOutOfWindowIcmps          79                 0.0
TcpExtTW                        158436             0.0
TcpExtDelayedACKs               123597             0.0
TcpExtDelayedACKLocked          1087               0.0
TcpExtDelayedACKLost            55670              0.0
TcpExtTCPPrequeued              288438             0.0
TcpExtTCPDirectCopyFromBacklog  11229302           0.0
TcpExtTCPDirectCopyFromPrequeue 669949             0.0
TcpExtTCPHPHits                 7539804            0.0
TcpExtTCPHPHitsToUser           7700               0.0
TcpExtTCPPureAcks               2743573            0.0
TcpExtTCPHPAcks                 1742135            0.0
TcpExtTCPRenoRecovery           51                 0.0
TcpExtTCPSackRecovery           15556              0.0
TcpExtTCPSACKReneging           13                 0.0
TcpExtTCPFACKReorder            199                0.0
TcpExtTCPSACKReorder            63                 0.0
TcpExtTCPTSReorder              220                0.0
TcpExtTCPFullUndo               213                0.0
TcpExtTCPPartialUndo            868                0.0
TcpExtTCPDSACKUndo              2831               0.0
TcpExtTCPLossUndo               2320               0.0
TcpExtTCPLoss                   22652              0.0
TcpExtTCPLostRetransmit         2                  0.0
TcpExtTCPRenoFailures           26                 0.0
TcpExtTCPSackFailures           4765               0.0
TcpExtTCPLossFailures           2155               0.0
TcpExtTCPFastRetrans            28636              0.0
TcpExtTCPForwardRetrans         3341               0.0
TcpExtTCPSlowStartRetrans       25393              0.0
TcpExtTCPTimeouts               28215              0.0
TcpExtTCPRenoRecoveryFail       26                 0.0
TcpExtTCPSackRecoveryFail       2892               0.0
TcpExtTCPDSACKOldSent           55916              0.0
TcpExtTCPDSACKOfoSent           299                0.0
TcpExtTCPDSACKRecv              11680              0.0
TcpExtTCPDSACKOfoRecv           35                 0.0
TcpExtTCPAbortOnData            1193               0.0
TcpExtTCPAbortOnClose           14                 0.0
TcpExtTCPAbortOnTimeout         3041               0.0

ss

ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。

天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。

语法

ss(选项)

选项

-h:显示帮助信息;
-V:显示指令版本信息;
-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字;
-l:显示处于监听状态的套接字;
-o:显示计时器信息;
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字;
-u:只显示udp套接字;
-d:只显示DCCP套接字;
-w:仅显示RAW套接字;
-x:仅显示UNIX域套接字。

实例

显示ICP连接

[root@localhost ~]# ss -t -a
State       Recv-Q Send-Q                            Local Address:Port                                Peer Address:Port   
LISTEN      0      0                                             *:3306                                           *:*       
LISTEN      0      0                                             *:http                                           *:*       
LISTEN      0      0                                             *:ssh                                            *:*       
LISTEN      0      0                                     127.0.0.1:smtp                                           *:*       
ESTAB       0      0                                112.124.15.130:42071                              42.156.166.25:http    
ESTAB       0      0                                112.124.15.130:ssh                              121.229.196.235:33398 

显示 Sockets 摘要

[root@localhost ~]# ss -s
Total: 172 (kernel 189)
TCP:   10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5

Transport Total     ip        IPv6
*         189       -         -        
RAW       0         0         0        
UDP       5         5         0        
TCP       6         6         0        
INET      11        11        0        
FRAG      0         0         0   

列出当前的established, closed, orphaned and waiting TCP sockets

列出所有打开的网络连接端口

[root@localhost ~]# ss -l
Recv-Q Send-Q                                 Local Address:Port                                     Peer Address:Port   
0      0                                                  *:3306                                                *:*       
0      0                                                  *:http                                                *:*       
0      0                                                  *:ssh                                                 *:*       
0      0                                          127.0.0.1:smtp                                                *:* 

查看进程使用的socket

[root@localhost ~]# ss -pl
Recv-Q Send-Q                                          Local Address:Port                                              Peer Address:Port   
0      0                                                           *:3306                                                         *:*        users:(("mysqld",1718,10))
0      0                                                           *:http                                                         *:*        users:(("nginx",13312,5),("nginx",13333,5))
0      0                                                           *:ssh                                                          *:*        users:(("sshd",1379,3))
0      0                                                   127.0.0.1:smtp                                                         *:*        us

找出打开套接字/端口应用程序

[root@localhost ~]# ss -pl | grep 3306
0      0                            *:3306                          *:*        users:(("mysqld",1718,10))

显示所有UDP Sockets

[root@localhost ~]# ss -u -a
State       Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
UNCONN      0      0                                                      *:syslog                                                  *:*       
UNCONN      0      0                                         112.124.15.130:ntp                                                     *:*       
UNCONN      0      0                                            10.160.7.81:ntp                                                     *:*       
UNCONN      0      0                                              127.0.0.1:ntp                                                     *:*       
UNCONN      0      0                                                      *:ntp                                                     *:*

iptraf

iptraf命令可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。

语法

iptraf(选项)

选项

-i网络接口:立即在指定网络接口上开启IP流量监视;
-g:立即开始生成网络接口的概要状态信息;
-d网络接口:在指定网络接口上立即开始监视明细的网络流量信息;
-s网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息;
-z网络接口:在指定网络接口上显示包计数;
-l网络接口:在指定网络接口上立即开始监视局域网工作站信息;
-t时间:指定iptraf指令监视的时间;
-B;将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行;
-f:清空所有计数器;
-h:显示帮助信息。

pfctl

pfctl命令是PF防火墙的配置命令,PF防火墙( 全称:Packet Filter )是UNIX LIKE系统上进行TCP/ip流量过滤和网络地址转换的软件系统。PF同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF最早是由Daniel Hartmeier开发的,现在的开发和维护由Daniel和openBSD小组的其他成员负责。

PF防火墙的功能很多,本站只列举一些基本配置。

激活

要激活pf并且使它在启动时调用配置文件,编辑/etc/rc.conf文件,修改配置pf的一行:

pf=yes

重启操作系统让配置生效。

也可以通过pfctl程序启动和停止pf:

# pfctl -e
# pfctl -d

注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在PF启动后通过命令单独载入。

配置

系统引导到在rc脚本文件运行PF时PF从/etc/pf.conf文件载入配置规则。注意当/etc/pf.conf文件是默认配置文件,在系统调用rc脚本文件时,它仅仅是作为文本文件由pfctl装入并解释和插入pf的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。

pf.conf文件有7个部分:

  1. 宏:用户定义的变量,包括IP地址,接口名称等等。
  2. 表:一种用来保存IP地址列表的结构。
  3. 选项:控制PF如何工作的变量。
  4. 整形:重新处理数据包,进行正常化和碎片整理。
  5. 排队:提供带宽控制和数据包优先级控制。
  6. 转换:控制网络地址转换和数据包重定向。
  7. 过滤规则:在数据包通过接口时允许进行选择性的过滤和阻止。

除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。

空行会被忽略,以#开头的行被认为是注释。

控制

引导之后,PF可以通过pfctl程序进行操作,以下是一些例子:

# pfctl -f /etc/pf.conf  载入 pf.conf 文件
# pfctl -nf /etc/pf.conf 解析文件,但不载入
# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则
# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则

# pfctl -sn 显示当前的NAT规则
# pfctl -sr 显示当前的过滤规则
# pfctl -ss 显示当前的状态表
# pfctl -si 显示过滤状态和计数
# pfctl -sa 显示任何可显示的

完整的命令列表,请参阅pfctl的man手册页。