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
前提条件
このチュートリアルを完了するには、以下が必要です:
- Familiarity with using the terminal.
すべてのオープンポートをリストアップしてください。
Linuxでポートを開く前に、全てのオープンポートのリストを確認し、そのリストにないエフェメラルポートを選択して開いてください。
ネットワーク層におけるパケット転送の最も一般的なプロトコルであるTCPとUDPを含むすべてのオープンポートを表示するために、netstatコマンドを使用してください。
- netstat -lntu
これは表示されます。
- all listening sockets (-l)
- the port number (-n)
- TCP ports (-t)
- UDP ports (-u)
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
オープンポートを持つリスニングソケットをリストするために、ssコマンドを使用して一貫した出力を確認してください。
- ss -lntu
これは印刷されます。 (Kore wa insatsu saremasu.)
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が使用されていないことを確認してください。
- netstat -na | grep :4000
またはssコマンド:
- ss -na | grep :4000
出力は空白のままでなければならず、現在使用されていないことが確認できるようにするため、ポートのルールを手動でシステムのiptablesファイアウォールに追加できます。
Ubuntuユーザーとufwベースのシステムに対して
UncomplicatedFirewallのコマンドラインクライアントであるufwを使用してください。
あなたの指示は次のようになります。
- 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を使用してください。
あなたの指示は以下のようなものになるでしょう。
- firewall-cmd –add-port=4000/tcp
特定のディストリビューションにおいて、firewalld の設定方法については、「How to Set Up firewalld」を参照してください。
Note
注意:
CentOS 7/8: “アプリケーションのルール設定 / ゾーンのポートの開放”
Rocky Linux 8/9: “アプリケーションのルール設定 / ゾーンのポートの開放”
他のLinuxディストリビューション用
システムのIPv4パケットフィルタ規則を変更するためにiptablesを使用してください。
- 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の出力を接続されたクライアントに送信します。
- ls | nc -l -p 4000
今、クライアントがポート4000でTCP接続を開いた後、彼らはlsの出力を受け取るでしょう。今のセッションはそのままにしておいてください。
同じマシンで別のターミナルセッションを開いてください。
TCPポートを開いたので、TCP接続を確認するためにtelnetを使用してください。コマンドが存在しない場合は、パッケージマネージャーを使ってインストールしてください。
サーバーのIPとポート番号(例えば4000)を入力し、このコマンドを実行してください。
- telnet localhost 4000
このコマンドは、ポート4000でlocalhost上のTCP接続を試みます。
“このような出力が表示されると、リスニングプログラム(nc)との接続が確立されました。”
Trying ::1… Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. while.sh
lsコマンドの出力(この例ではwhile.sh)も、クライアントに送信されており、成功したTCP接続を示しています。
ポートが開いているかどうかを確認するために、nmapを使用してください。
- nmap localhost -p 4000
このコマンドによってオープンポートがチェックされます。
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
ただしこれは一時的です。変更はシステムを再起動するたびにリセットされます。
持続するルール
この記事で提案されている方法は、システムがシャットダウンまたは再起動されるまで、ファイアウォールのルールを一時的に更新するだけです。そのため、同じポートを再度開くためには、同様の手順を再度繰り返す必要があります。
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などのツールの使用方法」など、さまざまなトピックを学び続けましょう。