導入
ポートとは通信のエンドポイントです。オペレーティングシステムでは、特定のプロセスまたはネットワークサービスのデータパケットに対してポートが開かれたり閉じられたりします。.
通常、ポートは割り当てられた特定のネットワークサービスを識別します。サービスを手動で別のポートを使用するように設定することで変更できますが、通常はデフォルト設定を使用できます。.
最初の1024個のポート(ポート番号0~1023)はウェルノウンポートと呼ばれ、最も一般的なサービスのために予約されています。これにはSSH(ポート22)、HTTP(ポート80)、HTTPS(ポート443)が含まれます。.
1024 を超えるポート番号は、エフェメラル ポートと呼ばれます。.
- ポート 1024 から 49151 は登録ポート/ユーザー ポートと呼ばれます。.
- ポート 49152 から 65535 は、ダイナミック ポート/プライベート ポートと呼ばれます。.
このチュートリアルでは、ほとんどの一般的なサービスがよく知られているポートを使用するため、Linux で一時ポートを開きます。.
前提条件
- 端末の使い方に慣れている
開いているすべてのポートのリスト
Linux でポートを開く前に、開いているすべてのポートのリストを確認し、そのリストにない一時ポートを選択して開く必要があります。.
netstat コマンドを使用して、ネットワーク層でのパケット転送に最もよく使用されるプロトコルである TCP および UDP を含む、開いているポートをすべて一覧表示します。.
netstat -lntu次のように印刷されます:
- すべてのリスニングソケット (-l)
- ポート番号 (-n)
- TCPポート (-t)
- UDPポート (-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:* LISTENss コマンドを使用して、開いているポートを持つリスニング ソケットを一覧表示し、一貫した出力が得られることを確認します。
ss -lntu次のように印刷されます:
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より大きいポート番号を指定してください。.
netstat コマンドを使用して、ポート 4000 が使用されていないことを確認します。
netstat -na | grep :4000または ss コマンド:
ss -na | grep :4000出力は空白のままにしておく必要があるため、現在使用されていないことを確認して、iptables システム ファイアウォールにポート ルールを手動で追加できるようにします。.
Ubuntuユーザーとufwベースのシステム向け
手間のかからないファイアウォールを実現するコマンドライン クライアントである ufw を使用します。.
コマンドは次のようになります:
sudo ufw allow 4000CentOSおよびファイアウォールベースのシステムの場合
firewalld デーモンのコマンドライン クライアントである firewall-cmd を使用します。.
コマンドは次のようになります:
firewall-cmd --add-port=4000/tcp他のLinuxディストリビューションの場合
iptables を使用して、システムの IPv4 パケット フィルタリング ルールを変更します。.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT新しく開いたポートをTCP接続用にテストする
新しい TCP ポートを正常に開いたので、次はそれをテストします。.
まず、netcat (nc) を起動し、ポート (-p) 4000 で listen (-l) しながら、接続された各クライアントに ls の出力を送信します。
ls | nc -l -p 4000クライアントがポート4000でTCP接続を開くと、lsの出力が返されます。このセッションは一旦そのままにしておいてください。.
同じデバイスで別のターミナルセッションを開きます。.
TCPポートを開いたので、telnetを使ってTCP接続を確認してください。コマンドが見つからない場合は、パッケージマネージャーを使ってインストールしてください。.
サーバーの IP とポート番号 (この例では 4000) を入力し、次のコマンドを実行します。
telnet localhost 4000このコマンドは、ポート 4000 の localhost で TCP 接続を開こうとします。.
次のような出力が表示され、リスニング プログラム (nc) との接続が確立されたことが示されます。
Output
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.shls (この例では while.sh) の出力もクライアントに送信され、TCP 接続が成功したことが示されます。.
nmap を使用してポートが開いているかどうかを確認します (-p):
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システムで新しいポートが正常に開かれました。.
ただし、システムを再起動するたびに変更はリセットされるため、これは一時的なものになります。.
持続可能なルール
この記事で紹介した方法は、システムがシャットダウンまたは再起動されるまでの間、ファイアウォールルールを一時的に更新するだけです。そのため、再起動後に同じポートを再度開くには、同じ手順を繰り返す必要があります。.
ufwファイアウォールの場合
ufwルールは再起動してもリセットされません。これは、ufwがブートプロセスに統合されており、カーネルが適切な設定ファイルを適用することでufwを使用したファイアウォールルールを保存するためです。.
ファイアウォールの場合
ポートを永続的なファイアウォール構成に追加し、変更をすぐに適用する場合は、--permanent および --reload フラグを使用できます。
sudo firewall-cmd --permanent --add-port=4000/tcp
sudo firewall-cmd --reloadiptablesの場合
設定ルールを保存し、iptables-persistent コマンドを使用する必要があります。.
結果
このチュートリアルでは、Linuxで新しいポートを開き、着信接続用に設定する方法を学習しました。また、netstat、ss、telnet、nc、nmapも使用しました。.









