Gentoo Logo

1.  Apache

Apacheには、非常に親切な設定ファイルが付属しています。但し、 Apacheに対しアドレス1つをバインドする、情報の漏えいを防ぐ等の改善が必要です。 以下は、設定ファイルに適用すべきオプションです。

もし、Apacheのインストール前に、 /etc/make.confにおいてsslを無効にしていなかったら、 sslサービスにアクセスできるようにすべきです。 /etc/apache2/vhosts.dの中に設定ファイルの例があります。 動作例がありますので、最も良いのはそれらを確認するか、sslを無効にすることです。

ある特定のIPアドレス(システムで利用可能なすべてのIPアドレスではなく)をlistenするよう設定することが重要です。 例えば、00_default_vhost.confは次のようになります。

コード表示 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf

# あなたのIPで、それをlistenするようにしてください
Listen 127.0.0.1

また、Apacheのインストール情報を公開しないことを推奨します。 デフォルトの設定では、サーバのバージョン、サーバによって生成されたページのバーチャルホスト名が追加されます。 これを無効にするため、ServerSignature変数をOffに変更してください。

コード表示 1.1: /etc/apache2/modules.d/00_default_settings.conf

ServerSignature Off

Apacheは、--enable-shared=max--enable-module=allと共にコンパイルされています。 これにより、デフォルトでは全てのモジュールが有効になります。 そのため、メインの設定ファイル/etc/apache2/httpd.confで使用しないモジュールはすべてLoadModuleセクション(LoadModuleAddModule)からコメントアウトして下さい。 その後、/etc/init.d/apache2 restartを実行し、サービスを再起動します。

ドキュメントは、http://www.apache.orgで参照できます。

1.  BIND

ドキュメントは、 Internet Software Consortiumで参照できます。 また、BIND 9 Administrator Reference Manualが、doc/armにあります。

比較的新しいBINDのebuildは、初期状態でchrootをサポートしています。 BINDをemergeした後、以下の簡単な手順に従って下さい。

コード表示 1.1: BINDをchrootする

# emerge --config bind
(上記コマンドの実行前、chrootするディレクトリを/etc/conf.d/namedで変更すると良いでしょう。
変更しなければ、/chroot/dnsが使用されます。)

1.  Djbdns

Djbdnsとは、 開発者が賞金を掛けるほどセキュリティを意識したDNSの実装です。 Bind 9の動作とは非常に異なりますが、試してみる価値はあります。より詳細な情報は、 http://www.djbdns.orgから入手できます。

1.  FTP

一般的には、FTP(File Transfer Protocol)を使用するのは悪い考えです。 FTPでは、暗号化されていないデータを使用し(つまり、パスワードが平文で送信されます)、 2つのポートをリッスンします(通常、20番ポートと21番ポート)。 アタッカーは不法コピーしたソフトウェアを取引するため、たびたび匿名ログインを探します。 FTPプロトコルは、セキュリティ上いくつか問題を抱えているため、代わりに sftpやHTTPを使用するべきです。それが無理なら、 サービスのセキュリティを強化するよう努めてください。

1.  MySQL

ローカルのアプリケーションしかMySQLデータベースにアクセスする必要がなければ、 /etc/mysql/my.cnfにおいて下記ラインのコメントをはずして下さい。

コード表示 1.1: ネットワークアクセスを無効にする

skip-networking

それから、LOAD DATA LOCAL INFILEコマンドの使用を無効にします。 これにより、ローカルファイルからの不正な読み取りを防ぐことができます。 また、SQLインジェクションの脆弱性がPHPアプリケーションにおいて新しく発見された際にも、 これは役立ちます。

コード表示 1.1: [mysqld]セクションにおいて、LOAD DATA LOCAL INFILEを無効にする

set-variable=local-infile=0

次に、サンプルのデータベース(test)とローカルのrootアカウントを除く全てのアカウントを削除します。

コード表示 1.1: サンプルのデータベースと全ての必要でないユーザを削除する

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;

警告: ユーザアカウントを既に構成している際は、上記を行う際は注意して下さい。

注意: MySQLのプロンプトからパスワードを変更していた場合は、 ~/.mysql_history/var/log/mysql/mysql.logの内容を必ず消去するべきです。 なぜなら、そのファイルには実行されたSQLコマンドが平文のパスワードと共に保存されているからです。

1.  ProFTPD

ProFTPDは、セキュリティ上の問題を抱えてきましたが、多くは修正されているようです。 とはいえ、機能強化を適用するのは良い考えです。

コード表示 1.1: /etc/proftpd/proftpd.conf

ServerName "My ftp daemon"
#Don't show the ident of the server
ServerIdent on "Go away"

#Makes it easier to create virtual users
RequireValidShell off

#Use alternative password and group file (passwd uses crypt format)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Permissions
Umask 077

# Timeouts and limitations
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

#Chroot everyone
DefaultRoot ~

#don't run as root
User  nobody
Group nogroup

