Debian GNU/LinuxにおけるセキュアなDomain-0の作り方
以下では、Debian GNU/Linux 3.1(sarge)を用いたセキュアサーバー、つまり最小限の環境のみを備えたサーバーをどのようにして作るか? について述べていきます。セキュアなDomain-0の構築のために必要なベースは、まずセキュアなサーバーという考え方にもとづきます。
Debian Installerでは何をどう選ぶ?
普通にインストールすると、Debian Installerを使うことになるかと思います。ここでは「追加では何もインストールしない」ようにします(図2)。
こうしてインストールされたシステムを起動した直後のプロセスは、プロセス一覧(リスト1)のような感じになります。
リスト1:Debianインストール直後のプロセス
PID TTY STAT TIME COMMAND
1 ? S 0:00 init [2]
2 ? S 0:00 [keventd]
3 ? SN 0:00 [ksoftirqd_CPU0]
4 ? S 0:00 [kswapd]
5 ? S 0:00 [bdflush]
6 ? S 0:00 [kupdated]
47 ? S 0:04 [kjournald]
403 ? S 0:00 [khubd]
699 ? Ss 0:00 dhclient -e -pf /var/run/dhclient.eth0.pid -lf /va
782 ? Ss 0:00 /sbin/syslogd
785 ? Ss 0:00 /sbin/klogd
823 ? Ss 0:00 /usr/sbin/inetd
827 ? Ss 0:00 /usr/sbin/atd
830 ? Ss 0:00 /usr/sbin/cron
837 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
838 tty3 Ss+ 0:00 /sbin/getty 38400 tty3
2993 ? Ss 0:00 /usr/sbin/lpd -s
3032 ? Ss 0:00 /sbin/portmap
3066 ? Ss 0:00 /sbin/rpc.statd
3197 ? Ss 0:00 /usr/sbin/sshd
3279 ? Ss 0:00 /usr/sbin/cannaserver -u canna
4254 ? Ss 0:00 /usr/sbin/exim4 -bd -q30m
4301 tty4 Ss+ 0:00 /sbin/getty 38400 tty4
4305 tty5 Ss+ 0:00 /sbin/getty 38400 tty5
4306 tty6 Ss+ 0:00 /sbin/getty 38400 tty6
4757 tty1 Ss 0:00 -bash
4770 tty1 R+ 0:00 ps ax
netstatの結果を見ても、SSH以外に外部からの接続待ちを行っているポート(リスト2)が見られます。
リスト2:Debianインストール直後の接続待ち
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:704 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost.localdom:smtp *:* LISTEN
udp 0 0 *:698 *:*
udp 0 0 *:701 *:*
udp 0 0 *:bootpc *:*
udp 0 0 *:sunrpc *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 18817 /dev/printer
unix 2 [ ACC ] STREAM LISTENING 20315 /tmp/.iroha_unix/IROHA
unix 5 [ ] DGRAM 782 /dev/log
unix 2 [ ] DGRAM 19048
unix 2 [ ] DGRAM 18811
unix 2 [ ] DGRAM 823
まず、不要なポートで接続待ち/データ待ちを行っているこの状態をなんとかしてみましょう。
不要な起動設定の削除
リスト1で稼働しているプロセスの状態を見ると、インストール直後に動いてるものは非常に少ないですが、これ必要かな? というものが動作しています。dhclientやinetd、portmap、rpc.statdなどは必要ありません。
リスト2でネットワークの状態を見ると、SSH以外のポートで接続待ちになっています。
本質的に、本稿で構築対象とするものは「サーバー」ですから、システム管理者が決めたサービス以外は動いていないのが理想です。外部からの接続を許可していないポートについても、接続待ちをしていないのが理想です。
Debianは「最低限、システム起動時には起動しない」ようにしてみましょう。
