NFS未使用ならsystemctl stop rpcbindで停止OK!
ポート111が開いてる?何に使われているの?
netstatで見知らぬポート111が開いているのに気づきました。
結論から言うとポート111はNFSを使っていなければ閉じてよいです。
不要なポートは閉じる!のがセキュリティの基本です
ちなみに、開いているポートはnmapで調べられます。
# nmap 127.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2020 10 10 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00018s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
111/tcp open rpcbind
nmapの情報からポート111はrpcbindというサービスが使用していることが分かります。
# systemctl status rpcbind
● rpcbind.service - RPC bind portmap service
Loaded: loaded (/lib/systemd/system/rpcbind.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2021-12-18 19:37:24 JST; 31min ago
Docs: man:rpcbind(8)
Main PID: 18489 (rpcbind)
Tasks: 1 (limit: 2062)
CGroup: /system.slice/rpcbind.service
└─18489 /sbin/rpcbind -f -w
# netstat -ltnp | grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/init
tcp6 0 0 :::111 :::* LISTEN 1/init
# ss -ltnp | grep 111
LISTEN 0 128 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=18489,fd=4),("systemd",pid=1,fd=107))
LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=18489,fd=6),("systemd",pid=1,fd=109))
rpcbind はnfsを利用するのに必要なサービスです。逆に言えばnfsを使っていなければrpcbindは不要です。
rpc(remote procedure call) bind とは?
rpcbindはかつてはportmapというサービスが代用されていました。
rpcbind(portmap)は動的に変化するnfsのポート番号をrpcbindに問い合わせれば教えてくれるというサービスです。
ポートは基本的に固定されているものと、変化する動的ポートがあります。
- 固定ポート:80(web), 443(web),25(mail)
- 動的ポート:???(nfs)
nfsはポート番号が決まっていません。
ポート番号が決まっていないとnfsクライアントは受付先が分からないので困ってしまいます。
- webクライアント→80(http)に何も考えずに接続
- NFSクライアント→NFSポート番号は??
とはいえ、NFSのポート番号はでたらめに決めているわけではなく、rpcbindが割り振っています。rpcbindは111なのでNFSクライアントは111(rpcbind)に問い合わせます。rpcbindはnfsポート番号を知っているので教えてくれます。
- rpcbind(111)→2049(nfs)
- NFSクライアント→111(rpcbind)ー2049(nfs)
- 2049のポート番号をNFSクライアントに返す
rpcbindはnfsサーバが使用するポートを知っているのでリダイレクトしてnfsクライアントがnfsサーバに通信できるようになるということです。
nfsクライアント -> rpcbind( port 111) — nfs server use port 1908 <–> nfs サーバ
rpcbindを無効化してポート111を閉じよう!
動きが分かったところで、利用していなければrpcbindを無効化しましょう。
無効化するにはsystemctl stop rpcbind rpcbind.socketを実行します。
# systemctl stop rpcbind rpcbind.socket
# systemctl status rpcbind | grep -i active
● rpcbind.service - RPC bind portmap service
Loaded: loaded (/lib/systemd/system/rpcbind.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:rpcbind(8)
# netstat -ltnp
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 519/sshd
tcp6 0 0 :::22 :::* LISTEN 519/sshd
//自動起動を無効化するため disableする
# systemctl disable rpcbind
これでポート111は閉じられました。
sshしかしないので↑のサーバはsshdの22ポートしかlistenしていません。