リモートNFSサーバーへのアクセス/マウントのためのiptablesルール

リモートNFSサーバーへのアクセス/マウントのためのiptablesルール

実際に iptables ルールがクリアされない場合、リモート NFS 共有をマウントしようとするとタイムアウトのため失敗します。 iptablesルールをリセットした後、NFSリモートサーバーを正しくマウントできます。

リモートNFSサーバーへのアクセスを許可するiptablesルールは何ですか?

私はrw,_netdev,mountproto=tcpインストールオプションとして使用しています。

答え1

NFSv4を使用している場合に許可する必要がある唯一のポートは、2049 / TCP(または両端でサポートされ、それを使用することを選択した場合はSCTP)です。

したがって、クライアントのiptablesルールは次のようになります。

-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --sport 2049 -j ACCEPT
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 2049 -j ACCEPT

NFSv3以下を使用する場合は、追加のポート数を許可する必要があります。

  • ポート111(portmapperまたはrpcbind)、TCPおよび/またはUDP。
  • NFSファイルロックサービス用のポート(lockdまたは)nlockmgrは通常4045ですが異なる場合があります
  • NFSステータス/回復サービスに使用されるポート(rpc.statd
  • NFSマウントデーモン用ポート(rpc.mountd

最後の3つの問題は、過去には、これらのポート番号が通常動的に割り当てられており、ポート111のportmapper/サービスをrpcbind使用してそのポートを見つけたことです。これによりファイアウォールの設定が難しくなり、最新のLinuxシステムではこれらのサービスに対して固定ポート番号を設定できます。これらの多くはNFSサーバー側で構成する必要があります。ただし、rpc.statdNFSクライアントとサーバーの両方に存在する必要があります。

Linuxでは、ファイルロックサービスは通常lockdカーネルモジュールによって処理されるため、対応するポート設定はカーネルモジュールオプションの形をとります。ディストリビューションにより具体的な構成方法がまだ含まれていない場合は、いつでもファイルを作成して/etc/modprobe.d/nfs-options.conf次の行を入力できます。

options lockd nlm_udpport=4045 nlm_tcpport=4045

(少なくともHP-UX 11.31およびSolarisでは、NFSロックにデフォルトでポート4045を使用するため、これがポート番号4045に正規化する必要があるもう1つの理由です。)

NFSインストールがサーバーまたはクライアントの再起動を正常に処理できるようにするには、rpc.statdNFSv3またはNFSv2の設定を許可することが重要です。ディストリビューションでデーモンを起動する方法を理解し、これを実行するより具体的な方法がない場合は、デーモンの起動に使用されるコマンドライン-p 4046に追加して固定ポート番号を使用するようにしてください。rpc.statd

rpc.mountdNFSv3 または NFSv2 のもう一つの重要なサービスです。-p 4047ディストリビューションにNFSサービスを設定するより具体的な方法がない場合は、デーモンを起動するコマンドラインに追加して、固定ポートを使用するようにデーモンを設定することもできます。マウントオプションをすでに指定しているため、mountproto=tcpUDPケースを上書きする必要はありません。

RedHat は、すべての NFS ポート設定を/etc/sysconfig/networkRHEL および関連ディストリビューションに集中化します。次の行を次に追加するだけで、これらすべての設定を取得できます/etc/sysconfig/network

LOCKD_TCPPORT=4045
LOCKD_UDPPORT=4045
STATD_PORT=4046
MOUNTD_PORT=4047

Debianおよび関連製品では、rpc.statd変数を設定してファイルにポートを割り当てることができます。/etc/default/nfs-commonSTATDOPTS

STATDOPTS="-p 4046"

rpc.mountd同様に、RPCMOUNTDOPTS次の変数を設定してポート番号を設定できます/etc/default/nfs-kernel-server

RPCMOUNTDOPTS="-p 4047"

これらの構成後に必要な NFS クライアント iptables ルールは次のとおりです。

-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 111 -j ACCEPT # incoming portmapper requests
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --sport 2049 -j ACCEPT # incoming NFS protocol
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 4046 -j ACCEPT # for reboot detection and file lock recovery
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 111 -j ACCEPT # outgoing portmapper requests
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 2049 -j ACCEPT # main NFS port
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 4045:4047 -j ACCEPT # lockd, statd, mountd

ご覧のとおり、NFSv4 は NFSv3 以前のバージョンよりもファイアウォールを通過しやすくなります。

実際、NFSv2 の固有のファイルサイズ制限は 2 GB なので、現代の用途で使用するには小さすぎるため、使用しないことをお勧めします。

答え2

解決策は、ファイルに2行を追加することです/etc/iptables.rules

そのセクションの直下ICMP

#### NAS [IN,OUT]
-A INPUT  -i eth0 -s NAS_SERVER_IP_ADDR/32 -j ACCEPT
-A OUTPUT -o eth0 -d NAS_SERVER_IP_ADDR/32 -j ACCEPT

関連情報