目次:
ネットワーク接続の問題をトラブルシューティングするか、ファイアウォールを構成するかを最初に確認することの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
使用できます。
Icloudから不要なアプリを削除(または非表示)する方法

ICloudの購入履歴からアプリを非表示にしてiOSデバイスに表示されないようにする方法を説明するステップバイステップガイド。 やってみよう!
Leeco le 1sを簡単にインストール(ルート解除)する方法(le x507)

LeEco Le 1sはあなたのPCを使わなくても定着することができます。 1つのアプリと私たちのノウハウの助けを借りて、それはかなり簡単に行うことができます。 ルート解除も簡単です。
Mac上でハードディスクの問題を特定(および修正)する方法

Macは、WindowsのPCと同じくらいハードディスクの問題に影響を受けません。 これで、問題なく識別し、修正することができます。