How to build Internet Server with Linux

last update: 29 Sep 2004

home |index |previous |next |contents

アクセス制御の基本


4.1 不要なサービスを停止する

    4.1.1 デーモン

    Linuxのインストール直後には、いくつものデーモンサービスが起動しています。以下にRedHatのサーバタイプインストールを行った場合について、セキュリティの観点から、外部向けサーバに不要と思われるデーモンを示します。
    apmd 電源管理デーモンです。電源のON/OFFをsyslogに記録できます。運用上必要性がなければ停止して構いません。
    atd atコマンドと連係して指定された時刻にバッチ処理を行うためのデーモンです。atコマンドを使用しない限り外部向けサーバには不要です。
    cannaserver かな漢字変換サーバです。サーバで日本語の編集を行う予定が無ければ停止すべきです。
    gpm コンソール上でカット&ペーストを行うためのデーモンです。外部向けサーバには不要です。
    httpd 実体はHTTPサーバ:apacheです。WEBサーバとして運用する以外は停止すべきです。
    inetd; xinetd スーパーデーモンです。スーパーデーモンで提供するサービスが無ければ、停止しても構いません。
    lpd プリンタを使用するときに必要なデーモンです。外部向けサーバには不要です。
    named DNSサーバです。DNSサーバとして運用する以外は不要です。
    portmap NIS、NFSが利用するデーモンです。外部向けサーバには不要です。
    rpc.statd NSM(Network Status Monitor)サーバです。NFS(Network File System)の運用に関連したサーバですので外部向けサーバには不要です。
    sendmail メール配送用デーモンです。頻繁にセキュリティホールがみつかるデーモンです。メールサーバとして運用する以外は停止すべきです。
    sshd SSHデーモンです。SHHを使用しない場合は停止します。
    xfs フォントサーバです。外部向けサーバには不要です。

    不要なデーモンサービスを選択したら、 コンソールから"ntsysv"コマンドを起動します。
    # ntsysv
    

    ntsysvコマンドの起動



    ntsysvの画面イメージ

    画面上、左側にアスタリスク"*"が表示されているデーモンサービスが、 サーバ起動と同時に起動されるものです。 停止するデーモンサービスにカーソルを移動してスペースキーを押すと、 アスタリスク"*"が消え、サーバの次回起動からそのサービスは起動しません。
    停止するサービス全てについてアスタリスク"*"を消した後、 完了ボタンを押し、サーバを再起動します。

    4.1.2 inetd

    inetdスーパーデーモンによる不要なサービスを停止するには、 /etc/inetd.confファイルから不要なサービスをコメントアウトし、 inetdデーモンを再起動します。この方法はRedHat6.2以前のバージョンで有効な手法です。

    UNIX系OSは、デーモンプログラムによるサービス提供以外に、 inetdスーパーデーモンによるサービス提供という方法があります。 inetdスーパーデーモンが代表してサービスの窓口となり、 各種サービスプログラムを起動するので、 サービス毎にデーモンプログラムを常駐させる必要がなく、 負荷の低減、メモリ使用量削減などの効果があります。

    inetdスーパーデーモンにより提供されるサービスには次のようなものがありますが、 そのほとんどはサーバ運用に不要であるか、セキュリティ上問題があるものです。
    ftp FTPサービスを提供しない場合は停止してください。ftpサーバとして運用する場合には、次節の"FTPの設定と運用"を参考にセキュリティ対策を施してください。
    telnet TELNETサービスを外部から使用することは大変危険ですので、SSHを使用すべきです。telnetを使用しなければならない場合であってもローカルネットワークからのアクセスのみに限定すべきです。
    finger ユーザ情報を表示してしまうためセキュリティ上問題の多いサービスです。停止しておきましょう。
    time;daytime 日付や時刻を表示するサービスです。
    talk;ntalk 他のユーザとチャットするためのサービスです。不要ですので停止しておきましょう。

    rサービスとはリモートマシンでコマンドを実行するための一連のコマンド群です。
    rlogin リモートマシンにログインする。
    rsh リモートマシン上でコマンドを実行する。
    rcp;rsync ファイルコピーを行う。rsyncは高速版。

    rサービス
    rサービスは設計が古いためセキュリティが考慮されていませんので、 外部公開するサーバでは使用してはいけません。 SSHを使用するようにしてください。

    /etc/inetd.confファイルから不要なサービスをコメントアウトした後、 次のコマンドでinetdスーパーデーモンを再起動します。

    	# killall -HUP inetd
    

    inetdスーパーデーモンの再起動


    4.1.3 xinetd

    xinetdは、inetdのセキュリティを強化すべく開発されたスーパーデーモンで、 セキュリティ設定のみならず、サービスの提供時間帯を設定できるなど、 細かなアクセス制御が可能です。
    従来はtcpwrappersで行っていたアクセス制御を、xinetdのみで行うことが出来ます。 RedHatディストリビューションでは、7.0以降はデフォルトでxinetdが使われます。

    xinetdは、/etc/xinetd.confファイルでアクセス制御を行います。 RedHatは基本的な設定のみ/etc/xinetd.confファイルを用い、 サービス毎の設定ファイルは/etc/xinetd.dディレクトリに置く方式を取っています。

    アクセス制御の書式は次の通りです。

    	service <サービス名>
    	{
    		<属性>	<オペレータ: =, +=, -=> <値,...>
    	}
    

    xinetd設定書式


    設定できる主な属性は次のとおりです。
    属性 説明
    user 実行ユーザの指定.
    group 実行グループの指定.
    only_from アクセスを許可するクライアントを設定.
    no_access アクセスを拒否するクライアントを設定.
    disable サービスを提供するか否かをyes/noで指定.yesの場合サービス停止.
    socket_type ソケットタイプの設定.次のタイプが指定できる:stream;dgram;raw;seqpacket
    server サーバプログラムの指定.
    server_args サーバプログラムの起動オプションを指定.
    instance サーバプログラムの最大同時起動数を設定.
    nice nice値の指定.
    log_on_success サーバプログラムの正常起動時および正常終了時のログ出力要素を指定.
    log_on_failure サーバプログラムの異常起動時および異常終了時のログ出力要素を指定.
    port サーバプログラムの接続ポート番号を指定.
    access_times アクセスできる時間帯を設定.
    xinetd設定の属性

    オペレータは次の3種類が使用でき、柔軟にアクセス制御を記述できます。
    オペレータ 説明
    = 属性の代入
    += 属性の追加
    -= 属性の削除
    xinetd設定のオペレータ

    具体的な例を使って、/etc/xinetd.confファイルと/etc/xinetd.dディレクトリ以下のファイルの記述方法を説明します。次のようなアクセス制御を行うとします。
    ・localhost(127.0.0.1)からのアクセスは全て許可 ・ftpサービスは、ホスト"254.188.149.1"とホスト"earth.solarsystem.net"からのアクセスのみ許可 ・telnetサービスは、ネットワーク"254.188.149.0"とドメイン"solarsystem.net"からのアクセスは許可 ・それ以外のアクセスは拒否
    1. /etc/xinetd.conf
      以下にRedHat7.2に付属する/etc/xinetd.confファイルに、新たなアクセス制御属性(9行目)を追加したものを示します。
      1	#
      2	defaults
      3	{
      4		instances	= 60
      5		log_type	= SYSLOG authpriv
      6		log_on_success	= HOST PID
      7		log_on_failure	= 25 30
      8
      9		only_from	= 127.0.0.1
      10
      11	}
      12
      13	includedir /etc/xinetd.d
      

      /etc/xinetd.conf


      9行目で、特に設定しない限り、localhost(IPアドレス:127.0.0.1)のみアクセス許可と指定します。
      13行目の"includedir"属性で、/etc/xinetd.dディレクトリ以下の、サービス毎の設定ファイルを読み込みます。

    2. /etc/xinetd.d/wu-ftpd
      これは、FTPサービスのアクセス制御を設定するファイルです。
      1	services ftp
      2	{
      3		socket_type	= stream
      4		wait		= no
      5		user		= root
      6		server		= /usr/sbin/in.ftpd
      7		server_args	= -l -a
      8		log_on_success	+= DURATION
      9		log_on_failure	+= USERID
      10		nice		= 10
      11		disable		= no
      12
      13		only_from	= 254.188.149.1
      14		only_from	= earth.solarsystem.net
      15
      16	}
      

      /etc/xinetd.d/wu-ftpd


      11行目で、disableをnoとして、FTPサービスが提供可能とします。 13行目、14行目で、ホスト"254.188.149.1"とホスト"earth.solarsystem.net"からのアクセスを許可します。
      なお、FTPサービスのアクセス制御は、/etc/ftphostsファイルでの設定も有効となりますので、/etc/ftphostsファイルの設定も同様に行ってください。
    3. /etc/xinetd.d/telnet
      これは、TELNETサービスのアクセス制御を設定するファイルです。
      1	services telnet
      2	{
      3		flags		= REUSE
      4		socket_type	= stream
      5		wait		= no
      6		user		= root
      7		server		= /usr/sbin/in.telnetd
      8		log_on_failure	+= USERID
      9		disable		= no
      10
      11		only_from	= 254.188.149.0
      12		only_from	= solarsystem.net
      13
      14	}
      

      /etc/xinetd.d/telnet


      9行目で、disableをnoとして、TELNETサービスが提供可能とします。 11行目、12行目で、ネットワーク"254.188.149.0"とドメイン"solarsystem.net"からのアクセスを許可します。

