Contents
Linuxのポート状況を確認する
ネットワーク上のどのコンピュータに接続するのかを「IPアドレス」で識別し、そのコンピュータ上で動いているどのプログラムにアクセスするのかを識別するのに必要なのが「ポート番号」になります。
ポート番号は16ビット整数であり、 0番~65535番まであります
Linuxで接続待ちをしているポートを確認するには、ssコマンド、またはnetstatコマンドを利用します。
●ウェルノウンポート
TCP(Transmission Control Protocol)やUDP(User Datagram Protocol)で使用する有名なサービスやプロトコルには、事前にポート番号(0番~1023番)が予約されています。
代表的なポート番号
TCP 20 | FTP (データ) |
TCP 21 | FTP (制御) |
TCP 22 | SSH |
TCP 23 | Telnet |
TCP 25 | SMTP |
UDP 53 | DNS |
UDP 67 | DHCP(サーバ) |
UDP 68 | DHCP(クライアント) |
TCP 80 | HTTP |
TCP 110 | POP3 |
UDP 123 | NTP |
TCP 443 | HTTPS |
ssコマンドで接続待ちをしているポートを確認する
●ssコマンドのオプション
-a | 全てのソケットを表示 |
-n | サービス名に変換せずに表示 |
-t | TCP情報のみ表示 |
-u | UDP情報のみ表示 |
●TCPポートのみを表示する
ssコマンドにオプション「-atn」を付けて実行します。
[root@Lion ~]# ss -atn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:10024 *:* LISTEN 0 100 127.0.0.1:10025 *:* LISTEN 0 100 *:587 *:* LISTEN 0 64 *:38861 *:* LISTEN 0 100 *:110 *:* LISTEN 0 100 *:143 *:* LISTEN 0 128 127.0.0.1:783 *:* LISTEN 0 128 *:111 *:* LISTEN 0 128 *:21 *:* LISTEN 0 100 *:25 *:* LISTEN 0 128 *:2233 *:* LISTEN 0 128 *:37982 *:* LISTEN 0 100 *:993 *:* LISTEN 0 100 *:995 *:* TIME-WAIT 0 0 192.168.11.62:25 45.142.120.183:20614 TIME-WAIT 0 0 192.168.11.62:25 45.142.120.183:33136 ・・・以下略・・・ |
● UDPポートのみを表示する
ssコマンドにオプション「-anu」を付けて実行します
[root@Lion ~]# ss -anu State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:48532 *:* UNCONN 0 0 *:40884 *:* UNCONN 0 0 *:111 *:* UNCONN 0 0 127.0.0.1:323 *:* ESTAB 0 0 192.168.11.62:45568 192.168.11.1:53 ESTAB 0 0 192.168.11.62:57961 192.168.11.1:53 UNCONN 0 0 127.0.0.1:723 *:* UNCONN 0 0 *:724 *:* ESTAB 0 0 192.168.11.62:35666 192.168.11.1:53 UNCONN 0 0 :::45110 :::* UNCONN 0 0 :::111 :::* UNCONN 0 0 ::1:323 :::* UNCONN 0 0 :::724 :::* UNCONN 0 0 :::43156 :::* |
●TCP、UDPポート両方表示する
ssコマンドにオプション「-atnu」を付けて実行します
[root@Lion ~]# ss -atnu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:48532 *:* udp UNCONN 0 0 *:40884 *:* udp UNCONN 0 0 *:111 *:* udp UNCONN 0 0 127.0.0.1:323 *:* udp UNCONN 0 0 127.0.0.1:723 *:* udp UNCONN 0 0 *:724 *:* udp ESTAB 0 0 192.168.11.62:58651 192.168.11.1:53 udp UNCONN 0 0 :::45110 :::* udp UNCONN 0 0 :::111 :::* udp UNCONN 0 0 ::1:323 :::* udp UNCONN 0 0 :::724 :::* udp UNCONN 0 0 :::43156 :::* tcp LISTEN 0 128 127.0.0.1:10024 *:* tcp LISTEN 0 100 127.0.0.1:10025 *:* tcp LISTEN 0 100 *:587 *:* tcp LISTEN 0 64 *:38861 *:* tcp LISTEN 0 100 *:110 *:* tcp LISTEN 0 100 *:143 *:* tcp LISTEN 0 128 127.0.0.1:783 *:* tcp LISTEN 0 128 *:111 *:* tcp LISTEN 0 128 *:21 *:* tcp LISTEN 0 100 *:25 *:* tcp LISTEN 0 128 *:2233 *:* tcp LISTEN 0 128 *:37982 *:* tcp LISTEN 0 100 *:993 *:* tcp LISTEN 0 100 *:995 *:* tcp TIME-WAIT 0 0 192.168.11.62:25 45.142.120.183:62652 ・・・以下略・・・ |
●通信が確立しているポートを表示する
ssコマンドにオプション「-t」を付けて実行します
[root@Lion ~]# ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.11.62:smtp 45.142.120.183:57896 ESTAB 0 0 192.168.11.62:smtp 45.142.120.183:6772 CLOSE-WAIT 56 0 127.0.0.1:48094 127.0.0.1:10025 ESTAB 0 0 192.168.11.62:smtp 45.142.120.183:19356 ESTAB 0 288 192.168.11.62:infocrypt 192.168.11.51:64079 ESTAB 0 18 192.168.11.62:smtp 45.142.120.183:58682 CLOSE-WAIT 56 0 127.0.0.1:48652 127.0.0.1:10025 ESTAB 0 0 ::ffff:xxx.xxx.xxx.xxx:http ::ffff:xxx.xxx.xxx.xxx:48918 |
xxx.xxx.xxx.xxxはLinuxサーバーのIPアドレス
●ssコマンド実行結果の各項目
Netid | Socketのタイプ |
u_str:UNIX Domainソケット | |
tcp :TCPソケット | |
udp :UDPソケット | |
State | 通信の状態 |
Recv-Q | 受信キューの数 |
Send-Q | 送信キューの数 |
Local Address:Port | サーバー側のIP又はソケットファイル、ポートを表示 |
Peer Address:Port | 通信している側のIP又はソケットファイル、ポートを表示 |
Linuxでプロセスが使用しているポートを確認する(lsofコマンド)
Linuxでプロセスが使用しているポートを確認するには「lsofコマンド」を利用します。
Linuxでプロセスが利用しているポートを確認することは、不要プログラムが実行されてないか、不正なバックドアが仕掛けられてないか等を調べ、Linuxのセキュリティ状況を確認する上で非常に重要です。
lsofコマンドは、Linuxが使用してるプロセス名や実行ユーザー名を表示することができるコマンドです。
ポートの利用情報のみを確認したい場合は、オプション「-i」を付けて実行します。
ポートなどの利用情報すべてを確認するためには、rootユーザーでlsofコマンドを実行しなければなりません。
●プロセスが使用しているポートを確認する
lsofコマンドにオプション「-i」を付けて実行します。
[root@Lion ~]# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 3381 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) chronyd 3758 chrony 1u IPv4 27912 0t0 UDP localhost:323 chronyd 3758 chrony 2u IPv6 27913 0t0 UDP localhost:323 proftpd 3811 nobody 0u IPv4 28910 0t0 TCP *:ftp (LISTEN) sshd 4097 root 3u IPv4 32041 0t0 TCP *:infocrypt (LISTEN) httpd 4266 root 4u IPv6 29480 0t0 TCP *:http (LISTEN) httpd 4356 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) master 4805 root 13u IPv4 30593 0t0 TCP *:smtp (LISTEN) master 4805 root 14u IPv6 30594 0t0 TCP *:smtp (LISTEN) master 4805 root 18u IPv4 30603 0t0 TCP *:submission (LISTEN) master 4805 root 19u IPv6 30604 0t0 TCP *:submission (LISTEN) master 4805 root 96u IPv4 30682 0t0 TCP localhost:10025 (LISTEN) mysqld 4836 mysql 15u IPv6 29617 0t0 TCP *:mysql (LISTEN) httpd 24688 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) sshd 27736 root 3u IPv4 23220846 0t0 TCP Tiger:infocrypt->192.168.11.51:64079 (ESTABLISHED) sshd 27776 tama 3u IPv4 23220846 0t0 TCP Tiger:infocrypt->192.168.11.51:64079 (ESTABLISHED) ・・・以下略・・・ |
●lsofコマンド実行結果の各項目
項目 | 意味 |
COMMAND | 実行されているコマンド |
PID | プロセスID |
USER | 実行ユーザー |
FD | ファイルディスクリプタ |
TYPE | タイプ |
DEVICE | デバイス |
SIZE/OFF | ファイルサイズ |
NODE | プロトコル |
NAME | ファイル又はポート |
●特定のポート番号から使用しているプロセスを表示する
特定のポート番号を使用しているプロセスを確認するには、lsofコマンドにオプション「-i」を付け、
「:」(コロン)で区切って特定のポート番号を指定して実行します
次はWEBサーバー用ポート80番を表示しています
[root@Lion ~]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 3381 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) httpd 4266 root 4u IPv6 29480 0t0 TCP *:http (LISTEN) httpd 4356 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) httpd 24688 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) httpd 62737 daemon 4u IPv6 29480 0t0 TCP *:http (LISTEN) |
80番ポートはhttpdすなわちWEBサーバーApacheが利用しています。
Linux内のサービスのポート番号をファイルで確認する(/etc/services)
Linuxで稼働するサービスは、デフォルトでサービス固有のポート番号が使用されます。
例えば、httpならTCPポートの80番、httpsなら443番などです。これらのポート番号を把握するには、サービス独自の設定ファイルを確認しなければなりませんが、一般的に想定されているポート番号は、/etc/servicesファイルに記載されています。
[root@Lion ~]# vi /etc/services # /etc/services: # $Id: services,v 1.55 2013/04/14 ovasik Exp $ # # Network services, Internet style # IANA services version: last updated 2013-04-10 # # Note that it is presently the policy of IANA to assign a single well-known # port number for both TCP and UDP; hence, most entries here have two entries # even if the protocol doesn't support UDP operations. # Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports # are included, only the more common ones. # # The latest IANA port assignments can be gotten from # http://www.iana.org/assignments/port-numbers # The Well Known Ports are those from 0 through 1023. # The Registered Ports are those from 1024 through 49151 # The Dynamic and/or Private Ports are those from 49152 through 65535 # # Each line describes one service, and is of the form: # # service-name port/protocol [aliases ...] [# comment]tcpmux 1/tcp # TCP port service multiplexer tcpmux 1/udp # TCP port service multiplexer rje 5/tcp # Remote Job Entry rje 5/udp # Remote Job Entry echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users systat 11/udp users daytime 13/tcp daytime 13/udp qotd 17/tcp quote qotd 17/udp quote msp 18/tcp # message send protocol (historic) msp 18/udp # message send protocol (historic) chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp-data 20/udp # 21 is registered to ftp, but also used by fsp ftp 21/tcp ftp 21/udp fsp fspd ssh 22/tcp # The Secure Shell (SSH) Protocol ssh 22/udp # The Secure Shell (SSH) Protocol telnet 23/tcp telnet 23/udp "/etc/services" 11176L, 670293C ・・・・以下略・・・・ |