アンドロイド

Linuxで開いているポートをチェック(スキャン)する方法

目次:

Anonim

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

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

オープンポートとは

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

一般的に、開いているポートは、リモートロケーションからの着信パケットを受け入れるネットワークポートです。

たとえば、ポート 80 および 443 でリッスンするWebサーバーを実行しており、それらのポートがファイアウォールで開いている場合、誰でも(ブロックされた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

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

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

sudo nmap -sU -p- 10.10.8.8

詳細については、nmapのマニュアルページを参照し、このツールの他のすべての強力なオプションについてお読みください。

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

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

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

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

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 succeeded!… Connection to 10.10.8.8 80 port succeeded!

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded

Connection to 10.10.8.8 22 port succeeded! Connection to 10.10.8.8 80 port succeeded!

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

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

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

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

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

次のif..elseステートメントは、 kernel.org ポート 443 が開いているかどうかを確認します。

if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi

Port is open

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

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

forループを使用して、ポート範囲を確認することもできます。

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

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

port 22 is open port 80 is open

結論

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

ターミナル