Linux基礎

linux【ss/netstat】コマンドの見方/オプション~Recv-Q/Send-Qやポート確認(Listen/Estab/Unconn),プロセス表示等~

ss コマンド (旧 netstat コマンド) とは

ss は socket statistics の略で、netstatに替わる Linux標準のネットワークの状態確認コマンドです。初期はバグが多いと話題になっていたようですが、現状では netstat と大きな違いはありません。

ss コマンドの用例とオプション

TCP/UDPのポート開放状態を確認したいとき

ポート開放状態の確認には "ss -nltu" を使います。

[root@localhost ~]# ss -nltu
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:Port
udp   UNCONN 0      0      127.0.0.1:323      *:*
udp   UNCONN 0      0      *:68               *:*
udp   UNCONN 0      0      ::1:323            :::*
tcp   LISTEN 0      128    *:22               *:*
tcp   LISTEN 0      100    127.0.0.1:25       *:*
tcp   LISTEN 0      128    :::80              :::*
tcp   LISTEN 0      128    :::22              :::*
tcp   LISTEN 0      100    ::1:25             :::*
[root@localhost ~]#

各オプションの意味は以下の通りです。

-n : ポート番号をサービス名変換しない(例えば:httpと表示せず:80と表示する)
-l : Listen(待ち受け)ポートのみを表示する
-t : TCP を表示する
-u : UDP を表示する

ポート開放しているプロセスも確認したいとき

-p を付けて "ss -nltup" を実行すると、どのプロセスがそのポートを開放しているのかが分かります。

[root@localhost ~]# ss -nltup
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:Port
udp   UNCONN 0      0      127.0.0.1:323      *:* users:(("chronyd",pid=9802,fd=1))
udp   UNCONN 0      0      *:68               *:* users:(("dhclient",pid=8526,fd=6))
udp   UNCONN 0      0      ::1:323            :::* users:(("chronyd",pid=9802,fd=2))
tcp   LISTEN 0      128    *:22               *:* users:(("sshd",pid=998,fd=3))
tcp   LISTEN 0      100    127.0.0.1:25       *:* users:(("master",pid=1369,fd=13))
tcp   LISTEN 0      128    :::80              :::* users:(("httpd",pid=29410,fd=4),("httpd",pid=5595,fd=4),("httpd",pid=5594,fd=4),("httpd",pid=5593,fd=4),("httpd",pid=5592,fd=4),("httpd",pid=5591,fd=4))
tcp   LISTEN 0      128    :::22              :::* users:(("sshd",pid=998,fd=4))
tcp   LISTEN 0      100    ::1:25             :::* users:(("master",pid=1369,fd=14))
[root@localhost ~]#

現在の通信で利用しているポートの状態を確認したいとき

現在進行形で通信に利用されているポート状態も確認したいときは -l の代わりに -a を使い、"ss -natu" を実行します。

[root@localhost ~]# ss -natu
Netid State     Recv-Q Send-Q Local Address:Port  Peer Address:Port
udp    UNCONN   0      0      127.0.0.1:323       *:*
udp    UNCONN   0      0      *:68                *:*
udp    UNCONN   0      0      ::1:323             :::*
tcp    LISTEN   0      128    *:22                *:*
tcp    LISTEN   0      100    127.0.0.1:25        *:*
tcp    ESTAB    0      96     172.16.10.61:22     172.16.10.58:6444
tcp    LISTEN   0      128    :::80               :::*
tcp    LISTEN   0      128    :::22               :::*
tcp    LISTEN   0      100    ::1:25              :::*
[root@localhost ~]#

LISTEN / UNCONN / ESTAB について

LISTENはTCPの待ち受けポートのことです。UNCONN は unconnected の意味で、UDPにおける待ち受けポートを表します。ESTAB は 3way handshakeが成功した状態、つまりTCPコネクションが確立した状態を意味します。

Recv-Q と Send-Q について

Recv-Q / Send-Q は State が ESTAB か LISTEN かによって意味が違います。

State = ESTAB の場合

Recv-Q は 受信パケットのうち、まだユーザプログラム(つまり-pで表示されるプロセス)に引き渡されていないパケットの総byte数を意味します。

また、Send-Q は 送信パケットのうち、通信先から TCP ack が返ってきていないパケットの総byte数を意味します。

State = LISTEN の場合

TCP syn backlog 関連の値が入ります。Recv-Q は現在の TCP コネクション未確立(つまり3 way handshake中)通信の数です。

Send-Q は受け入れ可能な最大TCPコネクション未確立通信の数です。TCP syn flood 攻撃への対策としてこの値は大きすぎてはいけません。

man ss

SS(8) System Manager's Manual SS(8)

NAME
ss - another utility to investigate sockets

SYNOPSIS
ss [options] [ FILTER ]

DESCRIPTION
ss is used to dump socket statistics. It allows showing information
similar to netstat. It can display more TCP and state informations
than other tools.