#Log every transfer
TransferLog /var/log/transferlog

#Problems with globbing
DenyFilter \*.*/

ドキュメントは、http://www.proftpd.orgで参照できます。

1.  Pure-FTPd

Pure-FTPdとは、オリジナルであるTrollFTPDのブランチで、 セキュリティと機能性を理由にFrank Dennis氏により修正が加えられています。

AUTHオプションを有効にし、(システムアカウントではなく)バーチャルユーザを使用して下さい。 また、設定するには-lpuredb:/etc/pureftpd.pdbを実行し、 /usr/bin/pure-pwでユーザを作成して下さい。

コード表示 1.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

MISC_OTHERを構成して、匿名ログインを拒否する(-E)、 全ての人をchrootする(-A)、.(ドット)で始まるファイルに対しユーザの読み取り書き込みを防ぐ(-X)、 最大アイドルタイム(-I)、再起呼び出しの制限(-L)、妥当なumaskになるようして下さい。

警告: -wもしくは-Wオプションを使用しないで下さい。 不法コピーしたソフトウェアの取引サイトを運用したいのであれば、 このガイドを読むのを止めて下さい!

ドキュメントは、http://www.pureftpd.orgから入手できます。

1.  Vsftpd

Vsftpd(very secure ftpの略)は軽量なFTPデーモンで、デフォルトでも合理的な設定で動作します。 シンプルですが、PureFTPdやProFTPDほど多機能ではありません。

コード表示 1.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#read only
write_enable=NO

#enable logging of transfers
xferlog_std_format=YES

idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

ご覧のように、このサービスではユーザ毎にパーミッションを設定できませんが、 匿名設定に関しては非常に良くできています。時として、 匿名FTPサーバがあると便利ですが(オープンソースを共有する等)、 これに関してvsftpdは非常に良い仕事をします。

1.  Netqmail

Netqmailは、多くの場合、セキュリティに優れたメールサーバだと考えられています。 これは、セキュリティを(偏執なほど)念頭においてかかれています。 デフォルトではリレーを許可せず、また1996年以降セキュリティホールはありません。 単にemerge netqmailを実行し、設定を行って下さい!

1.  Samba

Sambaとは、Microsoft/Novellネットワークとファイル共有を行えるプロトコルで、 インターネット上で使用されるべきではありません。使用せざるを得ない場合は、 セキュリティを確保しなくてはいけません。

コード表示 1.1: /etc/samba/smb.conf

[global]
  #Bind to an interface
  interfaces = eth0 10.0.0.1/32

  #Make sure to use encrypted password
  encrypt passwords = yes
  directory security mask = 0700

  #allow traffic from 10.0.0.*
  hosts allow = 10.0.0.

  #Enables user authentication 
  #(don't use the share mode)
  security = user

  #Disallow privileged accounts
  invalid users = root @wheel

  #Maximum size smb shows for a share (not a limit)
  max disk size = 102400

  #Uphold the password policy
  min password length = 8
  null passwords = no

  #Use PAM (if added support)
  obey pam restrictions = yes
  pam password change = yes

全ての共有に対しパーミッションを適切に設定し、 忘れずにドキュメントを読んで下さい。

それでは、サーバを再起動しこのサービスにアクセスできるユーザを追加します。 これは、/usr/bin/smbpasswdコマンドに引数-aを加えて行います。

1.  ssh

OpenSSHでセキュリティを確保するには、 公開鍵暗号ベースのより強固な認証を行うようにするしかありません。 非常に多くのサイト(http://www.sourceforge.nethttp://www.php.net、 そしてhttp://www.apache.org等)が、 パスワード漏えいもしくは強度のないパスワードのせいで、不正侵入に苦しんできました。

コード表示 1.1: /etc/ssh/sshd_config

#Only enable version 2
Protocol 2

#Disable root login. Users have to su to root
PermitRootLogin no

#Turn on Public key authentication
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Disable .rhost and normal password authentication
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Only allow userin the wheel or admin group to login
AllowGroups wheel admin

#In those groups only allow the following users
#The @<domainname> is optional but replaces the 
#older AllowHosts directive
AllowUsers kn@gentoo.org bs@gentoo.org

#Logging 
SyslogFacility AUTH
LogLevel INFO

(これをあなたのアドレスに変更してください)
ListenAddress 127.0.0.1

また、UsePAM yesが設定ファイルにないことを確認して下さい。 なぜなら、これにより公開鍵認証メカニズムが上書きされてしまうためです。 もしくは、PasswordAuthenticationChallengeResponseAuthentication のどちらかを無効にしてしまうこともできます。 これらのオプションに関するより多くの情報が、sshd_configのマニュアルページにあります。

それでは以下のコマンドにより、(ログイン元にしたいマシン上で)ユーザは鍵を生成するだけです。

コード表示 1.1: 1組のDSA Keyを作成する

# /usr/bin/ssh-keygen -t dsa

そして、パスフレーズを入力して下さい。

コード表示 1.1: ssh-keygenの出力

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Press enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Enter passphrase]
Enter same passphrase again: [Enter passphrase again]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

