目次
この記事では、ポートの状態を確認し、Linuxでポートを開くための例を共有します。 この記事はCentOS8を使用している間に書かれたものなので、CentOS/RHEL7/8、Fedora、Oracle Enterprise Linux、そして一般的にred Hatファミリーのオペレーティングシステム全体、そしておそらくNovellのSLESとOpenSUSEについても完全に網羅していると言っても過言ではありません。
Linuxでポートを開くための例に飛び込む前に、要件を明確に理解する必要があります。 私の心に来る非常に基本的な質問
- あなたはサービスのためのポートを開く必要がありますか? Apacheサービス用のカスタムポート5555など?
- ポートはすでにリッスンしていますが、ファイアウォールによってブロックされているので、ファイアウォールでポートを開きたいと思いますか?
- このポートを使用してファイルの転送や受信などのカスタム一時タスクのポートを開き、ポートを閉じます。
この記事では、これらすべてのシナリオについて説明します
ポートステータスの確認
開いている既存のポートのリストを確認するには、nmap
を使用してポートステータスを確認します:
# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-22 12:08 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds
現在、私のCentOS8ノードで開いているポートは二つしかありません。
listeningポートのチェックリスト
listening状態にあるTCPポートをリストするためにnetstatを使用します。 ポートの総数は、nmap出力と比較して高くなります。
# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26893/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 26893/sshd tcp6 0 0 :::111 :::* LISTEN 1/systemd
いくつかのサービスのためのポートを開きます
これがあなたの要件であれば、あなたは間違った質問を探しています。 基本的には、サービスがポートを開くという他の方法です。 たとえば、SSHDサービスを開始すると、デフォルトではポート22が開始され、ポート22を開くと自動的にSSHDサービスが開始されません。
私たちは例でこれを観察してみましょう、私たちはポート22が私のCentOS8ノードで開いていることを知っています。 Sshdサービス
# systemctl stop sshd
を停止すると、ポート22が開いていないことがわかります。
# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::111 :::* LISTEN 1/systemd
デフォルトのポートを変更するには、それぞれのサービスの設定ファイルを使用する必要があります。 完了すると、サービスを再起動することができ、Linuxノードのそれぞれのポートが自動的に開きます。
/etc/services
これは最初のシナリオをカバーしています。
firewalld open port
ファイアウォールでポートが無効になっている可能性もあります。 ポートがnmap
にリストされていない場合は、ファイアウォールによってブロックされている可能性が最も高いです。
これはRHEL/CentOS7および8で今日最も使用されているインターフェイスであるため、firewalldを使用してポートを開きます。 システムのネットワークインターフェイスがどのゾーンにあるかを決定します。 次の例では、eth0とeth1インターフェイスは’public’ゾーンにあります:
# firewall-cmd --get-active-zones
libvirt
interfaces: virbr0
public
interfaces: eth0 eth1
ゾーン内のポートを永続的にfirewalldオープンするには、--add-port
オプションを使用します。 次の例では、’public’ゾーンでTCPポート1234を永続的に開きます。 永続的な変更は、firewalldサービスが再ロードされるまで有効にならないことに注意してください。
# firewall-cmd --zone=public --add-port=1234/tcp --permanentsuccess# firewall-cmd --reloadsuccess
--permanent
オプションを設定せずに同じコマンドを発行します。 永続的でない変更は即座に有効になり、ファイアウォールが再ロードされるまで保持されます。firewalldがポートを開いたら、次にnetstatを使用してポートの状態を確認します:
# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasqtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 28188/sshdtcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemdtcp6 0 0 :::22 :::* LISTEN 28188/sshdtcp6 0 0 :::111 :::* LISTEN 1/systemd
ここにはまだポート1234が表示されません。 これは、現在、ポート1234がどのサービスにもバインドされていないためです。 だから私たちの港は開いていますが、聞いていません。 リクエストまたはサービスがポート1234を使用しようとするとすぐに、これをLISTEN状態にします。
ncまたはncatを使用してLinuxでポートを開く
この理論を検証しましょうnc
またはncat
を使用してLinuxでポートを開くnc
またはncat
は、yumまたはdnfを使用してイ nc
コマンドを使用してポートを開くには、--listen
と--port
を使用します。 以下の例では、ポートを開きます1234
# nc --listen --source-port 1234
このサーバーの別の端末を開き、ポート1234がIpv4とIpv6の両方をリッスンしていることがわかりますので、ポートステータス
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 28983/nctcp6 0 0 :::1234 :::* LISTEN 28983/nc
を確認してください。 Ipv4のみを使用するには、上記のコマンドで-4を使用します
# nc --listen --source-port 1234 -4
次に別の端末で、ポートのポートステータスを確認できます1234
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 29329/nc
ncまたはncatを使用してポートを開き、ファイルを転送する
nc
を使用して、あるホストから別のホストにファイルを転送することもできます。 ここで私は私の”inputfile
“をcentos-8
からrhel-8
に転送しますクライアントではランダムなポートを開き、ここでは9899を使用します。 Verboseを有効にしているので、画面で詳細を見ることができます
# ncat --verbose --listen 9899 > outputfileNcat: Version 7.70 ( https://nmap.org/ncat )Ncat: Listening on :::9899Ncat: Listening on 0.0.0.0:9899Ncat: Connection from 192.168.43.250.Ncat: Connection from 192.168.43.250:40242.
転送を開始するには、次のコマンドを使用します
# ncat --verbose 192.168.43.157 9899 < inputfileNcat: Version 7.70 ( https://nmap.org/ncat )Ncat: Connected to 192.168.43.157:9899.Ncat: 19 bytes sent, 0 bytes received in 0.01 seconds.
問題が発生した場合は、サーバーとクライ それぞれのポートがブロックされている可能性があり、firewalld open port
を使用する必要があります