Linux サーバーは最大いくつのポートを開くことができますか?

Linux サーバーは最大いくつのポートを開くことができますか?

ポート関連の概念:

ネットワーク技術では、ポートには論理ポートと物理ポートの 2 種類があります。物理ポートとは、RJ-45 ポート、SC ポートなど、他のネットワーク デバイスに接続するために使用される ADSL モデム、ハブ、スイッチ、ルーターのインターフェイスなど、物理的に存在するポートを指します。論理ポートとは、TCP/IP プロトコルのサービス ポートなど、論理的な意味でサービスを区別するために使用されるポートを指します。ポート番号の範囲は 0 ~ 65535 です。たとえば、Web ブラウジング サービスの場合はポート 80、FTP サービスの場合はポート 21 です。物理ポートと論理ポートの数が多いため、ポートを区別するために、各ポートに番号が付けられ、これがポート番号になります。

ポートはポート番号に応じて 3 つのカテゴリに分類できます。

1: よく知られているポート

認識されるポート番号の範囲は 0 から 1023 です。これらは、いくつかの一般的なサービスと密接に結びついています。たとえば、FTP サービスはポート 21 を使用します。このマッピング関係は、/etc/services で確認できます。

2: 登録ポート:

1024から49151まで。いくつかのサービスに緩く結びついています。つまり、これらのポートには多くのサービスがバインドされており、これらのポートは他の多くの目的にも使用されます。

3: 動的ポートおよび/またはプライベートポート

動的ポート、またはプライベート ポート番号は、インターネットの伝送制御プロトコル、またはユーザー トランスポート プロトコルを使用して、任意のソフトウェアが他のソフトウェアと通信するために使用できるポート番号です。動的ポートは通常49152から65535の範囲です

Linux ではポートの範囲が限られています。プログラム用に特定のポートを予約したい場合は、このポート範囲を制御する必要があります。 /proc/sys/net/ipv4/ip_local_port_rangeはローカルTCP/UDPポート範囲を定義します。/etc/sysctl.confでnet.ipv4.ip_local_port_range = 1024 65000を定義できます。

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
[root@localhost ~]# echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range

ポートとサービスについて、私はかつて公衆トイレを例に挙げました。公衆トイレの各トイレは、システム内の各ポートのようなものです。人々に利便性を提供することがいわゆるサービスです。これらのサービスを提供する場合は、ポート(トイレ)を開かなければなりません。誰かがトイレに行くと、これらのポートにリンクが確立されます。トイレが誰かに使われているということは、ポート番号がサービスに使われているということです。ある日、ここで公衆トイレのサービスが提供されなくなり、公衆トイレが取り壊されたら、当然ポート番号はなくなります。実際、より鮮明な例は銀行のロビーのようなものです。ポート番号はカウンターであり、番号を受けて業務を処理する人々はサーバーに接続されたさまざまなクライアントのようなものです。ポートリダイレクト技術を通じて、ビジネス連絡先をカウンターに送信します。もうひとつわかりやすい例を挙げると、ポート番号は高速鉄道の各駅のようなものです。たとえば、長沙、岳陽などはそれぞれポート番号を表しています。乗客は列車の切符を使ってそれぞれの駅まで行きますが、これは各アプリケーションがサーバーポートに送信する IP パケットのようなものです。

ポートとサービスの関係

ポートの用途は何ですか? IP アドレスを持つホストは、Web サービス、FTP サービス、SMTP サービスなど、多くのサービスを提供できることはわかっています。これらのサービスは、1 つの IP アドレスを通じて完全に実装できます。では、ホストはどのようにしてさまざまなネットワーク サービスを区別するのでしょうか?当然ながら、IP アドレスとネットワーク サービスの関係は 1 対多の関係であるため、IP アドレスだけに頼ることはできません。実際、さまざまなサービスは「IP アドレス + ポート番号」によって区別されます。

ポート番号と対応するサービスとの対応は、ほとんどのポートが見つかる /etc/services ファイルに保存されます。

ポートが開いているかどうかはどうやって確認するのでしょうか?実は、整理してみないと、こんなにたくさんの方法があることに気づきません!

1: nmapツールが開いているポートを検出する

Nmap は、ネットワーク スキャンおよびホスト検出ツールです。 nmap のインストールは、以下の rpm インストールに示すように非常に簡単です。

