|
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 |
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セクション(LoadModuleとAddModule)からコメントアウトして下さい。
その後、/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
|
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.net、http://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が設定ファイルにないことを確認して下さい。
なぜなら、これにより公開鍵認証メカニズムが上書きされてしまうためです。
もしくは、PasswordAuthenticationとChallengeResponseAuthentication
のどちらかを無効にしてしまうこともできます。
これらのオプションに関するより多くの情報が、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_dsaとid_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
|
|