RHEL7/CentOS7 管理コマンドについて 【 ssコマンド編 】

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。iriharaです。
今回は、RHEL7/CentOS7の管理系のコマンドについて確認してみましたので、
皆さんよろしければ、参考にして下さい。

以前に、RHEL7について紹介させてい頂いた際に、ifconfigコマンドやnetstatコマンドなどは、
今後別のコマンドに切り替わる旨を紹介させて頂きましたが、今回は、netstatコマンドに
取って代わる事になる予定のssコマンドについて紹介させて頂きます。

…と、思った矢先に、色々と確認したところ、ssコマンドについては、現行のバージョン
(iproute-3.10.0)にバグがあることが判明してしまいました。
(Red hat社でも認識されているようです。)

https://bugzilla.redhat.com/show_bug.cgi?id=1063927
http://d.hatena.ne.jp/ozuma/20140915/1410774381

こちらのサイトにも記載されている通り、ss -natuコマンドでTCPとUDPのポートを一度に
表示すると、一部UDPのポートがTCPで表示されてしまいます。

# ss -natu
Netid State      Recv-Q Send-Q         Local Address:Port            Peer Address:Port
tcp   UNCONN     0      0               192.168.122.1:53                   *:*
tcp   UNCONN     0      0                          *:67                    *:*
tcp   UNCONN     0      0                          *:111                   *:*
tcp   UNCONN     0      0                          *:123                   *:*
tcp   UNCONN     0      0                          *:5353                  *:*
tcp   UNCONN     0      0                   127.0.0.1:323                  *:*
tcp   UNCONN     0      0                         *:52558                  *:*
tcp   UNCONN     0      0                         *:53660                  *:*
tcp   UNCONN     0      0                          *:929                   *:*
tcp   UNCONN     0      0                   127.0.0.1:952                  *:*
tcp   LISTEN     0      100                 127.0.0.1:25                   *:*
tcp   LISTEN     0      128                        *:443                   *:*
tcp   LISTEN     0      128                        *:111                   *:*
tcp   LISTEN     0      128                         *:80                   *:*
tcp   LISTEN     0      5               192.168.122.1:53                   *:*
tcp   LISTEN     0      128                         *:22                   *:*
tcp   LISTEN     0      128                      *:49912                   *:*
tcp   ESTAB     0       96               172.16.36.28:22           172.16.255.39:56035

そのため、iprouteを3.14.0にアップデートを実施しました。
現状では、yum updateなどでのアップデートは、まだ対応していないようなので、rpmパッケージを
ダウンロードして対応します。

# wget ftp://ftp.univie.ac.at/systems/linux/fedora/updates/20/x86_64/
iproute-3.14.0-2.fc20.x86_64.rpm
# wget ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/
os/Packages/l/linux-atm-libs-2.5.1-12.fc23.x86_64.rpm
# rpm -ivh linux-atm-libs-2.5.1-12.fc23.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
1:linux-atm-libs-2.5.1-12.fc23     ################################# [100%]

# rpm -Uvh iproute-3.14.0-2.fc20.x86_64.rpm
警告: iproute-3.14.0-2.fc20.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、
鍵 ID 246110c1: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
1:iproute-3.14.0-2.fc20            ################################# [ 50%]
整理中 / 削除中...
2:iproute-3.10.0-13.el7            ################################# [100%]

この結果、以下のように表示されるようになりました。

