もっと詳しく

ネットワークセキュリティを強化する方法をお探しですか? プロのようにLinuxポートスキャンを実行する方法を学んでみませんか?

このチュートリアルでは、最も人気のあるツールとテクニックのいくつかについて学び、ポートスキャンに関連する潜在的なリスクと見返りを予測します。

有望に聞こえますか? 今すぐネットワークを保護するためにポートスキャンを開始してください!

前提条件

このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、Linuxシステムを使用していることを確認してください–このチュートリアルではUbuntu 20.04を使用していますが、最新のLinuxディストリビューションでも機能します。

Nmapを使用して開いているポートをスキャンする

ポートをスキャンする方法はさまざまですが、Nmapはネットワーク検出とセキュリティ監査のための優れたツールです。 Nmapを使用すると、パケットを送信して応答を分析することにより、コンピューターネットワーク上のホストとサービスを見つけることができます。

Nmapは無料で利用でき、Windows、Linux、およびOSXと互換性があります。

ポートスキャンを使用すると、サーバーまたはホストで開いているポートを調べることができます。これは、さまざまな理由で役立ちます。

  • ホストで実行されているサービスを確認します。
  • 脆弱性の発見
  • システムを列挙します。

ただし、Nmapを利用する前に、まずマシンにNmapをインストールする必要があります。

1.を実行します aptアップデート 以下のコマンドを使用して、システムパッケージインデックスを更新します。

2.次に、以下を実行します aptインストール Nmapをインストールするコマンド。

Nmapのインストール
Nmapのインストール

3.以下のnmap–versionコマンドを実行して、マシンにインストールされているNmapのバージョンを確認します。

以下では、インストールされているNmapのバージョンは7.80であり、この記事の最新リリースです。

インストールされているNmapバージョンの確認
インストールされているNmapバージョンの確認

4.次に、次のnmapコマンドを実行して、ターゲットのホスト名またはIPアドレス(scanme.nmap.org)をスキャンします。 開始するには、最低限のオプションが必要です。

以下は、スキャンの出力の内訳です。

  • ターゲットのIPv4アドレス– 45.33.32.156
  • ターゲットのIPv6アドレス(使用可能な場合)– 2600:3c01 :: f03c:91ff
  • 逆引きDNS名(使用可能な場合)。

また、出力で各ポートとそのステータスを確認できます。

  • 開いた –ポートが開いていて、着信接続をリッスンしていることを示します。
  • 閉まっている –ポートが閉じており、着信接続をリッスンしていないことを示します。
  • フィルタリング– ポートがフィルタリングされていることを示し、Nmapはポートが開いているか閉じているかを判別できません。 Nmapはプローブをポートに送信しますが、応答を受け取りません。
Nmapを使用したオープンポートのスキャン
Nmapを使用したオープンポートのスキャン

特定のポートをスキャンする

Nmapはバックグラウンドで多くのことを実行して、各ポートのステータスを判別しようとします。 CLIオプションを追加してスキャンをさらにカスタマイズし、次のように制御を強化できます。 -p オプション。 このオプションを使用すると、スキャンするポートを指定できます。

1.次のコマンドを実行して、ターゲットホスト名(scanme.nmap.org)のポート80をスキャンします。 このコマンドは、ターゲットホストのポート80が開いているか閉じているかを通知します。

nmap -p 80 scanme.nmap.org

以下では、ポート80が開いていることがわかります。 この状態は、Webサーバーがポート80で実行されていることを示しています。

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

2.次に、次のコマンドを実行して、GoogleのパブリックDNSサーバー(8.8.8.8および8.8.4.4)を使用して、ホスト名(scanme.nmap.org)のポート80をスキャンします。

–dns-serversオプションを使用すると、スキャンに使用するDNSサーバーを指定できます。 このオプションは、別のネットワーク上のホストをスキャンする場合に役立ちます。 -vフラグは、スキャンに関する詳細情報を提供します。

nmap --dns-servers -p 80 8.8.8.8,8.8.4.4 -v scanme.nmap.org

NmapがGooglePublicDNSサーバーを使用してホスト名を解決し、スキャンが成功したことを以下に示します。

GoogleDNSサーバーを使用してポートをスキャンする
GoogleDNSサーバーを使用してポートをスキャンする

3.最後に、以下のコマンドを実行して、手順1で行ったように、ホスト名(scanme.nmap.org)のポート80をスキャンします。 ただし、今回は、-dオプションを追加して、デバッグレベルを3に上げます。このオプションは、Nmapの問題のトラブルシューティングに役立ちます。

-dオプションは、引数として整数(0から9の間)を取ります。 数値が大きいほど、より多くのデバッグ出力が表示されます。

レベル9は、非常に冗長な出力用です。これは、Nmapで作業している開発者に役立ちます。

nmap -d 3 -p 80 scanme.nmap.org
ポート80のレベル5のデバッグ出力
ポート80のレベル5のデバッグ出力

スキャンポート Netcat(Ncat)の使用

Netcat(nc)は、ネットワーク探索、セキュリティ監査、および侵入テストのためのコマンドラインツールです。 Netcatを使用して、単純なTCPおよびUDP接続と、より複雑なSOCKSおよびHTTPプロキシを作成できます。 ただし、このチュートリアルでは、Netcatを使用してリモートシステムの開いているポートをスキャンします。

