Linuxでポートを開く方法

イントロダクション

ポートは通信のエンドポイントです。オペレーティングシステム内では、ポートは特定のプロセスやネットワークサービスに対してデータパケットを開放または閉じるために使用されます。

通常、ポートはそれらに割り当てられた特定のネットワークサービスを識別します。これはサービスを別のポートを使用するように手動で設定することで変更できますが、一般的にはデフォルトの設定が使用されます。

最初の1024ポート(0から1023のポート番号)は、よく知られたポート番号と呼ばれ、最も一般的に使用されるサービスのために予約されています。これにはSSH(ポート22)、HTTP(ポート80)、HTTPS(ポート443)などが含まれます。

1024以上のポート番号はエフェメラルポートと呼ばれています。

  • Port numbers 1024 to 49151 are called the registered/user ports.
  • Port numbers 49152 to 65535 are called the dynamic/private ports.

このチュートリアルでは、一般的なサービスがよく使うよく知られたポートではなく、Linux上でエフェメラルポートを開きます。

Info

GitHubからアプリケーションをデジタルオーシャンアプリプラットフォームを使用して展開してください。デジタルオーシャンがアプリのスケーリングに注力します。

前提条件

このチュートリアルを完了するには、以下が必要です:

  • Familiarity with using the terminal.

すべてのオープンポートをリストアップしてください。

Linuxでポートを開く前に、全てのオープンポートのリストを確認し、そのリストにないエフェメラルポートを選択して開いてください。

ネットワーク層におけるパケット転送の最も一般的なプロトコルであるTCPとUDPを含むすべてのオープンポートを表示するために、netstatコマンドを使用してください。

  1. netstat -lntu

 

これは表示されます。

  • all listening sockets (-l)
  • the port number (-n)
  • TCP ports (-t)
  • UDP ports (-u)
Output

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 ::1:5432 :::* LISTEN tcp6 0 0 ::1:6379 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN

Note

注意:もしあなたのディストリビューションにnetstatがない場合、listeningソケットを確認してオープンポートを表示するためにssコマンドを使うことができます。

オープンポートを持つリスニングソケットをリストするために、ssコマンドを使用して一貫した出力を確認してください。

  1. ss -lntu

 

これは印刷されます。 (Kore wa insatsu saremasu.)

Output

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::1]:5432 0.0.0.0:* tcp LISTEN 0 128 [::1]:6379 0.0.0.0:* tcp LISTEN 0 128 [::]:22 0.0.0.0:*

これは、おおよそnetstatと同じオープンポートを提供します。

LinuxでTCP接続を許可するためのポートを開放する

今、閉じられたポートを開いて、TCP接続を受け入れるようにしてください。

このチュートリアルでは、ポート番号4000を開ける必要があります。しかし、もしシステムでそのポートが開いていない場合は、別の閉じられたポートを選んで構いません。ただし、ポート番号は1023より大きいことを確認してください。

ネットスタットコマンドを使用して、ポート4000が使用されていないことを確認してください。

  1. netstat -na | grep :4000

 

またはssコマンド:

  1. ss -na | grep :4000

 

出力は空白のままでなければならず、現在使用されていないことが確認できるようにするため、ポートのルールを手動でシステムのiptablesファイアウォールに追加できます。

Ubuntuユーザーとufwベースのシステムに対して

UncomplicatedFirewallのコマンドラインクライアントであるufwを使用してください。

あなたの指示は次のようになります。

  1. sudo ufw allow 4000

 

あなたのディストリビューションに適したufwファイアウォールの設定方法については、以下を参照してください。

Note

ノート:

Ubuntu 14.0.4:「特定のポート範囲を許可」
Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4:「他の接続/特定のポート範囲を許可」
Debian 9/10/11:「他の接続/特定のポート範囲を許可」

CentOSとfirewalldベースのシステムについて

ファイアウォールDデーモンのコマンドラインクライアントであるfirewall-cmdを使用してください。

あなたの指示は以下のようなものになるでしょう。

  1. firewall-cmd –add-port=4000/tcp

 

特定のディストリビューションにおいて、firewalld の設定方法については、「How to Set Up firewalld」を参照してください。

Note

注意:

CentOS 7/8: “アプリケーションのルール設定 / ゾーンのポートの開放”
Rocky Linux 8/9: “アプリケーションのルール設定 / ゾーンのポートの開放”

