24.11. ファイアウォールの背後で動作するように NFS サーバーを設定する手順
NFS には rpcbind
サービスが必要です。このサービスは RPC サービスのポートを動的に割り当て、ファイアウォールルールの設定で問題が発生する可能性があります。以下のセクションでは、サポートが必要な場合に、ファイアウォールの内側で機能するように NFS バージョンを設定する方法を説明します。
NFSv3
これには、NFSv3 をサポートするサーバーがすべて含まれます。
- NFSv3 専用サーバー
- NFSv3 と NFSv4 の両方に対応するサーバー
- NFSv4 専用
24.11.1. ファイアウォールの内側で動作するように NFSv3 対応サーバーを設定する手順
次の手順では、NFSv3 に対応するサーバーを設定し、ファイアウォールの内側で実行する方法を説明します。これには、NFSv3 専用サーバー、および NFSv3 と NFSv4 の両方をサポートするサーバーが含まれます。
手順
クライアントがファイアウォールの背後にある NFS 共有にアクセスできるようにするには、NFS サーバーで次のコマンドを実行してファイアウォールを設定します。
firewall-cmd --permanent --add-service mountd firewall-cmd --permanent --add-service rpc-bind firewall-cmd --permanent --add-service nfs
/etc/nfs.conf
ファイルで、RPC サービスnlockmgr
が使用するポートを次のように指定します。[lockd] port=tcp-port-number udp-port=udp-port-number
または、
/etc/modprobe.d/lockd.conf
ファイルで、nlm_tcpport
およびnlm_udpport
を指定することもできます。NFS サーバーで以下のコマンドを実行して、ファイアウォールで指定したポートを開きます。
firewall-cmd --permanent --add-port=<lockd-tcp-port>/tcp firewall-cmd --permanent --add-port=<lockd-udp-port>/udp
以下のように、
/etc/nfs.conf
ファイルの[statd]
セクションを編集して、rpc.statd
の静的ポートを追加します。[statd] port=port-number
NFS サーバーで以下のコマンドを実行して、ファイアウォールに追加したポートを開きます。
firewall-cmd --permanent --add-port=<statd-tcp-port>/tcp firewall-cmd --permanent --add-port=<statd-udp-port>/udp
ファイアウォール設定を再読み込みします。
firewall-cmd --reload
rpc-statd
サービスを最初に再起動してから、nfs-server
サービスを再起動します。# systemctl restart rpc-statd.service # systemctl restart nfs-server.service
または、
/etc/modprobe.d/lockd.conf
ファイルのlockd
ポートを指定した場合は、次のコマンドを実行します。/proc/sys/fs/nfs/nlm_tcpport
と/proc/sys/fs/nfs/nlm_udpport
の現在の値を更新します。# sysctl -w fs.nfs.nlm_tcpport=<tcp-port> # sysctl -w fs.nfs.nlm_udpport=<udp-port>
rpc-statd
サービスおよびnfs-server
サービスを再起動します。# systemctl restart rpc-statd.service # systemctl restart nfs-server.service
24.11.2. ファイアウォールの内側で実行されるように NFSv4 専用サーバーを設定する手順
次の手順では、NFSv4 専用サーバーをファイアウォールの内側で実行するように設定する方法を説明します。
手順
クライアントがファイアウォールの背後にある NFS 共有にアクセスできるようにするには、NFS サーバーで次のコマンドを実行してファイアウォールを設定します。
firewall-cmd --permanent --add-service nfs
ファイアウォール設定を再読み込みします。
firewall-cmd --reload
NFS サーバーを再起動します。
# systemctl restart nfs-server
24.11.3. ファイアウォールの内側で動作するように NFSv3 クライアントを設定する手順
ファイアウォールの内側で実行するように NFSv3 クライアントを設定する手順は、ファイアウォールの内側で実行するように NFSv3 サーバーを設定する手順と似ています。
設定するマシンが NFS クライアントとサーバーの両方である場合には、NFSv3 対応サーバーがファイアウォールの内側で実行されるように設定する手順 で説明されている手順に従います。
以下の手順では、ファイアウォールの内側でのみ NFS クライアントマシンを設定する方法を説明します。
手順
クライアントがファイアウォールの内側で NFS クライアントにコールバックを実行できるようにするには、NFS クライアントで以下のコマンドを実行して
rpc-bind
サービスをファイアウォールに追加します。firewall-cmd --permanent --add-service rpc-bind
/etc/nfs.conf
ファイルで、RPC サービスnlockmgr
が使用するポートを次のように指定します。[lockd] port=port-number udp-port=upd-port-number
または、
/etc/modprobe.d/lockd.conf
ファイルで、nlm_tcpport
およびnlm_udpport
を指定することもできます。NFS クライアントで以下のコマンドを実行して、ファイアウォールで指定したポートを開きます。
firewall-cmd --permanent --add-port=<lockd-tcp-port>/tcp firewall-cmd --permanent --add-port=<lockd-udp-port>/udp
以下のように、
/etc/nfs.conf
ファイルの[statd]
セクションを編集して、rpc.statd
の静的ポートを追加します。[statd] port=port-number
NFS クライアントで以下のコマンドを実行して、ファイアウォールに追加したポートを開きます。
firewall-cmd --permanent --add-port=<statd-tcp-port>/tcp firewall-cmd --permanent --add-port=<statd-udp-port>/udp
ファイアウォール設定を再読み込みします。
firewall-cmd --reload
rpc-statd
サービスを再起動します。# systemctl restart rpc-statd.service
または、
/etc/modprobe.d/lockd.conf
ファイルのlockd
ポートを指定した場合は、次のコマンドを実行します。/proc/sys/fs/nfs/nlm_tcpport
と/proc/sys/fs/nfs/nlm_udpport
の現在の値を更新します。# sysctl -w fs.nfs.nlm_tcpport=<tcp-port> # sysctl -w fs.nfs.nlm_udpport=<udp-port>
rpc-statd
サービスを再起動します。# systemctl restart rpc-statd.service
24.11.4. ファイアウォールの内側で動作するように NFSv4 クライアントを設定する手順
この手順は、クライアントが NFSv4.0 を使用している場合に限り行います。その場合は、NFSv4.0 コールバックのポートを開く必要があります。
この手順は、NFSv4.1 以降では必要ありません。これは、新しいプロトコルバージョンでは、クライアントによって開始された同じ接続でサーバーがコールバックを実行するためです。
手順
NFSv4.0 コールバックがファイアウォールを通過できるようにするには、以下のように
/proc/sys/fs/nfs/nfs_callback_tcpport
を設定して、サーバーがクライアントのそのポートに接続できるようにします。# echo "fs.nfs.nfs_callback_tcpport = <callback-port>" >/etc/sysctl.d/90-nfs-callback-port.conf # sysctl -p /etc/sysctl.d/90-nfs-callback-port.conf
NFS クライアントで以下のコマンドを実行して、ファイアウォールの指定のポートを開きます。
firewall-cmd --permanent --add-port=<callback-port>/tcp
ファイアウォール設定を再読み込みします。
firewall-cmd --reload