実際に 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.statd
NFSクライアントとサーバーの両方に存在する必要があります。
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.statd
NFSv3またはNFSv2の設定を許可することが重要です。ディストリビューションでデーモンを起動する方法を理解し、これを実行するより具体的な方法がない場合は、デーモンの起動に使用されるコマンドライン-p 4046
に追加して固定ポート番号を使用するようにしてください。rpc.statd
rpc.mountd
NFSv3 または NFSv2 のもう一つの重要なサービスです。-p 4047
ディストリビューションにNFSサービスを設定するより具体的な方法がない場合は、デーモンを起動するコマンドラインに追加して、固定ポートを使用するようにデーモンを設定することもできます。マウントオプションをすでに指定しているため、mountproto=tcp
UDPケースを上書きする必要はありません。
RedHat は、すべての NFS ポート設定を/etc/sysconfig/network
RHEL および関連ディストリビューションに集中化します。次の行を次に追加するだけで、これらすべての設定を取得できます/etc/sysconfig/network
。
LOCKD_TCPPORT=4045
LOCKD_UDPPORT=4045
STATD_PORT=4046
MOUNTD_PORT=4047
Debianおよび関連製品では、rpc.statd
変数を設定してファイルにポートを割り当てることができます。/etc/default/nfs-common
STATDOPTS
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