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で新しいポートを開き、着信接続用にセットアップする方法を示しました。