これにより、id_dsaid_dsa.pubの2つのファイルが、 ~/.ssh/ディレクトリに追加されます。 id_dsaファイルは、秘密鍵になりますので、 他の人々に見せないようにして下さい。もう一方のファイルid_dsa.pubは、 アクセス先となる全てのサーバに配布することになります。 鍵をユーザホームディレクトリ下の~/.ssh/authorized_keysに追加すれば、 ユーザはログインできるはずです。

コード表示 1.1: id_dsa.pubファイルを、authorized_keysファイルに追加する

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password: 
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys

そして、ユーザはこの秘密鍵を慎重に管理するようにしなくてはいけません。 秘密鍵は常時携帯するメディアに保存するか、もしくはワークステーション上に保管しておきましょう。 (また、(パスワード)ポリシーに、これを含めておきましょう)

より詳細な情報は、OpenSSHのウェブサイトで入手して下さい。

1.  xinetdを使う

xinetdとは、inetd(Gentooでは含まれていません)の置き換えで、 インターネットサービスデーモンです。xinetdは、 リモートホストアドレスとアクセス時間をベースにしたアクセス制御をサポートします。 また、サーバの起動時間、リモートホストアドレス、リモートユーザ名、 サーバの稼動時間、要求されたアクションを含む拡張ロギング機能も提供します。

xinetdでは、他の全てのサービス同様、優れたデフォルト設定を行うことが重要です。 但し、xinetdはrootとして実行され、あなたが精通していないかもしれないプロトコルをサポートします。 従って、使用しないことをお勧めします。それでも使用したい場合は、 以下のようにしてセキュリティを強化できます。

コード表示 1.1: xinetdをインストールする

# emerge xinetd tcp-wrappers

そして、設定ファイルを編集します。

コード表示 1.1: /etc/xinetd.conf

defaults
{
 only_from = localhost
 instances = 10
 log_type = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps = 25 30
}

# This will setup pserver (cvs) via xinetd with the following settings:
# max 10 instances (10 connections at a time)
# limit the pserver to tcp only
# use the user cvs to run this service
# bind the interfaces to only 1 ip
# allow access from 10.0.0.*
# limit the time developers can use cvs from 8am to 5pm
# use tpcd wrappers (access control controlled in 
# /etc/hosts.allow and /etc/hosts.deny)
# max_load on the machine set to 1.0
# The disable flag is per default set to no but I like having 
# it in case of it should be disabled
service cvspserver
{
 socket_type = stream
 protocol = tcp
 instances = 10
 protocol = tcp
 wait = no
 user = cvs
 bind = 10.0.0.2
 only_from = 10.0.0.0
 access_times = 8:00-17:00
 server = /usr/sbin/tcpd
 server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load = 1.0
 log_on_failure += RECORD
 disable = no
}

より詳しい情報は、man 5 xinetd.confを参照して下さい。

1.  X

デフォルトでは、XorgはXサーバとして動作するよう構成されています。 Xは暗号化されていないTCPコネクションを使用し、 Xクライアント用にポートを開くため、これは危険かもしれません。

重要: もし、このサービスが必要でなければ、無効にして下さい!

しかし、使用するワークステーションをXサーバとして使用する場合があれば、 慎重に/usr/X11R6/bin/xhostコマンドを使用して下さい。 このコマンドにより、他のホストからの接続とディスプレイの使用をクライアントが制御できるようになります。 Xアプリケーションを異なるマシンから必要とし、ネットワーク経由がその唯一の方法であれば、 これは手ごろな手段になりますが、アタッカーに悪用される可能性もあります。このコマンドの構文は、 /usr/X11R6/bin/xhost +hostnameです。

警告: xhost +機能を絶対に使用しないで下さい。これにより、 どのクライアントにも接続されXを制御されてしまうでしょう。もし、 アタッカーがXにアクセスできれば、あなたのキー入力を記録し、 デスクトップのアクセス権をのっとるかもしれません。 もし、Xを使用せざるをえないのであれば、ホストを忘れずに指定して下さい。

よりセキュリティ上優れた解決方法としては、Xをstartx -- -nolisten tcpで起動し、 この機能を完全に無効にしてしまうか、設定において常時無効にしてしまうことです。

コード表示 1.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Xorgの新しいバージョンをemergeした際、startxが上書きされないように、 startxを保護しなくてはいけません。それには、 以下のラインを/etc/make.confに加えて下さい。

コード表示 1.1: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

グラフィカルログインマネージャを使用しているのであれば、異なったアプローチが必要です。

gdm(Gnome Display Manager)用

コード表示 1.1: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

xdm(X Display Manager)とkdm(Kde Display Manager)用

コード表示 1.1: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp 

ページの更新日 2008年 6月 13日

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.