Linuxでサーバーが使用しているポートを確認する方法
Linuxサーバーでどのポートが使用されている(プロセスがリッスンしている、または通信を行っている)かを確認する方法を紹介します
ss コマンド (推奨)
現在のLinuxディストリビューションでは、高速かつ詳細な情報を取得できる ss コマンドが標準で推奨されているようです
すべてのリスニングポート(接続待ちのポート)を数値で確認する
$ sudo ss -tulpn
-t: TCPポートを表示-u: UDPポートを表示-l: リスニング(接続待ち)状態のソケットのみ表示-p: ポートを使用しているプロセスの情報を表示-n: サービス名に変換せず、ポート番号で表示
netstat コマンド
昔から使われている確認方法です。環境によっては net-tools パッケージのインストールが必要です。
すべてのリスニングポート(接続待ちのポート)を数値で確認する
$ sudo netstat -tulpn
オプションの意味は ss コマンドと同様です
lsof コマンド (プロセス名やファイルから調べたいとき)
「特定のポート番号をどのアプリが使っているか」や「特定のファイル・プロセスが開いているポート」をピンポイントで調べたい場合に便利です。
特定のポート(例: 80番ポート)を使用しているプロセスを確認する
$ sudo lsof -i :80
すべてのネットワーク接続と使用プロセスを一覧表示する
$ sudo lsof -i -P -n
特定のポートが使われているかサクッと確認したい場合
$ sudo ss -tulpn | grep 80
nmapについて
昔、RHEL5系の頃は開いているポート確認は namp を使っていた記憶があります。最近はセキュリティ基準が変わっているのであまり使用するケースが減っています
セキュリティ監視(IDS/IPS/EDR)の高度化 昔に比べてセキュリティ監視システムが大幅に進化しました。nmap は特有のパケットパターンを生成するため、現代の監視システムでは即座に「ポートスキャン=攻撃の予兆(インシデント)」として自動検知され、管理者にアラートが飛ば飛んだり、IPが自動ブロックされたりします。
クラウド環境の利用規約(AWS、IDCF Cloudなど) 自前で所有している物理サーバーであれば問題ありませんでしたが、クラウド環境やレンタルサーバーでは、無断でのポートスキャンが「利用規約違反」や「攻撃行為」とみなされるケースが増えました。(事前申請や特定の制限が必要な場合があります)
サーバー内部からの確認で十分な場面が多い 「どのサービスがどのポートを使っているか(リッスンしているか)」を確認するだけであれば、サーバー内部から ss や lsof を実行する方が、ネットワークに不要なトラフィックを流さず、確実で高速に判定できます。