[root@DB-Server Server]# rpm -ivh nmap-4.11-1.1.x86_64.rpm 
警告: nmap-4.11-1.1.x86_64.rpm: ヘッダー V3 DSA 署名: NOKEY、キー ID 37017186
準備中... ################################################ [100%]
   1:nmap #################################################### [100%]
[root@DB-Server Server]# rpm -ivh nmap-frontend-4.11-1.1.x86_64.rpm 
警告: nmap-frontend-4.11-1.1.x86_64.rpm: ヘッダー V3 DSA 署名: NOKEY、キー ID 37017186
準備中... ################################################ [100%]
   1:nmap-フロントエンド ################################################### [100%]

nmap の使用については、非常に詳細かつ長々と説明できるため、ここでは詳しく説明しません。以下に示すように、nmap 127.0.0.1 はローカル マシン上の開いているポートをチェックし、すべてのポートをスキャンします。 もちろん、他のサーバーポートをスキャンすることもできます。

[root@DB-Server Server]# nmap 127.0.0.1
 
2016-06-22 15:46 CST に Nmap 4.11 ( http://www.insecure.org/nmap/ ) を起動しました
localhost.localdomain (127.0.0.1) の興味深いポート:
表示されていない: 1674 個の閉じたポート
港湾国サービス
22/tcp オープンssh
25/tcp オープン SMTP
111/tcp オープン rpcbind
631/tcp オープンipp
1011/tcp オープン 不明
3306/tcp オープン mysql
 
Nmap が終了しました: 1 つの IP アドレス (1 つのホストが稼働中) を 0.089 秒でスキャンしました
/var/spool/mail/rootに新しいメールがあります
[root@DB-Server サーバー]#

2: netstatツールを使用して開いているポートを検出する

[root@DB-Server Server]# netstat -anlp | grep 3306
tcp 0 0 :::3306 :::* LISTEN 7358/mysqld         
[root@DB-Server Server]# netstat -anlp | grep 22
tcp 0 0 :::22 :::* 4020/sshdを聴く           
tcp 0 52 ::ffff:192.168.42.128:22 ::ffff:192.168.42.1:43561 確立 6198/2              
[root@DB-Server サーバー]#

上記のように、このツールは nmap ほど簡潔ではありません。もちろん、nmap ほど強力ではありません。

3: lsofツールは開いているポートを検出します

[root@DB-Server Server]# service mysql start
MySQLを起動しています......[OK]
[root@DB-Server Server]# lsof -i:3306
コマンド PID ユーザー FD タイプ デバイス サイズ ノード名
mysqld 7860 mysql 15u IPv6 44714 TCP *:mysql (LISTEN)
[root@DB-Server Server]# service mysql stop
MySQL をシャットダウンしています...[OK]
[root@DB-Server Server]# lsof -i:3306
[root@DB-Server サーバー]# 
[root@DB-Server Server]# lsof -i TCP| fgrep LISTEN
cupsd 3153 ルート 4u IPv4 9115 TCP localhost.localdomain:ipp (LISTEN)
ポートマップ 3761 rpc 4u IPv4 10284 TCP *:sunrpc (LISTEN)
rpc.statd 3797 rpcuser 7u IPv4 10489 TCP *:1011 (LISTEN)
sshd 4020 ルート 3u IPv6 12791 TCP *:ssh (LISTEN)
sendmail 4042 ルート 4u IPv4 12876 TCP localhost.localdomain:smtp (LISTEN)

4: ssツールは開いているポートを検出します

[root@localhost ~]# ss -ntl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート              
聞く 0 50 *:3306 *:*                  
聞く 0 128 *:111 *:*                  
聞く 0 128 *:22 *:*                  
聞く 0 32 *:8808 *:*                  
聞く 0 128 [::]:111 [::]:*                  
聞く 0 128 [::]:22 [::]:*                  
[root@localhost ~]# 

5: telnetを使用してポートが開いているかどうかを確認する

サーバー ポートがリスニング状態であっても、ファイアウォールの iptables によってポートがブロックされている場合、この方法ではポートが開いているかどうかを検出することはできません。

6: netcatツールを使用してポートが開いているかどうかを確認する

[root@DBサーバー ~]# nc -vv 192.168.42.128 1521
192.168.42.128 1521 ポート [tcp/ncube-lm] への接続に成功しました。
[root@DB-Server ~]# nc -z 192.168.42.128 1521; echo $?
192.168.42.128 1521 ポート [tcp/ncube-lm] への接続に成功しました。
0
[root@DBサーバー ~]# nc -vv 192.168.42.128 1433
nc: 192.168.42.128 ポート 1433 (tcp) への接続に失敗しました: ホストへのルートがありません

閉じたポートと開いたポート

ポートを閉じることとポートを開くことは、2 つの異なる概念です。各ポートには対応するサービスがあります。したがって、ポートを閉じるには、対応するサービスを閉じるだけで済みます。次の例に示すように、MySQL サービスがオンになっており、ポート 3306 がリスニング状態になっています。MySQL サービスがオフになると、ポート 3306 は自然に閉じられます。

[root@DB-Server Server]# service mysql start
MySQLを起動しています......[OK]
[root@DB-Server Server]# lsof -i:3306
コマンド PID ユーザー FD タイプ デバイス サイズ ノード名
mysqld 7860 mysql 15u IPv6 44714 TCP *:mysql (LISTEN)
[root@DB-Server Server]# service mysql stop
MySQL をシャットダウンしています...[OK]
[root@DB-Server Server]# lsof -i:3306
[root@DB-Server サーバー]#

したがって、セキュリティ上の理由やリソースの節約のために、システム内の不要なポートやサービスを閉じる必要があります。対応するポートを閉じます。また、サービスがオンになっている場合でも、ファイアウォールによって該当ポートが制限されるため、ポートにアクセスすることはできませんが、ポート自体は閉じられておらず、ブロックされているだけです。

Linux サーバーが最大いくつのポートを開けられるかについての記事はこれで終わりです。Linux サーバーの開いているポートの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux インデックスノード inode の詳細な説明
  • Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します
  • Linux ネットワーク設定の詳細
  • MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法
  • Unix/Linuxフォークの隠れたオーバーヘッド
  • Linux での UDP について学ぶ
  • Linux スワップ パーティション (詳細説明)
  • Linux での C++ ネットワーク プログラミング、epoll テクノロジ、Windows での IOCP モデル
  • Linux ファイル記述子、ファイルポインタ、および inode の詳細

<<:  vue-seamless-scrollがスクロールしていいねをするときのデータ同期の問題を解決する

>>:  ARM64アーキテクチャでmysql5.7.22をインストールするプロセス全体

推薦する

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

Nest.js のハッシュと暗号化の例の詳細な説明

0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

React+Ant Design開発環境をセットアップするための実装手順

基礎1. スキャフォールディングを使用してプロジェクトを作成し、開始する1.1 足場を設置する: n...

追加、削除、変更、クエリを実行するための JS 操作オブジェクト配列のサンプルコード

1. はじめに最近、私は友人が JSON 配列を追加、削除、変更するための簡単なページを作成するのを...

MySQL 5.7 の同時レプリケーションにおける暗黙のバグの分析

序文当社の MySQL オンライン環境のほとんどはバージョン 5.7.18 を使用しています。このバ...

Vue でユーザー権限に基づいてルートを動的に追加する方法

ユーザーの権限に応じて異なるメニュー ページを表示します。知識ポイントルートガード(事前ガードを使用...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

表の最初の行と最初の列を固定し、適応型ウィンドウを実現するための CSS の例コード

今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

Vue でよく使われる命令 v-if と v-show の違いを簡単に分析します。

目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...

Vue から React への変換入門ガイド

目次デザインコンポーネント通信ライフサイクルイベント処理品格とスタイルクラススタイル条件付きレンダリ...

MongoDBのパフォーマンスを向上させる方法

MongoDB は高性能なデータベースですが、使用していくうちにパフォーマンスの問題が発生することが...

CentOS 7.5 に Python 3.6.6 を最初からインストールするための詳細なチュートリアル

ps: 環境はタイトル通りです依存関係をインストールする yum インストール openssl-de...

Linux システムで MySQL データベースの解凍バージョンをインストールして構成する方法

1. ファイルを現在のディレクトリに解凍しますコマンド: tar -zxvf mysql....ta...