パスワードを忘れた? アカウント作成
451101 journal

pasasの日記: ネットワークプログラミングとアクセス制限

日記 by pasas

他人のサーバ用のプログラムを見て思ったことだけど、bind をうまく使っていないようだ。
というわけで参考程度のメモ。
何かあったらツコッミよろしく。

サーバ用のプログラムで bind 関数は、サーバ用のソケットディスクリプタを、
ローカルのどのアドレスに割り当てるかを指定することができる関数だ。
そして特に指定しなかった場合(INADDR_ANY を指定した場合)、ローカルに存在しているすべてのアドレスで接続可能にすることを意味する。

そんなことから、サーバ用のプログラムをローカルでのプロセス間通信にのみ利用し、外部からの接続を行わない場合には、
localhost(127.0.0.1)にのみバインドするべきだと思う。
サーバとして動作させるとき、そのサーバプロセスは高い権限を持っている場合が多い。
そのため、万が一にでも外部からの接続があってはならない。
パケットフィルタ(ipchain など)で設定することも可能だけど、OS レベルでの設定(パケットフィルタ)でアクセス制限をするのは、
管理が分散してしまうことがあるため、あまりお勧めできないと考えている。

個人的には tcpserver を使うことが多いけど、tcpserver も引数でバインドするアドレスを指定することができる。
tcpserver では、引数に 0(INADDR_ANY)を指定するのではなく、localhost(127.0.0.1)を指定すればよい。

当然だけど、ローカルからのアクセス制限を行うため、アプリケーションレベルでパスワードなどは必要だ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...