Linuxサーバーでポートが待機しているかどうかを確認するにはどうすればよいですか?
プロセスがnetstat -tuplen
でTCPまたはUDPポートをリッスンしているかどうかを確認できます。
一部のポートが外部からアクセス可能かどうかを確認するには(これがおそらく望ましいことです)、ポートスキャナーを使用できます Nmap fromanotherシステム。チェックしたい同じホスト上でNmapを実行しても、目的にはまったく役に立ちません。
TCPポートが開いているかどうか(ハードウェアファイアウォールを含む)かどうか)をテストする最も簡単な方法は、リモートコンピュータ(デスクトップなど)から入力することです。
telnet myserver.com 80
そのサーバーのポート80への接続を開こうとします。タイムアウトまたは拒否された場合、ポートは開いていません:)
要約すると、ログインできるサーバーがあります。あるポートで何かがリッスンしているかどうかを確認したいとします。ルートとして、次を実行:
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で許可されている可能性があるものがあると思います。
netstat
とlsof
のコンボを使用します:
netstat -an | grep <portnumber>
lsof -i:<portnumber>
ポートが使用されているかどうか、および何が使用されているかを確認します。
システムに接続していて、rootとしてコマンドを実行できる場合は、iptablesの出力を確認できます
iptables -L -vn
これにより、ファイアウォールルールと、開いているターゲットACCEPT
および明示的に閉じているポートターゲットREJECT
がリストされます。
lsof -i :ssh
は、sshポートが開いているすべてのプロセス(リスニング接続とアクティブ接続の両方)をリストします。
そのようなテストをスクリプト化する必要がある場合、nc
はTCPスタックのオープンを検索できるため、Serhii Popov(質問へのコメントを参照)によるソリューションがおそらく最良です実際の接続を試みる代わりにポート。
最も単純な形式は次のとおりです。
nc -z <ip> <port>
指定された<ip>:<port>
コンボが開かれている(つまり、サービスの1つがリッスンしている)場合、コマンドはtrueを返します。
これで、ポートが開くまで待機するスクリプトを記述できます。
while ! nc -z <ip> <port>
do
sleep 1
done
注1:-w
コマンドラインオプションを試したところ、何も実行されなかったようです。どちらの方法でも、コマンドはすぐに戻ります。-w
は、-z
。
注2:デバッグに役立つように、-v
コマンドラインオプションを使用してみてください。