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をインストールするプロセス全体

推薦する

nginxリバースプロキシを使用するときに長時間接続を維持する方法

・【シーン説明】 HTTP1.1 以降、HTTP プロトコルは永続的な接続 (長い接続とも呼ばれます...

redhat7 に yum 経由で mysql5.7.17 をインストールするチュートリアル

RHEL/CentOS シリーズの Linux オペレーティング システムには MySQL ソース自...

http:// の代わりに // を使用する利点は何ですか (アダプティブ https)

//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...

MySQL のデータの偶発的な削除の解決策と kill ステートメントの原則

mysql が誤ってデータを削除しました削除ステートメントを使用して誤ってデータ行を削除する誤ってデ...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

Hadoop 2.Xの新機能、ごみ箱機能の説明

ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...

Dockerのデフォルトネットワークセグメントを変更する実装方法の分析

背景同社のサーバーはすべて Alibaba Cloud ECS ホストを購入しています。デフォルトの...

Centos7.X Linux システムに tomcat8 をインストールするためのグラフィック チュートリアル

1. Tomcatのインストールパスを作成する mkdir /usr/local/tomcat 2....

MySQL 8.0 エラー サーバーがクライアントに不明な認証方法を要求しました 解決策

最新バージョンのMySQL 8.0.11をインストールした後、ユーザーを作成して認証します。認証され...

Bootstrap 3.0 学習ノート グリッドシステム事例

序文前回の記事では、主にグリッドシステムの基本原理を学び、簡単なケースを通してその原理を実践しました...

JavaScript は 9 グリッドのクリックによる色の変更効果を実装します

この記事では、9グリッドクリックの色変更効果を実現するためのJavaScriptの具体的なコードを参...

WeChatミニプログラムにナビゲーション機能を実装する方法

1. レンダリング2. 操作手順1. テンセントマップキーを申請する - 住所2. ミニプログラムの...

UbuntuへのDocker CEのインストール

この記事は、Ubuntu 17.10 での Docker CE のインストールを記録するために使用さ...

Tomcat の静的ページ (html) で中国語の文字化けが発生する問題の究極の解決策

tomcatでは、jspは文字化けしませんが、htmlの中国語は文字化けします理由はいくつかあります...

jQueryはシャトルボックス機能を実現する

この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...