1.以下を実行します nc 159.89.176.25のポート20から1000にデータ(-z)を送信せずに、開いているポートをスキャンするコマンド。 -vオプションは、スキャン中に何が起こっているかを確認できるように、Netcatに冗長であることを指示します。

nc -z -v 159.89.176.25 20-1000

ポートの範囲は、必要に応じて増減できます。 ただし、ポート20〜1000は、一般的に使用されるさまざまなポートをカバーします。

以下の出力は、開いているポートとその接続ステータスを示しています。

  • 接続拒否 –対応するポートによって接続が拒否されたことを示します。これは、そのポートで実行されているサービスがないことが原因である可能性があります—ポートは閉じています。
  • 成功しました! – 接続が成功したことを示します—ポートは開いています。

リモートシステムで開いているポート22(SSH)の他に、迷惑な可能性のある他の多くのメッセージも表示されます。 したがって、次の手順にジャンプして出力をフィルタリングします。

Netcatポートスキャンの結果
Netcatポートスキャンの結果

2.以下のgrepコマンドを実行して、159.89.176.25のポート20〜100をスキャンし、単語が成功した各スキャン結果から開いているポートのみを表示します。

2>&1の部分は、シェルにstderr(ファイル記述子2)をstdout(ファイル記述子1)にリダイレクトするように指示するため、エラーメッセージがある場合は出力に表示されます。

nc -z -v 159.89.176.25 20-100 2>&1 | grep succeeded

以下に示すように、ポート22のみが開いており、これにも成功したメッセージがあります。

grepでのNetcatの使用
grepでのNetcatの使用

3.最後に、手順2と同じコマンドを実行します。 ただし、今回は、以下に示すように、UDPポートをスキャンするために-uオプションを追加します。

nc -z -v -u 159.89.176.25 20-100 2>&1 | grep succeeded

UDPをスキャンする場合、スキャンにはTCPポートよりもはるかに長い時間がかかることに注意してください。

  • TCPスキャンは、ターゲットホストとの接続の確立を試み、65,535個のポートすべてをスキャンして、開いているポートを確認します。
  • UDPスキャンは接続の確立を試みませんが、UDPパケットを各ターゲットホストのポートに送信して、開いているポートを確認します。 UDPスキャンはTCPスキャンよりも低くなります。これは、パケットを送信してエラー処理を完了し、 3ウェイハンドシェイク

リモートシステムでUDPサービスが実行されていないため、出力が空白になっていることがわかります。

NetcatスキャンUDPポート
NetcatスキャンUDPポート

Bashスクリプトを使用してポートが開いているかどうかをテストする

これまで、NetcatとNmapを使用してシステムで開いているポートをスキャンする方法を見てきました。 これらのツールは便利ですが、ポートスキャンのタスクを自動化する場合は信頼できません。

たとえば、1000台のホストで開いているポートをスキャンすることを計画しています。 その場合、手動でポートスキャンを行うのは面倒で、完了するまでに長い時間がかかります。 しかし、Linuxでポートスキャンタスクを自動化するにはどうすればよいでしょうか。 Bashスクリプトを書くことでうまくいきます。

ポートスキャンを自動化するBashスクリプトを作成するには:

1.お気に入りのテキストエディタで新しいファイルを開きます。 好きなようにファイルに名前を付けますが、ファイルは呼び出されます このチュートリアルのports.sh。

2.以下のコードをに追加します Ports.sh ファイルですが、必ずSERVERとPORTの値を独自のIPアドレスまたはホスト名とスキャンするポートに置き換えてください。

値を変更した後、変更を保存して、エディターを閉じます。

# Defines the server you want to scan. 
SERVER=adamtheautomator.com
# Defines the port to scan.
PORT=443
# Runs the nmap command and assigns the output to the state variable. 
# The grep command filters and displays the output of the nmap command
# with the lines containing the "open" keyword.
state=`nmap -p $PORT $SERVER | grep "$PORT" | grep open`
# Checks if the state variable is blank (port is closed).
if [ -z "$state" ]; then
	# Displays a message if the connection fails.
  echo "Connection to $SERVER on port $PORT has failed"
else
	# Displays a message if the connection succeeded.
  echo "Connection to $SERVER on port $PORT was successful"
	# Exits the script with an exit code of 1 
	# to determine if the script was successful or not.
  exit 1
fi # Ends the if statement

3.最後に、以下のbashコマンドを実行して、ports.shスクリプトを実行します。

すべてがうまくいけば、443ポートが開いているという次の出力が表示されます adamtheautomator.com。

Bashスクリプトの実行
Bashスクリプトの実行

結論

このチュートリアルでは、NetcatとNmapを備えたシステムで開いているポートをスキャンする方法を学びました。 これらのツールとは別に、ポートスキャンを自動化するBashスクリプトを作成したので、プレート上で他のタスクを実行できます。

この時点で、これらのツールを使用してシステムの開いているポートをスキャンし、ネットワークを安全に保つ方法をすでによく理解しています。 しかし、ポートスキャンタスクをさらに自動化するには、cronジョブを作成してBashスクリプトの実行をスケジュールしてみませんか?

The post ネットワーク管理者のための効果的なLinuxポートスキャン appeared first on Gamingsym Japan.