Linux Tips – NFSサーバのポートを固定する設定方法
NFSクライアントとNFSサーバの間にファイアウォールを設置する構成では、ファイアウォールで通信許可の設定を行う都合上、NFSサーバの使用する全てのポートを固定する必要があります。ここでは、そのようなケースに対して有効な設定方法を紹介します。
例えば、インターネットから利用される一般的なシステムでは、「DMZ」を構成するために、Webサーバ等の公開サーバ(=NFSクライアント)を配置するネットワークセグメントと、NFSサーバを配置するネットワークセグメントの間に、ファイアウォール もしくは それを代替する機能を持つネットワーク機器を配置します。このようなシステム構成で有効な設定方法です。
NFS Client in DMZ | Firewall | NFS Server |
RHEL6系の設定方法
設定手順
- /etc/sysconfig/nfs ファイルの設定
/etc/sysconfig/nfs をvi等で開いて、以下の設定例に従ってポート番号を指定する。
# vi /etc/sysconfig/nfs
RHEL6系のNFSサーバにはポート固定用の設定が用意されているが、デフォルト設定ではコメントアウトされているので、ポート番号を固定する項目のコメントを外して有効にする。
# Port rquotad should listen on. RQUOTAD_PORT=875 # TCP port rpc.lockd should listen on. LOCKD_TCPPORT=32803 # UDP port rpc.lockd should listen on. LOCKD_UDPPORT=32769 # Port rpc.mountd should listen on. MOUNTD_PORT=892 # Port rpc.statd should listen on. STATD_PORT=662 # Outgoing port statd should used. The default is port # is random STATD_OUTGOING_PORT=2020 # To enable RDMA support on the server by setting this to # the port the server should listen on RDMA_PORT=20049
nfslockサービス・nfsサービスを再起動して、設定を反映する。
# service nfslock restart # service nfs restart
rpcinfoコマンドを用いてNFSサーバが使用しているポート番号を確認する。
# rpcinfo -p
# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 662 status 100024 1 tcp 662 status 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 32769 nlockmgr 100021 3 udp 32769 nlockmgr 100021 4 udp 32769 nlockmgr 100021 1 tcp 32803 nlockmgr 100021 3 tcp 32803 nlockmgr 100021 4 tcp 32803 nlockmgr 100005 1 udp 892 mountd 100005 1 tcp 892 mountd 100005 2 udp 892 mountd 100005 2 tcp 892 mountd 100005 3 udp 892 mountd 100005 3 tcp 892 mountd
上記のポート番号の情報を元にファイアウォールやiptablesで通信許可の設定を行う。(*2)
RHEL4・RHEL5系の設定方法
設定手順
- /etc/sysconfig/nfs ファイルの作成
/etc/sysconfig/nfs を作成して、以下の設定例に従ってポート番号を指定する。
# vi /etc/sysconfig/nfs
### NFS port numbers ### # rpc.statd STATD_PORT=10002 STATD_OUTGOING_PORT=10003 # rpc.mountd MOUNTD_PORT=10004 # rpc.rquotad RQUOTAD_PORT=10005 # nlockmgr LOCKD_UDPPORT=10001 LOCKD_TCPPORT=10001
nfslockサービス・nfsサービスを再起動して、設定を反映する。
# service nfslock restart # service nfs restart
rpcinfoコマンドを用いてNFSサーバが使用しているポート番号を確認する。
# rpcinfo -p
# rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100021 1 udp 10001 nlockmgr 100021 3 udp 10001 nlockmgr 100021 4 udp 10001 nlockmgr 100021 1 tcp 10001 nlockmgr 100021 3 tcp 10001 nlockmgr 100021 4 tcp 10001 nlockmgr 100024 1 udp 10002 status 100024 1 tcp 10002 status 100011 1 udp 10005 rquotad 100011 2 udp 10005 rquotad 100011 1 tcp 10005 rquotad 100011 2 tcp 10005 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100005 1 udp 10004 mountd 100005 1 tcp 10004 mountd 100005 2 udp 10004 mountd 100005 2 tcp 10004 mountd 100005 3 udp 10004 mountd 100005 3 tcp 10004 mountd
上記のポート番号の情報を元にファイアウォールやiptablesで通信許可の設定を行う。(*2)
参考情報
(*1)割り当て可能なポート番号
割り当てるポート番号は、未使用のHigh Portから任意のものを指定することが可能。ただし、指定されたポートが既に使用されていた場合には、nfslock、nfsの起動時にエラーとなるので注意する。
<例> nlockmgr(lockd) がポート重複で起動に失敗した際のシスログ
lockd_up: makesock failed, error=-98 lockd_up: no pid, 2 users?? lockd_up: no pid, 3 users?? ...
(*2)ファイアウォール製品の設定
ファイアウォール製品(Juniper Networks NetScreen等)によっては、デフォルトで「tcp/udp 111番」、「tcp/udp 2049番」ポートが「NFS」のサービスとして定義されている。その場合、ACLを設定する際には、これ以外のポートを「NFS-BoundToParticularPorts」等の名称でグループ化して、ACLには「NFS」と「NFS-BoundToParticularPorts」への通信を許可する設定を追加すれば良い。
実際に使用されるポート
実際には、普通にNFSマウントをしてNFS上のファイルを使用してるRHEL4の環境では、tcp 111番(portmapper)、tcp 2049番(nfs)、udp 10004番(mountd)の通信しか発生しない。さらには、tcp 111番(portmapper)、udp 10004番(mountd)もほとんど使われず、NFSサーバやNFSクライアントの再起動を行うタイミング等で少量の通信が発生する程度である。
本設定やネットワークの検証を必死になって行っても、結果的にあまり報われない可能性もあるので、力の掛け具合には注意した方が良い。
パフォーマンス影響の確認
性能を求められるシステムで設定変更を行う場合には、本設定の適用後にNFS領域のパフォーマンスが低下していないことを確認する。設定変更の前後に、NFSクライアントとなるサーバからNFS領域に対して ディスクベンチマーク を実行すれば良い。
関連記事
Iperfの使用方法 (Linuxネットワーク帯域確認方法)
HDDベンチマーク手順+性能測定結果一覧 (hdparm,dd,bonnie++)
「Linux」カテゴリーの記事一覧
参考になるサイト
Red Hat Customer Portal – How can I configure a system as an NFSv3 server which sits behind a firewall with NFS clients outside of the firewall?
RedHat社のカスタマーポータルで公開されている設定方法。(要サブスクリプション)