OPTIONS
When no option is used ss displays a list of open non-listening sockets
(e.g. TCP/UNIX/UDP) that have established connection.

-h, --help
Show summary of options.

-V, --version
Output version information.

-H, --no-header
Suppress header line.

-n, --numeric
Do not try to resolve service names.

-r, --resolve
Try to resolve numeric address/ports.

-a, --all
Display both listening and non-listening (for TCP this means
established connections) sockets.

-l, --listening
Display only listening sockets (these are omitted by default).

-o, --options
Show timer information.

-e, --extended
Show detailed socket information

-m, --memory
Show socket memory usage.

-p, --processes
Show process using socket.

-i, --info
Show internal TCP information.

-K, --kill
Attempts to forcibly close sockets. This option displays sockets
that are successfully closed and silently skips sockets that the
kernel does not support closing. It supports IPv4 and IPv6 sock‐
ets only.

-s, --summary
Print summary statistics. This option does not parse socket
lists obtaining summary from various sources. It is useful when
amount of sockets is so huge that parsing /proc/net/tcp is
painful.

-Z, --context
As the -p option but also shows process security context.

For netlink(7) sockets the initiating process context is dis‐
played as follows:

1. If valid pid show the process context.

2. If destination is kernel (pid = 0) show kernel ini‐
tial context.

3. If a unique identifier has been allocated by the ker‐
nel or netlink user, show context as "unavailable".
This will generally indicate that a process has more
than one netlink socket active.

-z, --contexts
As the -Z option but also shows the socket context. The socket
context is taken from the associated inode and is not the actual
socket context held by the kernel. Sockets are typically labeled
with the context of the creating process, however the context
shown will reflect any policy role, type and/or range transition
rules applied, and is therefore a useful reference.

-N NSNAME, --net=NSNAME
Switch to the specified network namespace name.

-b, --bpf
Show socket BPF filters (only administrators are allowed to get
these information).

-4, --ipv4
Display only IP version 4 sockets (alias for -f inet).

-6, --ipv6
Display only IP version 6 sockets (alias for -f inet6).

-0, --packet
Display PACKET sockets (alias for -f link).

-t, --tcp
Display TCP sockets.

-u, --udp
Display UDP sockets.

-d, --dccp
Display DCCP sockets.

-w, --raw
Display RAW sockets.

-x, --unix
Display Unix domain sockets (alias for -f unix).

-S, --sctp
Display SCTP sockets.

--vsock
Display vsock sockets (alias for -f vsock).

-f FAMILY, --family=FAMILY
Display sockets of type FAMILY. Currently the following fami‐
lies are supported: unix, inet, inet6, link, netlink, vsock.

-A QUERY, --query=QUERY, --socket=QUERY
List of socket tables to dump, separated by commas. The follow‐
ing identifiers are understood: all, inet, tcp, udp, raw, unix,
packet, netlink, unix_dgram, unix_stream, unix_seqpacket,
packet_raw, packet_dgram, dccp, sctp, vsock_stream, vsock_dgram.

-D FILE, --diag=FILE
Do not display anything, just dump raw information about TCP
sockets to FILE after applying filters. If FILE is - stdout is
used.

-F FILE, --filter=FILE
Read filter information from FILE. Each line of FILE is inter‐
preted like single command line option. If FILE is - stdin is
used.

FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
Please take a look at the official documentation (Debian package
iproute-doc) for details regarding filters.

STATE-FILTER
STATE-FILTER allows to construct arbitrary set of states to match. Its
syntax is sequence of keywords state and exclude followed by identifier
of state.

Available identifiers are:

All standard TCP states: established, syn-sent, syn-recv, fin-
wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack,
listen and closing.

all - for all the states

connected - all the states except for listen and closed

synchronized - all the connected states except for syn-sent

bucket - states, which are maintained as minisockets, i.e.
time-wait and syn-recv

big - opposite to bucket

USAGE EXAMPLES
ss -t -a
Display all TCP sockets.

ss -t -a -Z
Display all TCP sockets with process SELinux security contexts.

ss -u -a
Display all UDP sockets.

ss -o state established '( dport = :ssh or sport = :ssh )'
Display all established ssh connections.

ss -x src /tmp/.X11-unix/*
Find all local processes connected to X server.

ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst
193.233.7/24
List all the tcp sockets in state FIN-WAIT-1 for our apache to
network 193.233.7/24 and look at their timers.

SEE ALSO
ip(8), /usr/share/doc/iproute-doc/ss.html (package iproutedoc),
RFC 793 - https://tools.ietf.org/rfc/rfc793.txt (TCP states)

AUTHOR
ss was written by Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>.

This manual page was written by Michael Prokop <mika@grml.org> for the
Debian project (but may be used by others).

SS(8)

コメント

タイトルとURLをコピーしました