Linuxでポートを開く方法を学ぶ前に、ネットワークポートとは何かを理解しましょう。 ポート 通信エンドポイントです。オペレーティングシステム内で、ポートはデータパケット固有のプロセスまたはネットワークサービスを許可します。
通常、ポートは、ポートに割り当てられた特定のネットワークサービスを識別します。これは、別のポートを使用するようにサービスを手動で構成することで変更できますが、通常はデフォルトを使用できます。
最初の1024 ポート(ポート 0-1023 )は既知のポート番号と呼ばれ、SSH(ポート22)、HTTPおよびHTTPS(ポート80および443)などの最も一般的に使用されるサービス用に予約されています。1024を超えるポート番号はエフェメラルと呼ばれます。ポート 。
エフェメラルポートの中で、ポート番号 1024-49151 登録済み/ユーザーと呼ばれます ポート。残りのポート、 49152-65535 ダイナミック/プライベートと呼ばれます ポート。
このチュートリアルでは、最も一般的なサービスが既知のポートを使用するため、Linuxでエフェメラルポートを開く方法を示します。
開いているすべてのポートを一覧表示する
Linuxでポートを開く前に、まず開いているすべてのポートのリストを確認し、そのリストから開くエフェメラルポートを選択しましょう。
netstatを使用できます TCP のポートを含む、開いているすべてのポートを一覧表示するコマンド 、 UDP 、これはネットワーク層でのパケット送信の最も一般的なプロトコルです。
注 :ディストリビューションに netstat
がない場合 、問題ありません。 ss
を使用できます リスニングソケットを介して開いているポートを表示するコマンド。
netstat -lntu
これにより、すべてのリスニングが出力されます ソケット( -l </ code> )ポート番号と一緒に (
-n
)、 TCP ポート( -t
)および UDP ポート( -u
)出力にもリストされています。

一貫した出力が得られることを確認するために、 ss
を使用してこれを確認しましょう。 ポートが開いているリスニングソケットを一覧表示するコマンド。
ss -lntu

