この記事では、netstat、lsof、およびnmapコマンドを使用して開いているポートをチェックし、どのサービスがどのポートでリッスンしているかを確認する方法について説明します。
ネットワーク接続やアプリケーション固有の問題をトラブルシューティングする場合、最初に確認することの1つは、システムで実際に使用されているポートと、特定のポートでリッスンしているアプリケーションです。
ネットワークポートは、その番号、関連付けられたIPアドレス、およびTCPやUDPなどの通信プロトコルのタイプによって識別されます。とりわけ、オープンポートは、アプリケーションまたはプロセスがリッスンするネットワークポートであり、通信エンドポイントとして機能します。
各リスニングポートは、ファイアウォールを使用してオープンまたはクローズ(フィルタリング)できます。一般的に、オープンポートとは、離れた場所からの着信パケットを受け入れるネットワークポートです。
netstat
(ネットワーク統計 )は、着信と発信の両方のネットワーク接続を監視し、ルーティングテーブル、インターフェイス統計などを表示するためのコマンドラインツールです。このツールは、Linuxネットワーク管理者およびシステム管理者がネットワークを監視およびトラブルシューティングするために非常に重要で非常に役立ちます。関連する問題とネットワークトラフィックのパフォーマンスを決定します。
ポートを使用するサービスやソケットステータスなど、リッスンされているすべてのTCPまたはUDPポートを一覧表示するには、次のコマンドを使用します。
$ sudo netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 24919/amavisd
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 800/tinyproxy
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 844/pure-ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1001/dovecot
tcp6 0 0 :::3306 :::* LISTEN 823/mysqld
tcp6 0 0 ::1:783 :::* LISTEN 24911/spamd.pid -d
tcp6 0 0 :::80 :::* LISTEN 781/httpd
tcp6 0 0 :::21 :::* LISTEN 844/pure-ftpd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
tcp6 0 0 :::25 :::* LISTEN 967/master
tcp6 0 0 :::993 :::* LISTEN 1001/dovecot
tcp6 0 0 :::995 :::* LISTEN 1001/dovecot
udp 0 0 0.0.0.0:47967 0.0.0.0:* 460/avahi-daemon: r
udp 0 0 127.0.0.1:123 0.0.0.0:* 472/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 472/ntpd
udp6 0 0 :::123 :::* 472/ntpd
このコマンドで使用されるオプションの意味は次のとおりです。
-
-t
:TCPポートを表示します。 -
-u
:UDPポートを表示します。 -
-l </ code> :リスニングポートのみを表示します。
-
-n
:ホストを解決する代わりに数値アドレスを表示します。 -
-p
:リスナーのプロセスのPIDと名前を表示します。この情報は、rootまたはsudoユーザーとしてコマンドを実行した場合にのみ表示されます。
この場合の重要な列は次のとおりです。
- Proto –ソケットで使用されるプロトコル。
- ローカルアドレス–プロセスがリッスンするIPアドレスとポート番号。
- PID /プログラム名–PIDとプロセスの名前。
さらに、結果をフィルタリングする場合は、 grep
を使用します 指図。たとえば、TCPポート22でリッスンするプロセスを見つけるには、次のように入力します。
$ sudo netstat -tulnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
出力が空の場合は、ポートで何もリッスンしていないことを意味します。
netstat
の詳細については Linuxでコマンドを実行するには、そのマニュアルページを参照してください。
lsofで開いているポートを確認する
lsof
意味「LiStOpenFiles」 どのファイルがどのプロセスで開いているかを調べるために使用されます。 Linuxでは、すべてがファイルです。ソケットは、ネットワークに書き込むファイルと考えることができます。
lsofタイプでリッスンしているすべてのTCPポートのリストを取得するには:
$ sudo lsof -nP -iTCP -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 768 root 3u IPv4 16112 0t0 TCP *:22 (LISTEN)
sshd 768 root 4u IPv6 16114 0t0 TCP *:22 (LISTEN)
httpd 781 root 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 781 root 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
tinyproxy 800 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
tinyproxy 805 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
pure-ftpd 844 root 4u IPv4 16289 0t0 TCP *:21 (LISTEN)
pure-ftpd 844 root 5u IPv6 16290 0t0 TCP *:21 (LISTEN)
master 967 root 13u IPv4 17225 0t0 TCP *:25 (LISTEN)
master 967 root 103u IPv4 17319 0t0 TCP 127.0.0.1:10025 (LISTEN)
dovecot 1001 root 24u IPv4 18600 0t0 TCP *:995 (LISTEN)
dovecot 1001 root 37u IPv6 18623 0t0 TCP *:993 (LISTEN)
httpd 24344 apache 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 24344 apache 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
/usr/bin/ 24911 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
/usr/bin/ 24911 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
spamd 24913 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
spamd 24913 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
/usr/sbin 24919 amavis 5u IPv4 25208583 0t0 TCP 127.0.0.1:10024 (LISTEN)
/usr/sbin 24919 amavis 6u IPv6 25208584 0t0 TCP [::1]:10024 (LISTEN)
smtpd 28403 postfix 6u IPv4 17225 0t0 TCP *:25 (LISTEN)
smtpd 28403 postfix 7u IPv6 17226 0t0 TCP *:25 (LISTEN)
使用されるオプションは次のとおりです。
-
-n
:ポート番号をポート名に変換しないでください。 -
-P
:ホスト名を解決せず、数値アドレスを表示します。 -
-iTCP -sTCP:LISTEN
:TCP状態がLISTENのネットワークファイルのみを表示します。
特定のポート(たとえば、ポート3306)でリッスンしているプロセスを見つけるには、次のようにします。
$ sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
出力は、MySQLサーバーがポート3306を使用していることを示しています。
lsof
の詳細 Linuxでコマンドを実行するには、そのマニュアルページを参照してください。
nmapで開いているポートを確認する
nmap
、またはネットワークマッパー は、ネットワーク探索とセキュリティ監査のためのオープンソースのLinuxコマンドラインツールです。 nmapを使用すると、サーバー管理者はホストとサービスをすばやく明らかにし、セキュリティの問題を検索し、開いているポートをスキャンできます。
nmap
コマンドを使用して、単一のポートまたは一連のポートが開いていることを確認できます。
ターゲットシステムのポート80をスキャンする方法は次のとおりです。
$ sudo nmap -p 80 192.168.0.1
Nmap scan report for 192.168.0.1
Host is up (0.000073s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
ターゲットシステムのポート1から200をスキャンします:
$ sudo nmap -p 1-200 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:42 EEST
Nmap scan report for 192.168.0.1
Host is up (0.0000080s latency).
Not shown: 196 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds
最も一般的なポートをスキャン(高速)します:
$ sudo nmap -F 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:44 EEST
Nmap scan report for 192.168.0.1
Host is up (0.000014s latency).
Not shown: 89 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds
結論として、開いているポートと、それらのポートで接続を受け入れるサービスから取得できる情報を確認すると、サーバーをロックダウンするために必要な情報が得られます。
たとえば、悪意のあるユーザーがマシンから漏洩した無関係な情報を使用して、既知の脆弱性を悪用したり、新しい脆弱性を開発したりする可能性があります。彼らが理解できることが少なければ少ないほど良い。