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

ネットワーク管理者向けの効果的な Linux ポート スキャン

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

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

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

前提条件

このチュートリアルは実践的なデモンストレーションです。先に進みたい場合は、Linux システムを使用していることを確認してください。このチュートリアルでは Ubuntu 20.04 を使用していますが、最新の Linux ディストリビューションであればどれでも動作します。

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

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

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

ポート スキャンでは、開いているポートについてサーバーまたはホストをプローブできます。これは、さまざまな理由で役立ちます。

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

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

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

apt update -y

2. 次に、次の apt install コマンドを実行して Nmap をインストールします。

apt install nmap -y

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

nmap --version

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

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

nmap scanme.nmap.org

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

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

各ポートとそのステータスを出力で確認することもできます:

  • 開く – ポートが開いていて、着信接続をリッスンしていることを示します。
  • 閉店 – ポートが閉じられており、着信接続をリッスンしていないことを示します。
  • フィルタ済み – ポートがフィルタリングされていることを示し、Nmap はポートが開いているか閉じているかを判断できません。 Nmap はプローブをポートに送信しますが、応答がありません。

特定のポートのスキャン

Nmap はバックグラウンドで多くのことを行い、各ポートのステータスを確認しようとします。 -p のように、より詳細に制御するための CLI オプションを追加することで、スキャンをさらにカスタマイズできます。 オプション。このオプションを使用すると、スキャンするポートを指定できます。

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

nmap -p 80 scanme.nmap.org

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

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 が Google Public DNS サーバーを使用してホスト名を解決し、スキャンが成功したことを確認できます。

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

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

レベル 9 は非常に詳細な出力用です。これは、Nmap に取り組んでいる開発者に役立ちます。

nmap -d 3 -p 80 scanme.nmap.org

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

ネットキャット (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) とは別に、他の多くのメッセージも表示されるため、煩わしい場合があります。したがって、次のステップにジャンプして、出力をフィルタリングしてください。

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 のみが開いており、これにも成功メッセージがあります。

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

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

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

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

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

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

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

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

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

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

nano 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 スクリプトを実行します。

bash ports.sh

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

結論

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

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


Linux
  1. 初心者向けのLinuxターミナルガイド

  2. 効果的なプロセス管理のための8つのLinuxコマンド

  3. Kali Linux のパッケージを見つける

  1. Linuxコマンドラインに関する8つのヒント

  2. ネットワーク診断用の10のLinuxコマンド

  3. ネットワーク管理者に役立つ Linux Dig の例

  1. スキャンをネットワーク経由でLinuxマシンに送信します

  2. Linux 用 Windows サブシステムの Kali

  3. Gemini PDA 用の Kali Linux