これにより、 netstat
とほぼ同じオープンポートが提供されます。 、だから私たちは行ってもいいです!
Linuxでポートを開いてTCP接続を許可する
閉じたポートを開いて、 TCPをリッスンさせましょう この例のための接続。
ポート4000以降 システムで使用されていないので、ポート 4000を開くことにしました 。そのポートがシステムで開いていない場合は、別の閉じたポートを自由に選択してください。 1023よりも大きいことを確認してください !
繰り返しになりますが、念のため、 netstat
を使用して、ポート4000が使用されていないことを確認しましょう。 またはss
コマンド。
netstat -na | grep :4000
ss -na | grep :4000
出力は空白のままにして、現在使用されていないことを確認する必要があります。これにより、ポートルールをsystemiptablesファイアウォールに手動で追加できます。 。
Ubuntuユーザーおよびufwファイアウォールベースのシステムの場合
Ubuntuにはufw
というファイアウォールがあります 、古い iptables
の代わりに、ポートと接続のこれらのルールを処理します ファイアウォール。 Ubuntuユーザーの場合は、 ufw
を使用してポートを直接開くことができます
sudo ufw allow 4000
次のいくつかの手順をスキップして、新しく開いたポートを直接テストできます!
CentOSおよびfirewalldベースのシステムの場合
これらのタイプのシステムの場合、 firewalld
がある場合 プライマリファイアウォールとして、 Firewall-cmd
を使用することをお勧めします 古いiptables
の代わりに、ファイアウォールルールを更新します ファイアウォール。
firewall-cmd --add-port=4000/tcp
注:これにより、 firewalld
がリセットされます 再起動時にデフォルトになるルール。この設定を永続的に変更する場合は、-permanent
を追加します。 コマンドにフラグを立てます。
firewall-cmd --add-port=4000/tcp --permanent
次のいくつかの手順をスキップして、新しく開いたポートを直接テストできます!
その他のLinuxディストリビューションの場合
それでは、 iptables
を使用して、この新しいポートをシステムのiptablesルールに追加しましょう。 コマンド。
このコマンドがまだインストールされていない場合は、パッケージマネージャーを使用して取得してください。
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
これにより、ファイアウォールが追加に設定されます (-A
)プロトコル( -p
)を介して入力パケットを受け入れる新しいルール ) TCP ここで、宛先ポート (-dport
)は 4000 、およびターゲットのジャンプを指定します ( -j
) ACCEPTとしてルール 。
ファイアウォールルールを更新するには、 iptables
を再起動します サービス。
sudo service iptables restart
または systemctl
を使用する お持ちの場合。
sudo systemctl restart iptables
TCP接続用に新しく開いたポートをテストします
これで、新しい TCPを正常に開くことができました。 ポート(私の場合はポート4000)、テストしてみましょう。
まず、netcat( nc
)を起動します ) ls
の出力を送信しながら、ポート4000でリッスンします 接続されているクライアントに。したがって、クライアントがポート4000でTCP接続を開いた後、クライアントは ls
の出力を受け取ります。 。
ls | nc -l -p 4000
これにより、netcatはポート4000でリッスンします。このセッションは今のところそのままにしておきます。
同じマシンで別のターミナルセッションを開きます。
TCPポートを開いたので、 telnet
を使用します TCP接続を確認します。コマンドが存在しない場合は、パッケージマネージャーを使用してインストールしてください。
telnetのフォーマット :
telnet [hostname/IP address] [port number]
したがって、サーバーのIPとポート番号( 4000 )を入力します 私の場合、このコマンドを実行します。
telnet localhost 4000
これにより、 localhost
でTCP接続を開こうとします ポート4000で。
これに似た出力が表示され、リスニングプログラム( nc
との接続が確立されたことを示します。 。

ご覧のとおり、 ls
の出力 ( while.sh
私の場合)もクライアントに送信され、TCP接続が成功したことを示しています!
ポートが実際に開いていることを示すために、 nmap
を使用できます。 これを確認します。
nmap localhost -p 4000

確かに、私たちの港が開かれました! Linuxシステムで新しいポートを正常にオープンしました!
注 : nmap
現在リッスンしているアプリケーションがある開いているポートのみを一覧表示します。 netcatなどのリスニングアプリケーションを使用していない場合、現在そのポートでリッスンしているアプリケーションがないため、ポート4000は閉じていると表示されます。同様に、telnetも、バインドするリスニングアプリケーションが必要なため、機能しません。これがnc
の理由です とても便利なツールです。これは、このような環境を簡単なコマンドでシミュレートします。
ただし、システムを再起動するたびに変更がリセットされるため、これは一時的なものです。
再起動するたびにルールを更新する必要があります
この記事で紹介するアプローチは、システムがシャットダウン/再起動するまで、ファイアウォールルールを一時的に更新するだけです。したがって、再起動後に同じポートを再度開くには、同様の手順を繰り返す必要があります。
ufwファイアウォールの場合
ufw
ルールはない 再起動時にリセットするので、Ubuntuユーザーの場合は、この部分について心配する必要はありません!
これは、ブートプロセスに統合されており、カーネルが ufw
を使用してファイアウォールルールを保存するためです。 、適切な構成ファイルを介して。
firewalldの場合
前述のように、 firewalld
同じ問題もありますが、-permanant
を追加することで回避できます。 ポートを開くとき、または他のルールを設定するときに、最初のコマンドにフラグを立てます。
たとえば、TCPポート 4000を開くことができます 以下のコマンドを永続的に使用します:
firewall-cmd --zone=public --add-port=400/tcp --permanent
iptablesの場合
iptables
の場合 ファイアウォール。この不便さは避けられませんが、煩わしさを最小限に抑えることができます。
iptables
を保存できます /etc/iptables.conf
などの構成ファイルへのルール 。
sudo iptables-save | sudo tee -a /etc/iptables.conf
次に、次のコマンドを使用して、再起動後に構成ファイルから取得できます。
sudo iptables-restore < /etc/iptables.conf
さて、 iptables
ルールが更新され、ポートが再び開かれました!
結論
このチュートリアルでは、Linuxで新しいポートを開き、着信接続用にセットアップする方法を示しました。