4.2 /etc以下のファイルについて
ディレクトリ/etc以下にはセキュリティ制御のための相当数のファイルがあります。
  1. /etc/login.access + /etc/login.defs
    なるべくならconsole以外からマシンにログインできないようにしておきましょう。
  2. /etc/securetty
    同じく、なるべくならconsole以外からマシンにログインできないようにしておきましょう。
  3. /etc/hosts.equiv
    このファイルに書かれたホスト(トラストホストという)からは、無条件にマシンにアクセスできてしまいます。 "localhost"以外削除したほうが良いでしょう。
    note: プリンタサーバとして運用する場合、/etc/hosts.lpdに他のホストを 書けば良い。
  4. /etc/inetd.conf
    1. "finger"など、なくても支障がでないサービス、 "tftp"など、セキュリティ面で問題のあるサービスは削除しておきましょう。

      rlogin、rsh、rcpやtelnetなど"危険"なコマンドについては、各サイトのセキュリティポリシに 照らし合わせて許可/拒否を決めるべきでしょう。


  5. /etc/exports
    "/etc/exports"ファイルにはNFSのファイルシステムのアクセス制御を記述します。

    NFSは便利な機能ですが、アクセス制御を甘くすると外部からファイルシステムにマウントされて しまう可能性もあります。 もしもNFSを使うのであれば公開するディレクトリを書き込み禁止にする、 アクセスできるホストを制限するなどの手立てが必要です。

    slackwareで使われているNFSシステムの"/etc/exports"の記述方法は、 一般の書籍で説明されているものと若干異なります。 詳しくはmanコマンドで調べて下さい。

      % man exports

  6. /etc/hosts.allow & /etc/hosts.deny
    これら二つのファイルについては、 セキュリティ機能を向上させたtcpdデーモン:tcpwrappers にて詳細に解説します。

4.3 接続ポートの検査
不要なサービスを停止したら、netstatコマンドを使って確実にポートが閉じているか否か、確認をしてみましょう。

# netstat -ln -A inet
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN

netstat


この例では、ポート:21(ftp)、22(ssh)、80(http)、443(https)が外部から接続可能であることが分かります。


home |index |previous |next |contents


since 04/Oct/2004