# ss -natu
Netid State      Recv-Q Send-Q          Local Address:Port            Peer Address:Port
udp   UNCONN     0      0                 192.168.122.1:53                   *:*
udp   UNCONN     0      0                      *%virbr0:67                   *:*
udp   UNCONN     0      0                            *:111                   *:*
udp   UNCONN     0      0                            *:123                   *:*
udp   UNCONN     0      0                           *:5353                   *:*
udp   UNCONN     0      0                    127.0.0.1:323                   *:*
udp   UNCONN     0      0                           *:52558                  *:*
udp   UNCONN     0      0                           *:53660                  *:*
udp   UNCONN     0      0                            *:929                   *:*
udp   UNCONN     0      0                    127.0.0.1:952                   *:*
tcp   LISTEN     0      100                   127.0.0.1:25                   *:*
tcp   LISTEN     0      128                          *:443                   *:*
tcp   LISTEN     0      128                          *:111                   *:*
tcp   LISTEN     0      128                          *:80                    *:*
tcp   LISTEN     0      5                 192.168.122.1:53                   *:*
tcp   LISTEN     0      128                          *:22                    *:*
tcp   LISTEN     0      128                        *:49912                   *:*
tcp   ESTAB      0      96                 172.16.36.28:22          172.16.255.39:56035

という訳で、気を取り直して、改めてssコマンドについて紹介させて頂きます。
ssコマンドは、セッション一覧などを確認するためのコマンドになります。
オプションとしては、以下のようになります。

【オプション】
-V…バージョン情報
-n…サービス名に変換せずに表示
-r…ホスト名を名前解決
-a…全てのソケットを表示
-l開いているポートを表示
-o…実行するまでの時間が表示
-e…詳細に表示
-m…各ソケットのメモリーの使用量が表示
-p…使用しているポートと紐付いているプロセスの番号が表示
-i…内部TCP情報
-s…集約したソケット情報
-b…bpf filter socket情報
-4…IPv4のみ表示
-6…IPv6のみ表示
-0…パケットを表示
-t…TCP情報のみ表示
-u…UDP情報のみ表示
-d…DCCP情報のみ表示
-w…RAW情報のみ表示
-x…UNIX情報のみ表示

オプションが色々ありますが、起動しているサービスの確認などを行う場合、先程も実行した「-natu」を
付ければ、TCPとUDPの起動しているプロトコルの確認ができます。

# ss -natu
Netid State      Recv-Q Send-Q          Local Address:Port            Peer Address:Port
udp   UNCONN     0      0                 192.168.122.1:53                   *:*
udp   UNCONN     0      0                     *%virbr0:67                    *:*
udp   UNCONN     0      0                           *:111                    *:*
udp   UNCONN     0      0                           *:123                    *:*
udp   UNCONN     0      0                           *:5353                   *:*
udp   UNCONN     0      0                    127.0.0.1:323                   *:*
udp   UNCONN     0      0                         *:52558                    *:*
udp   UNCONN     0      0                         *:53660                    *:*
udp   UNCONN     0      0                           *:929                    *:*
udp   UNCONN     0      0                    127.0.0.1:952                   *:*
tcp   LISTEN     0      100                   127.0.0.1:25                   *:*
tcp   LISTEN     0      128                         *:443                    *:*
tcp   LISTEN     0      128                         *:111                    *:*
tcp   LISTEN     0      128                          *:80                    *:*
tcp   LISTEN     0      5                 192.168.122.1:53                   *:*
tcp   LISTEN     0      128                          *:22                    *:*
tcp   LISTEN     0      128                       *:49912                    *:*
tcp   TIME-WAIT  0      0                 127.0.0.1:35484                127.0.0.1:80
tcp   ESTAB      0      96                172.16.36.28:22         172.16.255.39:56035

また、「p」オプションを付けると、起動しているサービスと紐付いているプロセスの確認も可能です。

# ss -natup | grep 80
tcp   LISTEN     0   128     *:80     *:*
users:(("httpd",pid=8532,fd=3),("httpd",pid=8531,fd=3),("httpd",pid=8530,fd=3),
("httpd",pid=8529,fd=3),("httpd",pid=8528,fd=3),("httpd",pid=8527,fd=3),("httpd",pid=8526,fd=3))

