Linuxサーバーでポートが開いているか閉じているかを確認しますか?


209

ポートがLinuxサーバーでリッスンしているかどうかを確認するにはどうすればよいですか?


2
あなたが何を求めているのかは明確ではありません。「オープン」とはどういう意味ですか?一部のサーバーがそのポートでリッスンしているということですか?それとも、システムファイアウォールで許可されているということですか?または何?
デビッドシュワルツ

サーバー上でポートがブロックされていると思うので、再度ブロック解除/開きたいと思います。
ジェームズアンダーソン

14
netstat -an | grep PORTNUMBER | grep -i listen出力が空の場合、ポートは使用されていません。
automatix

回答:


187

を使用して、プロセスがTCPまたはUDPポートでリッスンしているかどうかを確認できますnetstat -tuplen

一部のポートが外部からアクセス可能かどうかを確認するには(おそらくこれが必要です)、別のシステムのNmapなどのポートスキャナーを使用できます。確認したい同じホストでNmapを実行することは、目的にはまったく役に立ちません。


54
GNU netstatコマンドは、パラメータを知っている-t-u-p-l-e、と-n。オプションパーサーのおかげで、と表現できます-tuplenlinux.die.net/man/8/netstat
joschi

3
また、このtelnetコマンドは通常TCPのみをサポートしているため、チェックするサービスが別のプロトコルで実行されている場合は運が悪いです。
-joschi

1
ええ、私は窓を使用していたので、混乱が生じました。
デクスター

2
ncはtelnetの(より良い)代替手段です。UDPもサポートしています。
ツベトミールディミトロフ

1
sudo:で使用しますsudo netstat -tuplen。これにより、自分だけでなく他のユーザーが所有するプロセスが提供されます。また、非ルートユーザーとして表示されていない場合は、追加の詳細(PID /プログラム名など)が出力されます。
ジョンレッド

102

TCPポートが開いているかどうか(ハードウェアファイアウォールを含む)をテストする最も簡単な方法は、リモートコンピューター(デスクトップなど)から入力することです。

telnet myserver.com 80

そのサーバーのポート80への接続を開こうとします。タイムアウトになるか拒否される場合、ポートは開いていません:)


1
...それはコマンドとして「Telnetを」認識していないことを言う
ジェームズ・アンダーソン

6
「yum install telnet」を使用して、telnetクライアントパッケージをインストールします。
cjc

8
上に書かれています:if you get a time out or deny, the port is not open
産業

2
telnetをインストールする権限がない場合はどうなりますか?別の標準ツールはありますか?
KCバルツ

3
「telnet myhost 22」を試してみましたが、タイムアウトになりました。しかし、私はそのマシンにsshできます。?!
トーステンブロンガー

30

OK、要約すると、ログインできるサーバーがあります。あるポートで何かがリッスンしているかどうかを確認します。ルートとして、次を実行します。

netstat -nlp

これにより、TCPおよびUDPポートでリッスンしているプロセスのリストが表示されます。興味のあるプロセスや表示されると予想されるポート番号をスキャン(またはgrep)できます。

期待するプロセスがない場合は、そのプロセスを起動して、netstatを再度確認する必要があります。プロセスはあるが、予期しないインターフェイスとポートでリッスンしている場合、構成の問題があります(たとえば、リッスンしている可能性がありますが、ループバックインターフェイスのみであるため、127.0.0.1:3306と表示されます) MySQLのデフォルト設定の場合、ポート3306の他の行はありません)。

プロセスが起動していて、期待するポートでリッスンしている場合は、オフィス/自宅のMacbookからそのポートに「telnet」を実行してみてください。

 telnet xxxxxxxxxxxx.co.uk 443

これは、SSL用に設定されたWebサーバーがあるかどうかをテストします(標準ポートを想定)。telnetを使用したこのテストは、プロセスがTCPポートでリッスンしている場合にのみ機能することに注意してください。UDPポートの場合、接続に使用するクライアントを試してください。(ポート224を使用したことがわかります。これはmasqdialerであり、それが何であるかわかりません)。

サービスは存在するが、外部からアクセスできない場合は、ファイアウォールがユーザーをブロックしています。その場合、次を実行します。

 iptables -L -n

これにより、システムで定義されているすべてのファイアウォールルールが表示されます。それを投稿することはできますが、一般に、INPUTチェーンのすべてを許可していない場合は、問題のポートのトラフィックを明示的に許可する必要があるでしょう。

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

またはそれらの線に沿って何か。知らない人がインターネット上で言ったことに基づいて、ファイアウォールコマンドを盲目的に実行しないでください。何をしているのか考えてください。

ボックス上のファイアウォールが必要なトラフィックを許可している場合、ホスティング会社がファイアウォールを実行している可能性があります(たとえば、SSH(22 / tcp)、HTTP(80 / tcp)およびHTTPS(443 / tcp)のみを許可している他のすべての着信トラフィックを拒否します)。この場合、ヘルプデスクチケットを開いてこの問題を解決する必要がありますが、cPanelにそれを許可するものがあるかもしれません。


iptables -Iコマンドを元に戻す方法を追加していただけますか?ありがとう!!
エフゲニー

1
「iptables -D」の後に、元のコマンドの「-I」の後にあるものが続きます。基本的に、ドキュメントを参照してください。
cjc

11

私は、のコンボを使用するnetstatlsof

netstat -an | grep <portnumber>
lsof -i:<portnumber>

ポートが使用されているかどうか、およびポートが何を使用しているかを確認します。


何もしてか、sudoをせずに促していない
Dheeraj Thedijje

1
@DheerajThedijje-そのポートは開いていません
ウォーレン

はい、そうではありませんでした。
Dheeraj Thedijje

7

システムに接続していて、rootとしてコマンドを実行できる場合、iptablesの出力を確認できます

iptables -L -vn

これにより、ファイアウォールルールと、開いているターゲットACCEPTと明示的に閉じているポートがターゲットであるポートが一覧表示されますREJECT


あなたがfirewalldしている場合、それは簡単ですfirewall-cmd --query-port=port/protocol例えば、firewall-cmd --query-port=80/tcp
アゴスティーノ

6

lsof -i :ssh sshポートが開いているすべてのプロセス、リスニング接続とアクティブ接続の両方をリストします。


sudo出力を返さない場合はプレフィックス。
エリヤリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.