他のLinuxディストリビューション用

システムのIPv4パケットフィルタ規則を変更するためにiptablesを使用してください。

  1. iptables -A INPUT -p tcp –dport 4000 -j ACCEPT

 

「あなたのディストリビューションにおいて、iptablesを使用してファイアウォールを設定する方法については、『How To Set Up A Firewall Using iptables』を参照してください。」

Note

注意:
Ubuntu 12.04:「基本ファイアウォール」
Ubuntu 14.04:「他の必要な接続を許可」

TCP接続をテストするために新しく開かれたポートを試してください。

新しいTCPポートを正常に開いたので、テストの時間です。

最初に、netcat(nc)を起動し、ポート(-p)4000でリッスンするが、lsの出力を接続されたクライアントに送信します。

  1. ls | nc -l -p 4000

 

今、クライアントがポート4000でTCP接続を開いた後、彼らはlsの出力を受け取るでしょう。今のセッションはそのままにしておいてください。

同じマシンで別のターミナルセッションを開いてください。

TCPポートを開いたので、TCP接続を確認するためにtelnetを使用してください。コマンドが存在しない場合は、パッケージマネージャーを使ってインストールしてください。

サーバーのIPとポート番号(例えば4000)を入力し、このコマンドを実行してください。

  1. telnet localhost 4000

 

このコマンドは、ポート4000でlocalhost上のTCP接続を試みます。

“このような出力が表示されると、リスニングプログラム(nc)との接続が確立されました。”

Output

Trying ::1… Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. while.sh

lsコマンドの出力(この例ではwhile.sh)も、クライアントに送信されており、成功したTCP接続を示しています。

ポートが開いているかどうかを確認するために、nmapを使用してください。

  1. nmap localhost -p 4000

 

このコマンドによってオープンポートがチェックされます。

Output

Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 4000/tcp open remoteanything Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

ポートが開かれました。あなたはLinuxシステム上で新しいポートを成功裏に開きました。

Note

注意:nmapは、現在リッスンしているアプリケーションを持つ開いているポートのみをリストアップします。Netcatなどのリッスンアプリケーションを使用しない場合は、ポート4000は閉じていると表示されます。なぜなら、そのポートにリッスンしているアプリケーションが存在しないからです。同様に、telnetもリッスンアプリケーションにバインドする必要があるため機能しません。これがncが非常に便利なツールである理由です。これは、シンプルなコマンドでこのような環境をシミュレートします。

ただしこれは一時的です。変更はシステムを再起動するたびにリセットされます。

持続するルール

この記事で提案されている方法は、システムがシャットダウンまたは再起動されるまで、ファイアウォールのルールを一時的に更新するだけです。そのため、同じポートを再度開くためには、同様の手順を再度繰り返す必要があります。

ufwファイアウォールについて

UFWのルールは再起動してもリセットされません。これは、ブートプロセスに組み込まれており、カーネルが適切な設定ファイルを適用することで、ufwを使用してファイアウォールのルールを保存しているためです。

ファイアウォールディ

「–permanent」フラグを使用する必要があります。

自分のディストリビューションにおけるfirewalldのセットアップ方法について参照してください。

Note

注釈:

CentOS 7/8:「アプリケーションのルール設定」
Rocky Linux 8/9:「アプリケーションのルール設定」

iptablesに関してのみ、ネイティブな日本語で言い換えてください。 一つのオプションで十分です。

アイプテーブルズについて

設定ルールを保存する必要があります。これらのチュートリアルではiptables-persistentを推奨しています。

以下のものを参照して、iptablesを使用してファイアウォールを設定する方法について、あなたのディストリビューションに合ったものを参考にしてください。

Note

注意:

Ubuntu 12.04:「Iptablesのルールの保存」
Ubuntu 14.04:「Iptablesの設定の保存」

結論

このチュートリアルでは、Linux上で新しいポートを開き、受信接続のために設定する方法について学びました。また、netstat、ss、telnet、nc、nmapを使用しました。

「Iptablesファイアウォールの動作方法」、「IptablesとNetfilterのアーキテクチャについての詳細な探求」、「ソケットの理解」、「サーバーリソースの監視についてのTop、Netstat、Duなどのツールの使用方法」など、さまざまなトピックを学び続けましょう。

コメントを残す 0

Your email address will not be published. Required fields are marked *