NFSを使用するには、ファイアウォールでどのポートを開く必要がありますか?


73

Ubuntu 11.10を実行しています-他の多くのサーバー間でディレクトリを共有するようにNFSをセットアップしています。ファイアウォールで開く必要があるポートはどれですか?


6
使用するプロトコルのバージョンによって異なります。NFS 4では2049のみが必要ですが、古いバージョンではさらに多くが必要です。
lzap

回答:


97
$ rpcinfo -p | grep nfs

NFSサーバーのポート111(TCPおよびUDP)および2049(TCPおよびUDP)。

NFSロックマネージャー用のポート(ポート4045 TCPおよびUDP)と同様に、クラスターおよびクライアントステータス用のポート(前者にはポート1110 TCP、後者には1110 UDP)もあります。ゲートウェイ間で必要なサービスに応じて、許可する必要があるポートを決定できるのはユーザーだけです。


4
rpcinfoについては知りませんでした。これは非常に便利です。でポート111が表示されませんでしたgrep nfsが、111がであることを知るためにgrepを中断しましたportmapper。知っておくといい!(そしてあなたが言ったように、必要な)
ケニー

@KennyYounger rpcinfoも便利です。これがあなたの質問に答えたなら、将来の視聴者の利益のために答えとしてそれをマークすることを忘れないでください。
ウェズリー

6
ファイルシステムを最初にマウントするときに、mountdを開いておく必要があります。動的ポートで実行されるため、常に同じになるとは限りません。私は答えにガイドへのリンクを入れました。
盆栽バイキング

1
ありがとう@bonsaiviking。このプロセスの重要な情報。私はあなたの答えを支持しました!
ケニー

それらのサービス(「クラスターとクライアントのステータス」、「NFSロックマネージャー」)が何をするのか、いつ必要になるのか、簡単に説明してください。これらのサービスがファイアウォールによってブロックされている場合、NFSサーバーとクライアントは正常に低下しますか、または応答を待つだけのロックですか?
ネイサンクレイク

27

ポートマッパーの111とnfsの2049に加えて、mountdポートと、場合によってはrquotad、lockd、およびstatdを許可する必要があります。これらはすべて動的にすることができます。この優れたNFSセキュリティガイドでは、スタートアップスクリプトとカーネルモジュールの構成を変更して、強制的に静的ポートを使用することをお勧めします。

ファイアウォールに関するセクションある上記のガイドに加えて、NFSの強化に関する別の質問に対する私の答えを参照しください。


7
コンテンツへのポインタではなく、コンテンツを本当に好みます。リンク付きのコンテンツの前置きも問題なく、リンクよりも優先されます。
user9517

2
2012年については定かではありませんが、リンクの推奨事項はひどく時代遅れのようです。さまざまな理由でTCP上のNFSが優先され、UDP上のNFSはプロトコルの制限により高速リンクでサイレントデータ破損を引き起こす可能性があります。セキュリティガイドは、Kerberos / GSSなどの言及がありません
マチェイPiechotka

mountdに関しては、mountdポートが固定されていることを確認するように再構成すると、人生がずっと楽になります。Debianシステムで、のようなものにRPCMOUNTDOPTS値を編集RPCMOUNTDOPTS="--port 34567"し、その後で再起動sysctl --systemし、/etc/init.d/nfs-kernel-server restart
user45793

14

私はこのページで自分の問題に役立つ方向を見つけましたが、レシピに従うのは簡単ではありませんでした。だからここに私のレシピです。

TL; DR-修正後、nfsポート(111、2049)とmountdポートの両方を許可する必要があります。

手順:


mountd用の固定ポートのセットアップ

gksudo gedit /etc/default/nfs-kernel-server
  • この行をコメントアウトします: RPCMOUNTDOPTS=--manage-gids
  • 代わりにこれを追加してください: RPCMOUNTDOPTS="--port 33333"

または他のポート番号。

次に、次を使用してnfsをリセットしてください。

sudo service nfs-kernel-server restart

そして、それが使用に役立つかどうかをテストします:

rpcinfo -p | grep "tcp.*mountd"

私にとっては十分ではありませんでしたが、完全に再起動することで問題は解決しました。

クレジット


ファイアウォールを設定する

(1)古いルールを削除する、これを手動で行う、またはファイアウォールの唯一の用途である場合はリセットする:

sudo ufw reset
sudo ufw enable

(2)nfsおよびmountdポートを追加する

sudo ufw allow in from 10.0.0.1/20 to any port 111 
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333

(ローカルIPまたはのany代わりに「」に変更します10.0.0.1/20

これですべてです。


3
ボックス全体を再起動する必要はありません。sudo service nfs-config restart再起動する前の簡単な方法でnfs-kernel-server問題ありません。
showp1984

@ showp1984のおかげで、私は次の時間を試してみましょう
アミールUval

または、システムが使用する場合はsystemctlsystemctl restart nfs-kernel-server.serviceです。
fbicknel

また、すべてを1つのスウェルフープで行うこともできます。sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333その後に(OK、2つのスウェルフープ)が続きsudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333ます。ポート33333は上記の例にあることに注意してください。答えが示すように、別のポートを使用できます。
fbicknel

5

これにより、すべてのNFS関連プログラムで使用されるすべてのポートのリストが表示されます。

rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq

3

FERMでは、Backticksを使用してrpcinfoからポートを取得できます。次に例を示します。

サーバ:

proto tcp {saddr ($CLIENT) {
  dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
  dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}

クライアント:

proto udp {saddr ($SERVER) {ACCEPT;}}  # NFS

(TCPのみを使用する場合は、proto tcp一部のみが必要です)。


1

記録のために、NFS共有がWindows 2008 R2サーバーによってエクスポートされ、クライアントがUbuntu 12.04.4である構成の場合、ポート111、2049 、および 1048のアクセス許可を追加する必要がありました。

これが誰かの助けになることを願っています。


2
ポート1048が必要な理由とその決定方法を説明すると役立つ場合があります。
HBruijn

3
率直に言って、1048の許可を追加する必要がある理由はわかりませんが、それを追加することで問題が解決しました。将来、誰か他の人の時間を節約できるかどうかを共有したかっただけです。質問に答えられないことを残念に思います。
エルデムカヤ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.