Product SiteDocumentation Site

付録 B Appendix

B.1. 段階ごとの強化過程

Below is a post-installation, step-by-step procedure for hardening a Debian 2.2 GNU/Linux system. This is one possible approach to such a procedure and is oriented toward the hardening of network services. It is included to show the entire process you might use during configuration. Also, see 第 B.2 節「設定チェックリスト」.
  • Install the system, taking into account the information regarding partitioning included earlier in this document. After base installation, go into custom install. Do not select task packages.
  • dselect を行い、[I]nstall の前に不要だが選択されている パッケージを削除しましょう。本当に最小限のソフトウェアだけをサーバに 残しましょう。
  • 第 4.2 節「セキュリティ上の更新を実行する」 ですでに説明されているように security.debian.org で 利用できる最新のパッケージすべてを更新しましょう。
  • ユーザ quota、ログインの定義や lilo など、このマニュアルで示されて いる提案を導入しましょう。
  • Make a list of services currently running on your system. Try:
      $ ps aux
      $ netstat -pn -l -A inet 
      # /usr/sbin/lsof -i | grep LISTEN
    3 番目のコマンドがうまくいくためには lsof-2.2 をインストール する必要があるでしょう (root として実行してください)。lsof は LISTEN という 単語をあなたのロケールの設定にあわせて翻訳するかもしれないことに注意する べきです。
  • In order to remove unnecessary services, first determine what package provides the service and how it is started. This can be accomplished by checking the program that listens in the socket. The following shell script, which uses the programs lsof and dpkg, does just that:
    #!/bin/sh
    # FIXME: this is quick and dirty; replace with a more robust script snippet
    for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
      pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
      echo "Service $i is installed by $pack";
      init=`dpkg -L $pack |grep init.d/ `
      if [ ! -z "$init" ]; then
        echo "and is run by $init"
      fi
    done
  • Once you find any unwanted services, remove the associated package (with dpkg --purge), or disable the service from starting automatically at boot time using update-rc.d (see 第 3.5.1 節「デーモンサービスを停止する」).
  • For inetd services (launched by the superdaemon), check which services are enabled in /etc/inetd.conf using:
      $ grep -v "^#" /etc/inetd.conf | sort -u
    Then disable those services that are not needed by commenting out the line that includes them in /etc/inetd.conf, removing the package, or using update-inetd.
  • ラップされたサービス (/usr/sbin/tcpd を使うもの) が あれば、/etc/hosts.allow/etc/hosts.deny が あなたのサービスポリシーにしたがって設定されていることを確かめましょう。
  • If the server uses more than one external interface, depending on the service, you may want to limit the service to listen on a specific interface. For example, if you want internal FTP access only, make the FTP daemon listen only on your management interface, not on all interfaces (i.e, 0.0.0.0:21).
  • マシンを再起動するか、シングルユーザに移行してこのようにして マルチユーザに戻りましょう。
      # init 1
      (....)
      # init 2
  • サービスがいまでも利用可能か調べて、もし必要ならば、上記の手順を くりかえしましょう。
  • そしてまだインストールしていないなら必要なサービスをインストールし、 適切に設定しましょう。
  • Use the following shell command to determine what user each available service is running as:
      # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
      > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
      > echo "Service $i is running as user $user"; done
    Consider changing these services to a specific user/group and maybe chroot'ing them for increased security. You can do this by changing the /etc/init.d scripts which start the service. Most services in Debian use start-stop-daemon, which has options (--change-uid and --chroot) for accomplishing this. A word of warning regarding the chroot'ing of services: you may need to put all the files installed by the package (use dpkg -L) providing the service, as well as any packages it depends on, in the chroot'ed environment. Information about setting up a chroot environment for the ssh program can be found in 第 B.7 節「Chroot environment for SSH.
  • 望むサービスだけが動いていて、それも望むユーザやグループの組みあわせで 動いているのを確かめるため上記の手順をくりかえしましょう。
  • 期待どおりに動いていることを確かめるためインストールされている サービスをテストしましょう。
  • システムの脆弱性 (設定ミス、古いサービスまたは不要なサービス) を 調べるために (nessus のような) 脆弱性評価スキャナを使って システムを調べましょう。
  • Install network and host intrusion measures like snort and logcheck.
  • ネットワークスキャナの手順をくりかえして侵入検知システムがきちんと 動いているかどうか検証しましょう。
本物のパラノイアのためには、以下も考慮しましょう:
  • ファイアウォール能力をシステムに追加して、外部からの接続を 提供されているサービスへのみ受けいれ、外部への接続を公認のものだけに 制限しましょう。
  • Re-check the installation with a new vulnerability assessment using a network scanner.
  • Using a network scanner, check outbound connections from the system to an outside host and verify that unwanted connections do not find their way out.
FIXME: this procedure considers service hardening but not system hardening at the user level, include information regarding checking user permissions, SETUID files and freezing changes in the system using the ext2 file system.