このガイドでは、Linuxの特定のポートでリッスンしているサービスを見つけるためのいくつかの異なる方法について説明します。ほとんどの人は、人気のあるサービスまたはプロセスのデフォルトのポートを知っています。たとえば、Apacheのデフォルトポートは80、FTPデフォルトポートは21、SSHデフォルトポートは22です。このガイドで説明されているように、Linuxのポート名と番号を確認できます。 。 Linuxサーバーを保護するために、デフォルトのポート番号を任意のカスタムポートに変更することもできます。たとえば、次のガイドでは、Apache、FTP、SSHのデフォルトポートを別のポートに変更する方法について説明しています。
- Apacheのデフォルトポートをカスタムポートに変更する方法
- FTPのデフォルトポートをカスタムポートに変更する方法
- SSHのデフォルトポートをカスタムポートに変更する方法
デフォルトのポート番号が変更された場合、どのサービスがどのポートでリッスンしているのかをどのように見つけますか?それが私たちが今見つけようとしていることです!
Linuxの特定のポートでリッスンしているサービスを見つける
特定のポート番号で実行されているサービスを確認するために、以下の4つの方法をリストしました。今後、新しい方法に出くわした場合は、このリストを更新し続けます。だから、それをブックマークして、たまにチェックしてください。
方法1-netstatを使用する
これは、どのサービスがどのポートでリッスンしているかを見つけるために最も一般的に使用される方法です。 Netstat は、ネットワーク接続、ルーティングテーブル、インターフェイス統計、マスカレード接続、およびマルチキャストメンバーシップを印刷するために使用されるコマンドラインユーティリティです。
Netstatは、ほとんどのLinuxディストリビューションのデフォルトのリポジトリで利用できます。
Arch Linuxとそのバリアントにインストールするには、次のようにします。
$ sudo pacman -S net-tools
CentOSでは、RHEL:
$ sudo yum install net-tools
Fedoraの場合:
$ sudo dnf install net-tools
Debian、Ubuntuの場合:
$ sudo apt install net-tools
インストールしたら、次のコマンドを実行して、どのサービスがどのポートでリッスンしているかを確認します。
$ sudo netstat -tulpn
出力例:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2068/python3 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1072/mysqld tcp6 0 0 :::22 :::* LISTEN 1026/sshd tcp6 0 0 :::80 :::* LISTEN 1062/apache2 udp 0 0 127.0.0.53:53 0.0.0.0:* 665/systemd-resolve udp 0 0 192.168.225.22:68 0.0.0.0:* 647/systemd-network udp 0 0 192.168.225.53:68 0.0.0.0:* 647/systemd-network udp6 0 0 fe80::a00:27ff:feff:546 :::* 647/systemd-network udp6 0 0 fe80::a00:27ff:fe7e:546 :::* 647/systemd-network
ご覧のとおり、Pythonサービス( simpleHTTPserver この場合)はポート番号8000でリッスンし、mysqldサービスはポート3306でリッスンし、sshサービスはポート番号22で実行され、apache2はポート80で実行されます。
ここで
-
-t
フラグはtcp接続を示します。 -
-u
フラグはUDP接続を示します。 -
-l </ code>
フラグはリスニングソケットを表示します。 -
-p
フラグは、プロセスID(PID)とそのポートを使用しているもののプロセス名を表示します。 -
-n
フラグは数値アドレスを表示します。
上記のコマンドは、すべてのサービスとそれらがリッスンしているポート番号を一覧表示します。特定のポートでリッスンしているサービスを見つけたい場合はどうなりますか?ここにgrepコマンドがあります 重宝します! netstat
を組み合わせることができます およびgrep
mysqld など、特定のサービスの出力をフィルタリングするコマンド 、以下のように。
$ sudo netstat -tulpn | grep mysqld [sudo] password for sk: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
見る? mysqldサービスはポート番号3306でリッスンしています。
ポート番号はすでにわかっているが、現在どのサービスが使用しているかわからない場合は、以下に示すように、サービス名をポート番号に置き換えるだけです。
$ sudo netstat -tulpn | grep -w 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
ここでは、 -w
flagは、単語全体を形成する一致を含む行のみを表示します。つまり、 -w
オプションは、指定された文字列の完全一致を示します。
-i
を使用することもできます 大文字と小文字の区別を無視して、大文字と小文字のみが異なる文字が互いに一致するようにします
$ sudo netstat -tulpn | grep -i 3306
とても簡単です。
詳細については、manページを参照してください。
$ man netstat
Netstatはほとんど廃止されています。 netstatの代わりに「ss」を使用します。
方法2-「ss」コマンドを使用する
ss ソケットを調査するためのコマンドラインユーティリティです。これはnetstatの代替であり、「ss」の使用法は「netstat」とほぼ同じです。 Ubuntuとそのバリアントにプリインストールされています。
どのサービスがどのポートでリッスンしているかを確認するには、次のコマンドを実行します。
$ sudo ss -tulpn
出力例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=12)) udp UNCONN 0 0 192.168.225.22%enp0s3:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=17)) udp UNCONN 0 0 192.168.225.53%enp0s8:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=25)) udp UNCONN 0 0 [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546 [::]:* users:(("systemd-network",pid=653,fd=24)) udp UNCONN 0 0 [fe80::a00:27ff:feff:d2e0]%enp0s3:546 [::]:* users:(("systemd-network",pid=653,fd=22)) tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32)) tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=13)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1015,fd=3)) tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1015,fd=4))
特定のサービス(mysqldなど)の出力をフィルタリングするには、次を使用します。
$ sudo ss -tulpn | grep -w mysqld tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))
詳細については、manページを参照してください。
$ man ss
方法3-lsofを使用する
名前が示すように、 lsof は、すべてのアクティブなプロセスに属するすべての開いているファイルを一覧表示するコマンドラインユーティリティです。
Linuxにインストールするには、使用するディストリビューションの種類に応じて次のコマンドを使用します。
Arch Linuxの場合:
$ sudo pacman -S lsof
Debian、Ubuntuの場合:
$ sudo apt install lsof
CentOSでは、RHEL:
$ sudo yum install lsof
Fedoraの場合:
$ sudo dnf install lsof
どのプロセスがどのポートで実行されているかを確認するには、次のコマンドに示すようにポート番号を指定するだけです。
$ sudo lsof -i :80
サンプル出力:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 1062 root 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1087 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1088 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1089 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1090 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1094 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN)
詳細については、manページを参照してください。
$ man lsof
方法4-フューザーコマンドを使用する
フューザー ファイルまたはソケットを使用してプロセスを識別するためのさらに別のコマンドラインユーティリティです。指定したファイルまたはファイルシステムを使用しているプロセスのPIDを表示します。
ほとんどのLinuxディストリビューションのデフォルトのリポジトリでも利用できます。
Arch Linuxにインストールするには、次のコマンドを実行します:
$ sudo pacman -S psmisc
Debian、Ubuntuの場合:
$ sudo apt install psmisc
CentOSでは、RHEL:
$ sudo yum install psmisc
Fedoraの場合:
$ sudo dnf install psmisc
まず、特定のポートでリッスンしているサービスまたはプロセスのPIDを見つける必要があります。たとえば、次のコマンドを使用して、ポート3306でリッスンしているプロセスのPIDを検索します。
$ sudo fuser 3306/tcp
以下のような出力が表示されます。
3306/tcp: 1076
ここでは、 1076 はPIDです。
次に、コマンドを使用してPIDを使用して実際のプロセスを確認します。
$ ps -p 1076 -o comm= mysqld
または、 -v
を使用することもできます フラグを立てて、1つのコマンドで完全な詳細を表示します。
$ sudo fuser -v 3306/tcp USER PID ACCESS COMMAND 3306/tcp: mysql 1076 F.... mysqld
詳細については、マニュアルページを参照してください。
$ man fuser
これで、どのプロセスがどのポートでリッスンしているかを見つけるための4つの異なるツールがわかりました。 4つすべてが使いやすく、ほとんどのLinuxディストリビューションで利用できます。他のツールをご存知の場合は、下のコメントセクションでお知らせください。それに応じてこのリストを確認して更新します。