rpcbindについて
一言でいえば、
RPC用の番号をポート番号に対応づける機能です。
以下では、rpcbindに関する入門記事をできるだけ平易に記載しました。
そもそもRPCとは?
Remote Procedure Calls、略してRPCです。
この技術は、あるプログラムが他のサーバ上のプロシージャを呼び出すメカニズムです。
流れとしては以下です。
- マシンAのプロセスが別のマシンであるマシンB上のプロシージャーを呼び出す
- マシンAのプロセスは一旦中断
- マシンBでプロシージャーが実行
- マシンBがマシンAに結果を渡す
- マシンAのプロセス再開
多くのUNIXシステムで利用されており、特にSun RPCというものがスタンダードです。
RPCBINDとは?
過去、portmapデーモンと呼ばれてたようで、プログラムに接続先の情報を返してあげるデーモンです。
冒頭に記載した番号というのは、RPCプログラム番号と言い、これをRPC要求が送られるべきアドレスまたはポート番号としてクライアント側に返します。
実際に、自サーバでRPCに関するマッピング情報が見たければrpcinfoコマンドを実行します。
$ rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs ...
一番左の数字がRPCプログラム番号です。ポートというのがプログラムに教えてあげる接続先情報です。
脆弱性
サーバではセキュリティの観点で、不要なポートを閉じておくことが推奨されています。
実際、rpcbindのポート111をターゲットにした脆弱性が過去発見されています。
悪意のある攻撃者が、リモートにあるrpcbindを起動しているマシンに対して任意の量のバイトを送付するというもので、
パッチを適用するかLISTENしている111のポートを閉じて対応する必要があります。
過去はNFSといったサービスではrpcbindの起動が前提だったようですが、それも新しいバージョンでは不要になりつつありますのでrpcbindの起動が必須、という環境も少なくなっているように感じられます。
まとめ
rpcbindとは、RPC用のマッピングサービスです。
インターネットに接続している環境であれば、起動しているのかいないのか、それが必要なのかそうでないのかは確認しておくのが良さそうです。
以上、rpcbindの入門記事でした。