# ps auxf | grep httpd
root     13401  0.0  0.0 112656   988 pts/0   S+   16:16   0:00    \_ grep --color=auto httpd
root     8526  0.0  0.8 238324   8468 ?     Ss   14:23   0:00      /usr/sbin/httpd -DFOREGROUND
apache    8527  0.0  0.3 240336   3500 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND
apache    8528  0.0  0.4 240544   4520 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND
apache    8529  0.0  0.4 240544   4520 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND
apache    8530  0.0  0.4 240544   4520 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND
apache    8531  0.0  0.4 240544   4520 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND
apache    8532  0.0  0.4 240544   4520 ?     S    14:23   0:00   \_ /usr/sbin/httpd -DFOREGROUND

「s」オプションを付けると、集約した情報が表示されます。

# ss -s
Total: 372 (kernel 510)
TCP:   109 (estab 1, closed 101, orphaned 0, synrecv 0, timewait 100/0), ports 0

Transport  Total     IP        IPv6
*           510       -         -
RAW           0       0         0
UDP          10      10         0
TCP           8       8         0
INET         18      18         0
FRAG          0       0         0

これだけだと、分り辛いので、他のオプションと一緒に使用します。

# ss -natus
Total: 372 (kernel 510)
TCP:   109 (estab 1, closed 101, orphaned 0, synrecv 0, timewait 100/0), ports 0

Transport   Total     IP        IPv6
*             510     -         -
RAW             0     0         0
UDP            10    10         0
TCP             8     8         0
INET           18    18         0
FRAG            0     0         0

Netid State      Recv-Q Send-Q               Local Address:Port                Peer Address:Port
udp   UNCONN     0     0                        92.168.122.1:53                       *:*
udp   UNCONN     0     0                            *%virbr0:67                       *:*
udp   UNCONN     0     0                                  *:111                       *:*
udp   UNCONN     0     0                                  *:123                       *:*
udp   UNCONN     0     0                                 *:5353                       *:*
udp   UNCONN     0     0                          127.0.0.1:323                       *:*
udp   UNCONN     0     0                                *:52558                       *:*
udp   UNCONN     0     0                                *:53660                       *:*
udp   UNCONN     0     0                                  *:929                       *:*
udp   UNCONN     0     0                          127.0.0.1:952                       *:*
tcp   LISTEN     0    100                          127.0.0.1:25                       *:*
tcp   LISTEN     0    128                                 *:443                       *:*
tcp   LISTEN     0    128                                 *:111                       *:*
tcp   LISTEN     0    128                                 *:80                        *:*
tcp   LISTEN     0     5                       192.168.122.1:53                       *:*
tcp   LISTEN     0    128                                 *:22                        *:*
tcp   LISTEN     0    128                               *:49912                       *:*
tcp   TIME-WAIT   0     0                          127.0.0.1:80                 127.0.0.1:35582
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35518
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35543
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35495
tcp   ESTAB       0     96                     172.16.36.28:22              172.16.255.39:56035
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35506
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35513
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35567
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35497
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35508
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35487
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35583
tcp   TIME-WAIT   0     0                         127.0.0.1:80                  127.0.0.1:35547
~ 以下省略 ~

他にも組み合わせ次第で、色々な使い方ができそうです。
リリースして、まだ間もないので、情報がまだまだ少なかったり、バグがあったりと、今すぐnetstat
コマンドから切り替えて日常的に使用するのは、もう少し先になりそうな感じですが、各ベンダーや
コミュニティから日々リリースされる新しいものに触れて、どういう場面で使う事ができるのか、
もう少し大げさに言えば、世の中にどう影響を与えるのか、など、問題意識を持って、自分なりに色々と
想像を巡らせて、今後も引き続き情報収集に努めたいと思います。
(それが、IT業界に身を置く醍醐味の一つだと思うので。)

■参考
https://bugzilla.redhat.com/show_bug.cgi?id=1063927
http://d.hatena.ne.jp/ozuma/20140915/1410774381
https://www.upken.jp/kb/cent6-cent7.html
http://confluence.sharuru07.jp/pages/viewpage.action?pageId=361352

以上