GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで開いているポートを確認(スキャン)する方法

ネットワーク接続の問題のトラブルシューティングを行う場合でも、ファイアウォールを構成する場合でも、最初に確認することの1つは、システムで実際に開かれているポートです。

この記事では、Linuxシステムで外部に開かれているポートを見つけるためのいくつかのアプローチについて説明します。

オープンポート番号とは

リスニングポートは、アプリケーションがリッスンするネットワークポートです。 ssなどのコマンドを使用してネットワークスタックにクエリを実行すると、システムのリスニングポートのリストを取得できます。 、netstat またはlsof 。各リスニングポートは、ファイアウォールを使用して開く(フィルタリングする)ことができます。

一般的に、開いているポートは、離れた場所からの着信パケットを受け入れるネットワークポートです。

たとえば、ポート80でリッスンするWebサーバーを実行している場合 および443 これらのポートはファイアウォールで開いているため、誰でも(ブロックされたIPを除く)、自分のブラウザを使用してWebサーバーでホストされているWebサイトにアクセスできます。この場合、両方の80 および443 開いているポートです。

攻撃者は各オープンポートを使用して脆弱性を悪用したり、その他の種類の攻撃を実行したりする可能性があるため、オープンポートはセキュリティリスクをもたらす可能性があります。アプリケーションの機能に必要なポートのみを公開し、他のすべてのポートを閉じる必要があります。

nmapで開いているポートを確認します #

Nmapは、単一のホストと大規模なネットワークをスキャンできる強力なネットワークスキャンツールです。これは主にセキュリティ監査と侵入テストに使用されます。

可能な場合は、nmap ポートスキャンに関しては、最初のツールになるはずです。ポートスキャンに加えて、nmap Macアドレス、OSタイプ、カーネルバージョンなども検出できます。

コンソールから発行される次のコマンドは、ネットワークからのTCP接続をリッスンしているポートを判別します。

sudo nmap -sT -p- 10.10.8.8

-sT nmapに通知します TCPポートと-p-をスキャンします すべての65535ポートをスキャンします。 -p-の場合 nmapは使用されません 最も人気のある1000個のポートのみをスキャンします。

Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

上記の出力は、ポート22のみを示しています 、80 および8069 ターゲットシステムで開かれます。

UDPポートをスキャンするには、-sUを使用します -sTの代わりに :

sudo nmap -sU -p- 10.10.8.8

詳細については、nmapのmanページにアクセスし、このツールの他のすべての強力なオプションについてお読みください。

netcatで開いているポートを確認する #

Netcat(またはnc )は、TCPまたはUDPプロトコルを使用して、ネットワーク接続間でデータを読み書きできるコマンドラインツールです。

netcatを使用 単一のポートまたはポート範囲をスキャンできます。

たとえば、IPアドレスが10.10.8.8のリモートマシンで開いているTCPポートをスキャンするには 20-80の範囲 次のコマンドを使用します:

nc -z -v 10.10.8.8 20-80

-z オプションはncに指示します データと-vを送信せずに、開いているポートのみをスキャンします より詳細な情報のためです。

出力は次のようになります:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

開いているポートの行のみを画面に印刷する場合は、grepで結果をフィルタリングします。 コマンド。

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

UDPポートをスキャンするには、-uを渡します ncのオプション コマンド:

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
2>&1 構成は、標準エラーを標準出力にリダイレクトします。

Bash疑似デバイスを使用して開いているポートを確認する#

特定のポートが開いているか閉じているかを確認する別の方法は、Bashシェル/dev/tcp/..を使用することです。 または/dev/udp/.. 疑似デバイス。

/dev/$PROTOCOL/$HOST/$IPでコマンドを実行する場合 疑似デバイスの場合、Bashは指定されたポートで指定されたホストへのTCPまたはUDP接続を開きます。

次のif..elsestatementは、ポート443かどうかをチェックします kernel.orgで 開いています:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
  echo "Port is open"
else
  echo "Port is closed"
fi
Port is open

上記のコードはどのように機能しますか?

疑似デバイスを使用してポートに接続する場合、デフォルトのタイムアウトは非常に大きいため、timeoutを使用しています。 5秒後にテストコマンドを強制終了するコマンド。 kernel.orgへの接続が確立されている場合 ポート443 テストコマンドはtrueを返します。

ポート範囲を確認するには、forループを使用します。

for PORT in {20..80}; do
  timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" &&  echo "port $PORT is open"
done

出力は次のようになります:

port 22 is open
port 80 is open

結論#

開いているポートをスキャンするために使用できるいくつかのツールを示しました。開いているポートをチェックする他のユーティリティやメソッドもあります。たとえば、Pythonのsocketを使用できます。 モジュール、curltelnet またはwget

ご質問やご意見がございましたら、下にコメントを残してください。


Linux
  1. netstat、lsof、およびnmapを使用してLinuxで開いているポートを確認する方法

  2. LinuxでNetstatを使用してリスニング/オープンポートを確認する方法

  3. Linux/Unix サーバーで開いているポートを一覧表示する方法

  1. Redhatのバージョンを確認する方法

  2. Linuxで開いているすべてのポートのリストを見つける方法

  3. Linuxでポートを閉じる方法は?

  1. Linuxでディスク容量を確認する方法

  2. RHEL 8 / CentOS8Linuxで開いているポートを確認する方法

  3. UbuntuLinuxで開いているポートを表示/確認する方法