全てのコンテンツをPDFで見る

Copyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
Linux サーバ
パーフェクトセキュリティ
Linux サーバ
パーフェクトセキュリティ
から抜粋
== 目 次 ==
Ⅰ.ネットワークのセキュリティ
Ⅰ-ⅰ.Ping の要求を受け取らない
Ⅰ-ⅱ.Ping に応答しない
Ⅰ-ⅲ.traceroute への制限
Ⅰ-ⅳ.SmurfDoS 攻撃の中継地点をとらない
Ⅰ-ⅴ.SYN Flood 攻撃への対応
Ⅱ.インターネットサーバ共通のセキュリティ
Ⅱ-ⅰ.不要サービスを停止する
Ⅱ-ⅱ.kill コマンドによるサービス停止
Ⅱ-ⅲ./etc/services ファイルでサービスを無効にする
Ⅱ-ⅳ.service コマンドでサービス停止
Ⅱ-ⅴ.サービスの自動起動の設定
Ⅱ-ⅵ.linuxconf でサービスの起動や停止を設定
Ⅱ-ⅶ.ntsysv コマンドでサービスの自動起動を設定
Ⅲ.リモートコマンドを制限する
Ⅲ-ⅰ.r 系コマンドを制限する
Ⅲ-ⅱ.telnet の制限を行う
Ⅲ-ⅲ.SSH を使えるようにする
Ⅲ-ⅳ.rpm コマンドの使い方
Ⅳ.サーバのログ設定
Ⅳ-ⅰ.サーバのログ設定(SYSLOG とその他のログ)
Ⅳ-ⅱ.SYSLOG の設定
Ⅴ.Web サーバのセキュリティ
Ⅴ-ⅰ.Apache 設定ファイル httpd.conf
Ⅴ-ⅱ.httpd.conf による設定
Ⅴ-ⅲ.Web サーバへのアクセスコントロール
Ⅴ-ⅳ.他の Web サーバセキュリティ設定
Ⅵ.FTP サーバのセキュリティ
Ⅵ-ⅰ.FTP サーバの ACL 設定を行う
Ⅵ-ⅱ.匿名 FTP サービス
-2CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
Linux サーバセキュリティ
Ⅰ. ネットワークのセキュリティ
Ⅰ-ⅰ. Ping の要求を受け取らない
[47]
[51]
設定値
-内部ネットワーク:192.168.117.0/24
-管理マシン
:192.168.117.10
①ネットワークに対する Ping 要求をすべて破棄する
# iptables –A INPUT –p icmp –-icmp-type 0 –s 0.0.0.0 –d 192.168.117.0 –j DROP
②ネットワークに対する Ping 要求を管理マシンにのみ許可する
# iptables –A INPUT –p icmp –-icmp-type 0 –s 192.168.117.10 –d 192.168.117.0 –j ACCEPT
Ⅰ-ⅱ. Ping に応答しない
設定値
[52]
–同じ
①Ping 要求に対する応答をすべて破棄する
# iptables –A OUTPUT –p icmp --icmp-type 8 –s 192.168.117.0
–d 0.0.0.0 –j DROP
②管理マシンからの Ping 要求に対し応答する
# iptables –A OUTPUT –p icmp --icmp-type 8 –s 192.168.117.0 –d 192.168.117.10 –j ACCEPT
Ⅰ-ⅲ. traceroute への制限
設定値
[54]
–同じ
# iptables –A OUTPUT –p icmp --icmp-type 11 –s 192.168.117.0 –d 0.0.0.0 –j DROP
# iptables –A OUTPUT –p icmp --icmp-type 11 –s 192.168.117.0 –d 192.168.117.10 –j ACCEPT
Ⅰ-ⅳ. Smurf DoS 攻撃の中継地点をとらない
[68]
設定値
- 内部ネットワーク:192.168.117.0/24
- 外部向けインタフェース:eth0
①送信先指定
# iptables –A INPUT –d 0.0.0.0/8 –i eth0 –j DROP
# iptables –A INPUT –d 255.255.255.255/32 –i eth0 –j DROP
0.0.0.0/8 , 255.255.255.255/32 → Smurf DoS 攻撃によく使われる。
②送信元指定
# iptables –A INPUT –s 192.168.117.0/24 –i eth0 –j DROP
塞いだ方が好ましいアドレス一覧
・0.0.0.0/8
・10.0.0.0/8
・127.0.0.0/8
・169.254.0.0/16
・172.16.0.0/12
:
:
:
:
:
Historical Broadcast
RFC 1918 Private Network
Loopback
Link Local Networks
RFC 1918 Private Network
・192.168.0.0/16
・224.0.0.0/4
・240.0.0.0/5
・248.0.0.0/5
・255.255.255.255/32
:
:
:
:
:
-3CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
RFC 1918 Private Network
Class D Multicast
Class E Reserved
Unallocated
Broadcast
・192.0.2.0/24
: TEST-NET
Ⅰ-ⅴ. SYN Flood 攻撃への対応
[69]
①TCP FIN スキャンの防止
1) SYN/FIN フラッグを立てたパケットを破棄
# iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -s
>> 0.0.0.0 -d 192.168.117.0/24 -j DROP
2) FIN フラッグを立てたパケットを破棄
# iptables -A INPUT -p tcp --tcp-flags ALL FIN –s
>> 0.0.0.0 -d 192.168.117.0/24 -j DROP
②TCP Xmas ツリースキャンの防止
・FIN/URG/USH フラッグを立てたパケットを破棄
# iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PUSH
>> -s 0.0.0.0 -d 192.168.117.0/24 -j DROP
Ⅱ. インターネットサーバ共通のセキュリティ
Ⅱ-ⅰ. 不要サービスを停止する
[84]
①停止する候補となるサービス
[85]
サービス名
機
apmd
[71]
能
APM を監視するデーモン。電源を ON/OFF した時に SYSLOG に残したり、管理者
へ警告を通知できる。
atd
at によってキューに入られたジョブを実行する。
canna
かな漢字変換サーバ。日本語入力を行わないなら必要ない。
lpd
ラインプリンタデーモン
netfs
NFS マウントポイントのマウント・アンマウントを有効にする。
portmap
NFS や NIS など、RPC を使用したプログラムに必要。
②停止することを推奨するスーパーデーモン経由で起動するサービス
[85]
サービス名
機
能
finger
ホスト内にあるユーザの情報を提示
daytime
日付と時刻を応答する
chargen
文字列に対し応答する
time
日付と時刻を応答する
shell
起動しているだけでセキュリティホールとなり得るので停止
login
起動しているだけでセキュリティホールとなり得るので停止
talk
talk コマンドのサーバ
③不要サービスを停止する方法
[86]
1) ポートを閉じる
/etc/services を編集する
2) 動作しているプロセスを停止する
-4CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
kill, service コマンドを使う
, linuxconf で設定
3) 起動時にプロセスが立ち上がらないようにする
起動スクリプトの変更
Ⅱ-ⅱ. kill コマンドによるサービス停止
, chkconfig コマンドで設定
, linuxconf で設定
[86]
書式:kill コマンド
・kill [-s シグナル] [-p] [-a] プロセス
・kill -l シグナル番号
①オプションの意味
[87]
オプション
意
味
-s シグナル
指定したシグナルを送る。シグナルは番号もしくは名前で指定
-p
プロセスの PID(プロセス ID)を表示する。シグナルは送らない
-a
コマンド名から PID への制限をはずす
-l
指定されたシグナルの名前を表示する。シグナル番号を表示しなければ一覧を表示する。
②よく使われるシグナル
番号
[87]
シグナル名
省略名
意
味
1
SIGHUP
HUP
プロセスを再起動
2
SIGINT
INT
プロセスを中断
9
SIGKILL
KILL
プロセスを強制切断
15
SIGTERM
TERM
このシグナルを受け取らないプロセスを切断
18
SIGCONT
CONT
停止状態のプロセスを再開
19
SIGSTOP
STOP
プロセスを停止状態にする
③プロセスの指定方法
[88]
・<PID>
・ 0
・ -1
・-<PID>
:その PID のプロセスにシグナルを送る
:全てのプロセスにシグナルを送る
:PID が1より大きい全てのプロセスにシグナルを送る
:指定した PID に属する全てのプロセスグループにシグナルを送る
この場合、省略指定されたシグナルと誤解される可能性がある
・<コマンド名> :この名前で起動された全てのプロセスにシグナルを送る
④確認
[89]
ps コマンドで確認
# ps-ax
Ⅱ-ⅲ. /etc/services ファイルでサービスを無効にする
[89]
/etc/services ファイル
→ サービスとポートの対応を記載
不要なサービスの無効化
↓
対象のサービスの行頭に「#」をつけてコメントアウトする。
Ⅱ-ⅳ. service コマンドでサービス停止(RedHat Linux) [90]
書式:service コマンド
-5CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
service サービススクリプト 動作
①サービススクリプト[91]
= 自動起動のスクリプト名
/etc/init.d ディレクトリ(/etc/rc.d/init.d ディレクトリ)にある
・スクリプトファイル一覧の表示
# ls /etc/init.d
②動作[91]
・start
・stop
・restart
: 開始
: 停止
: 再起動
例) # service syslog start
Ⅱ-ⅴ. サービスの自動起動の設定[92]
① rc スクリプト[92]
1) ランレベル
・ランレベル 0
・ランレベル 1
・ランレベル 2
・ランレベル 3
・ランレベル 4
・ランレベル 5
・ランレベル 6
:
:
:
:
:
:
:
電源を切ることのできる状態
シングルユーザーモード
マルチユーザーモード(NGS などは使わない)
マルチユーザーモード(規定)
未使用
X11
リブート
2) 実行されるスクリプト
各ランレベルで起動する際に実行されるスクリプト
→ /etc/rc.d の下のそれぞれのランレベルに対応した rc0.d~rc6.d の各ディレクトリに格納
例) rc3.d ディレクトリ内リンクファイル名一覧
# ls /etc/rc.d/rc3.d
3) リンクファイル名
[1]先頭にあるアルファベット
・K
:不要なデーモンを停止する
・S
:デーモンを起動する
「K」を起動 → 「S」を起動
[2]アルファベットの後ろの数字
それぞれの中での起動順序
起動順序を間違うとエラーとなる可能性がある
②chkconfig コマンド (RedHat Linux7.3 以降)[93]
書式:chkconfig コマンド
chkconfig スクリプト名 on/off
例 1) httpd を自動起動させない
# chkconfig httpd off
-6CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
例 2) ランレベルごと(2~5)の設定
# chkconfig --level=2345 httpd off
例 3) 現在のデーモンの各ランレベルの起動設定の状態を確認
# chkconfig --list
Ⅱ-ⅵ. linuxconf でサービスの起動や停止を設定
[94]
①linuxconf の起動
# linuxconf
起動したら、「Control」のツリーを開き、「Control service activity」を選択
②「service control」画面
・起動時に実行されるサービス
:Enable 項目 → 「Automatic」
・現在起動中のサービス
:Running 項目 → 「Running」
③サービスの変更
1) 変更するサービスを選択し、Enter
2) 設定画面
・Startup
:自動起動を行うかどうかの設定。
カーソルを合わせてスペースキーで変更する。
・Status
:現在実行中かどうかを表示する。
・Package name
:パッケージマネージャがインストールされていれば名前が表示される。
・Description
:このサービスの説明
Ⅱ-ⅶ. ntsysv コマンドでサービスの自動起動を設定 (Red Hat Linux) [97]
① ntsysv の起動
# ntsysv
[ ]内にチェック
→
Linux 起動時に自動起動
Ⅲ.リモートコマンドを制限する
Ⅲ-ⅰ. r 系コマンドを制限する
[98]
[100]
「r」…リモート
rlogin , rsh , rexec → サーバを直接制御できる
①xinetd の場合
/etc/xinetd.conf もしくは /etc/xinetd.d ディレクトリのファイルで設定
1) ls コマンドで確認
2) 停止したいサービスのファイルを編集
「disable」項目:[no]→[yes]
もしくは
ファイル名自体を変更
3) xinetd を再起動
②PAM の認証を行わない
[101]
/etc/pam.d ディレクトリ
→ r 系コマンドのための認証設定がある
-7CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
↓
ディレクトリ内に認証設定がないサービスであれば、PAM は other を適用
↓
すべて拒否 → r 系コマンドの認証は other にまかせる
<他の方法>
rlogin , rsh , rexec のファイル名を変更
# mv /etc/pam.d/rlogin /etc/oam.d/_rlogin
Ⅲ-ⅱ. Telnet の制御を行う
[102]
①ログインメッセージの制御
ウェルカムメッセージの内容 → /etc/issue.net
↓
OS 名やバージョン名の記述をコメントアウト
※コンソールからのログインに対するメッセージ → /etc/issue
②Telnet ポートを変更する
[103]
Telnet ポート → 23 (規定)
<変更手順>
1) /etc/services を修正
telnet
23/tcp →
telnet 1023/tcp
2) /etc/services を保存
3) xinetd を再起動
◎Telnet 接続の変更
ポートを変更した場合、接続時にポート番号を指定
# telnet 192.168.117.10 1023
③root でログインさせない
[103]
1) root でログインできる端末
→ /etc/securetty に記述された端末
↓
ttyp0~ttyp2 が Telnet 端末 …削除
2) /etc/pam.d/login 内の行
auth reguired
/lib/security/pam_securetty.so
この記述がなければ追加
④ root になれるユーザを制限する
1) root になれるユーザを所属させるグループを編集
[1] /etc/group ファイルを開く
[2] 「wheel」の行に、root になれるユーザを追加する
例:wheel:x:10:root, taro, hanako
2) /etc/pam.d/su ファイル (su コマンド認証ファイル)
次の行を追加
auth reguired
/lib/security/pam_wheel.so use_uid group=wheel
3) 設定ファイルを保存
-8CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
保存した直後から有効
Ⅲ-ⅲ. SSH を使えるようにする
①認証鍵の作成
[105]
[105]
作成はログインユーザごとに行う
1)
# su taro
$ ssh-keygen –t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/taro/.ssh/identity):
鍵を作成するディレクトリ。変更の必要がなければ Enter
Created directory ‘/home/taro/.ssh’.
Enter passphrase (empty for no passphrase) :
パスフレーズを入力
Enter same passphrase again:
確認のためもう一度入力
Your identification has been saved in /home/taro/.ssh/identity.
Your public key has been saved in /home/taro/.ssh/identity.pub.
The key fingerprint is :
d5:54:f5:b4:ab:9e:d7:46:2b:f2:53:36:cf:3b:f7:5d raro@rhs
2) 確認
$ cd /home/taro.ssh
$ ls
identity identity.pub
3) ダウンロード
作成された秘密鍵(identity)と公開鍵(identity.pub)のうち、秘密鍵をリモートアクセスする端末にダウンロード
②接続制限を行う
[106]
1) OpenSSH が標準インストールされている場合
→ TCPWrapper による接続制限ができる
2) SSH に対するすべての接続を拒否
/etc/hosts.deny ファイル
ssh :
All
3) 許可するホストまたはネットワークを記述
/etc/hosts.allow ファイル
ssh :
③ユーザの制限
192.168.117.0/255.255.255.0
[107]
/etc/ssh/sshd_config
→ ユーザ制限
1) ルートでログインさせない
PermitRootLogin no
2) ユーザごとの接続制限 (拒否優先)
「AllowUsers」 → 許可
「DenyUsers」 → 拒否
拒否優先の場合、
AllowUsers に許可するユーザ名を記述する
例:「taro」と「hanako」を許可する場合
-9CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
AllowUsers taro hanako
④ログの設定
(複数の場合スペースで区切る)
[107]
・SSH のログは SYSLOG で記録
・/etc/ssh/sshd_config ファイル内の項目で Facility と Priority を設定
syslogFacility
LogLevel
AUTHPRIV
INFO
・記録ファイル
→ /etc/syslog.conf で設定
Ⅳ-ⅳ
[120]
rpm コマンドの使い方
①パッケージの検索
書式:指定したパッケージがインストールされているか検索
rpm –q パッケージ名
パッケージ名 → 正式な名前 → 不明なことが多くあまり使われない
書式:grep コマンドと組合せて検索
rpm –qa | grep 探したい名前
書式:パッケージの中身を確認
rpm –ql パッケージ名
②パッケージのアップデート
書式:インストール
chkconfig スクリプト名 on/off
書式:アンインストール
chkconfig スクリプト名 on/off
書式:アップグレード
chkconfig スクリプト名 on/off
-F オプション
:以前のバージョンがなければアップグレードしない
-U オプション
:既存ファイルを上書きし、不要ファイルを削除
以前のバージョンがなければ新規インストールする
Ⅳ-ⅴ. サーバのログ設定 (SYSLOG とその他のログ)
①SYSLOG
UNIX 系 OS に標準装備されているログ記録システム
1) SYSLOG にログ記録を要求するアプリケーションが送信する項目
・プログラム名
・Facility
・Priority
・ログメッセージ
2) 設定ファイル
/etc/syslog.conf
- 10 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
②その他のログ
/var/log ディレクトリ内
1) 一覧を見る
# ls /var/log
2) 代表的なログ
・lastlog
・wtmp
・dmesg
・xferlog
:ユーザが最後にログインした記録。lastlog コマンドで閲覧
:ログイン履歴。last コマンドで閲覧
:ブート時のメッセージ記録
:FTP サーバのファイル移動ログ
Ⅳ-ⅵ. SYSLOG の設定
[120]
書式:/etc/syslog.conf の記述
Facility.Priority 出力先
①Facility の項目
名
[120]
前
意
kern
カーネル
user
通常のユーザプロセス
mail
メール・サブシステム
ftp
FTP デーモン
lqr
ラインプリンタ・サブシステム
auth
認証システム(非推奨、authpriv を推奨)
authpriv
認証システム
cron
クロックデーモン (cron と at)
deamon
システムデーモン
news
NEWS サブシステム
uucp
UUCP サブシステム
syslog
syslogd の内部メッセージ
local 1~7
サイト固有の使用のため予約
mark
タイムスタンプ
*
mark を除くすべての Facility
②Priority の項目
味
[121]
(上から優先順位の高い順)
名
前
意
味
emerg
緊急事態メッセージを通常すべてのユーザに通知
alert
緊急に修正する状態のメッセージ
crit
致命的な状態のメッセージ
err
通常のエラーメッセージ
warning
警告メッセージ
- 11 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
notice
特別な処理が必要なメッセージ
info
情報メッセージ
debug
デバッグメッセージ
*
すべての Priority
none
(特殊) Facility を除外する
③出力先
・ファイルまたはデバイス (絶対パス指定)
・他のマシンの syslogd (@hostname で指定)
・ユーザ (ただしログイン中のユーザ。「*」でログイン中の全ユーザ)
Ⅴ.Web サーバのセキュリティ
[123]
Ⅴ-ⅰ. Apache 設定ファイル httpd.conf [126]
①httpd.conf
Apache の設定ファイル
/etc/httpd/conf もしくは/usr/local/apache/conf に存在
1) 「ディレクティブ」
httpd.conf で記述する設定項目のこと
[1] Apache サーバプロセスの全般的な制御(環境設定)を行うディレクティブ
[2] メインサーバのパラメータ指定を行うディレクティブ
[3] バーチャルホスト別のパラメータ指定を行うディレクティブ
Ⅴ-ⅱ. httpd.conf による設定 [128]
①実行ユーザの権限を制限する
[128]
「User」,「Group」ディレクティブ
→ Apache を実行できるユーザやグループの設定
一般的には[nobody]が設定値
1) /etc/passwd ファイル
nobody の行を修正して nobody でログインできない設定にする
nobody:x:99:99:Nobody:/:/sbin/nologin
2) su コマンドで nobody が root になれない設定にする
P104 の方法による
3) /etc/group ファイル
グループ「wheel」を作成
root になれるユーザを追加
wheel:x:10:root
nobody は記述しない
4) /etc/pam.d/su ファイル
su コマンドの認証ファイル
コメントアウトをはずし、最後の行に「group=wheel」を追加
- 12 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
aauth required /lib/security/pam_wheel.so use_uid group=wheel
②ドキュメントルートのパーミッション設定
[129]
「DocumentRoot」ディレクティブ
→ ドキュメントルートの設定
DocumentRoot “/usr/local/apache/htdocs”
③INDEX OF ~ の制限 (1) [130]
Web ブラウザにインデックス表示させない
→ ドキュメントルートディレクトリのパーミッション変更
# chmod 311 /usr/local/apache/htdocs
ファイル名を指定しないアクセス → 「Foribidden」と表示
④INDEX OF ~ の制限 (2) [130]
httpd.conf を設定
1) インデックスファイルを明示する方法
「DirectoryIndex」ディレクティブ
→ 指定したファイルをインデックスファイルとする
2) インデックスを表示したくないディレクトリの「Option」ディレクティブから Index の設定を削除する方法
httpd.conf の<Directory “/usr/local/apache/htdocs”>セクションを変更
Option Indexes FollowSymLinks MultiViews
↓
# Option Indexes FollowSymLinks MultiViews
Option FollowSymLinks MultiViews
3) 「IndexIgnore」ディレクティブでインデックス表示したくないファイルを指定する方法
全てのファイルを表示したくない場合
IndexIgnore *
※httpd.conf の設定変更後は Apache の再起動を行う
⑤HTTP ヘッダ情報を制限する
[132]
サーバアプリケーションのバージョン情報などを隠す
→ 「ServerSignature」ディレクティブを変更
「ServerTokens」ディレクティブを追加
ServerSignature On
↓
ServerSignature
Off
ServerTokens
⑥エラーメッセージを制御する
ProductOnly
※この設定は Apache1.3.12 以降に限る
[133]
Apache がエラーを返す時に表示されるページを変更
→ 「ErrorDocument」ディレクティブを変更
書式:ErrorDocument ディレクティブの指定
ErrorDocument
ステータスコード
アクション
- 13 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
1) 代表的なステータスコードのエラー
ステータスコード
意
401
Unauthorized
403
Forbidden
404
Not Found
500
Internal Server Error
501
Not Implemented
味
※200 番台…成功応答
300 番台…リダイレクション
400 番台…クライアントによるエラー
500 番台…サーバによるエラー
2) アクション
[133]
[1] 直接メッセージを記述する
例) ErrorDocument
404 “Your request is fault.
メッセージの最初に「"」を記述すること
[2] 表示するファイルを記述する
例) Error Document
401 /error.html
[3] 外部の URL へリダイレクトする
古い Apache のセキュリティホールに対してアタックしてきた人がいた場合に、Apache のサイトへリダ
イレクトして情報を保存する
例) <Location /cgi-bin/phf*>
Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>
Ⅴ-ⅲ. Web サーバへのアクセスコントロール
①Web サーバの接続制限を行う
[136]
[137]
1) httpd.conf において接続制限を行うディレクティブ
・Order
:Allow と Deny の優先順と接続の基本ルールを決める
・Allow
:接続を許可する
・Deny
:接続を拒否する
2) 優先順位 (Order) [138]
・Order
allow,deny
Allow を先に読み込むが、規定値は拒否優先で Deny が明示的に表示されない場合、「Deny from all」を適
用する。
・Order
deny,allow
Deny を先に読み込むが、規定値は接続優先で Allow が明示的に表示されない場合、「Allow from all」を適
用する。
例) 拒否優先
<その 1>
Order deny,allow
Deny from all
Allow from (接続許可先)
<その 2>
Order allow,deny
Allow
from
(接続許可先)
- 14 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
3) 接続許可先の指定方法
指定方法の例
内
容
all
すべて
192.168.0.5
クライアントの IP アドレス
192.168.0.0/24
192.168.0.0~192.168.0.255 のネットワーク
192.168.0.0/255.255.255.0
192.168.0.0~192.168.0.255 のネットワーク
192.168.0
192.168.0.0~192.168.0.255 のネットワーク
domein.co.jp
このドメインを含むホスト名※
※ドメインで指定した場合は、「.」単位でドメインごとの指定が可能。たとえば「com」や「co.jp」でもよいし、
「subdomein.domein.co.jp」のようのなさ部ドメインでもよい。
②パスワード認証(基本認証)を行う
[141]
httpd.conf の基本認証を行いたい<Directory>セクション内に次のディレクティブを記述する
1) 基本認証に使用するディレクティブ
ディレクティブ名
機 能
AuthName
認証する際のパスワード入力ダイアログボックスに表示する文字列
AuthType
認証の種類
AuthUserFile
認証を行うユーザ名 = パスワードのファイル
AuthGroupFile
認証を行うグループのファイル
Require
リソースにアクセスできる認証ユーザ
2) 「AuthName」ディレクティブ
例) AuthName Authentication
AuthName
“Please Enter Your Password.”
AuthName
“パスワードを入力してください”
3) 「AuthType」ディレクティブ
基本認証の場合
AuthType
Basic
4) 「AuthUserFile」ディレクティブ
ユーザ認証を行うユーザとパスワードが記載されたファイルを指定
[1] “/”ではじまると絶対パスになり、そうでなければ「ServerRoot」ディレクティブからの
相対パスになる。
例) <設定> ServerRoot “/usr/local/apache/”
DocumentRoot “/usr/local/apache/htdocs”
↓
AuthUserFile
Passwd/.htpasswd
[2] .htpasswd の記述例
例) Taro:mJa12k6A2
hanako:KLoP568
5) 「AuthGroupFile」ディレクティブ
ユーザ認証を行うユーザの所属するグループを記述する
[1] “/”ではじまると絶対パスになり、そうでなければ「ServerRoot」ディレクティブからの
相対パスになる。
- 15 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
例) AuthGroupFile passwd/.htgroup
[2] .htgroup の記述例
例) groupA:taro
groupB:taro hanako
6) 「Require」ディレクティブ
[1] Require user ユーザ名
認証を求めるユーザが、AuthUserFile に指定されたファイルにあればアクセスでき
る。ユーザ名はスペースで区切って複数記述可能。
[2] Require group グループ名
認証を求めるユーザが、AuthGroupFile に指定されたグループに所属し、かつ AuthUserFile に指定され
たファイルにあればアクセスできる。グループ名はスペースで区切って服す記述可能。
[3] Require valid-user
AuthUserFile に指定されたファイルにあるユーザであればアクセス可能
[4] Require file-owner
AuthUserFile に指定されたファイルにあるユーザで、ファイルの所有者であればアクセス可能。
(Apache1.3.20 以降)
[5] Require file-group
AuthUserFile に指定されたファイルにあるユーザで、ファイルの所有グループに属していることが
AuthGroupFile に記述されていればアクセス可能。
[6] 記述例
AuthUserFile passwd/.htpasswd
AuthGroupFile passwd/.htgroup
↓
・.htpasswd の内容
・.htgroup の内容
taro:mJa4Vld32KSA
groupA:taro
hanako:KLoP235Hyff
groupB:taro hanako
hoge:HjuigT3S4Hk
↓
この場合の記述例
・Require valid-user
「taro」, 「hanako」, 「hoge」 全てアクセス可能
・Require user taro
「taro」 のみアクセス可能
・Require groupA
「taro」, 「hanako」 がアクセス可能
「hoge」 はアクセス不可
③パスワードファイルの編集 [145]
パスワードファイルの作成・編集
→ htpasswd ユーティリティを使用
書式:パスワードファイルを作成
# htpasswd –c パスワードファイル名
書式:パスワードファイルにユーザを作成
- 16 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
# htpasswd
オプリョン
パスワードファイル名
ユーザ名
↓
パスワードの入力を求められる
オプション
暗号化方式
-m
MD5
-s
SHA
-d
crypt()
(規定)
-p
非暗号化
(非推奨)
書式:パスワードの変更
# htpasswd
パスワードファイル名
ユーザ名
Ⅴ-ⅳ.他の Web サーバセキュリティ設定
[161]
①Apache のログファイルの設定 [161]
・access_log :Apache へのアクセスを記録する
・error_log
:エラーを記録する
・referer_log :リンク元を記録する
・agent_log
:ユーザの Web ブラウザ情報を記録する
1) ログ全般にかかわる設定 [163]
HostnameLooksup ディレクティブ
→ 接続元に記載するクライアントをホスト名にするか IP アドレスにするかを指定
HostnameLooksup Off
:IP アドレス
HostnameLooksup On
:ホスト名
※「On」にした場合、ネームサーバへのホスト名解決要求をそのつど送信することになり、多少なりともネットワークや
CPU の負担になる
2)エラーログの設定 [163]
[1] ErrorLog ディレクティブ
ログファイルのパスを指定
“/”で始まると絶対パスになり、そうでなければ ServerRoot ディレクティブからの相対パスになる。
[2] LogLevel ディレクティブ
名 前
意 味
emerg
緊急事態
alert
緊急に修正する状態のメッセージ
crit
致命的な状態のメッセージ
error
通常のエラーメッセージ
warn
警告メッセージ
notice
特別な処理が必要なメッセージ
info
情報メッセージ
debug
デバッグメッセージ
※上から優先順位が高い
3) アクセスログなどの設定
[164]
- 17 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
access_log, refere_log, agent_log の設定方法はほぼ同じ
次の 2 つのディレクティブで 1 セット
例) LogFormat “%h %l %u %t ¥”%r¥ %>s
CustomLog
logs/access_log
common
書式:LogFormat ディレクティブ
LogFormat “書式”
エイリアス名
[1] 書式 (フォーマット文字)
・%h
:接続元
・%l
:接続もとの identd
・%u
:ユーザ ID (認証された場合のみ)
・%t
:リクエストの処理を終えた時刻
・%r
:接続元からのリクエスト
・%>s
:サーバからのステータスコード
・%b
:オブジェクトのサイズ (応答ベダを除く)
・%{Referer}:参照されたサイト(リンク元など)
・%{User-agent}:クライアントのブラウザ情報
[2] エイリアス名
・common
・referer
・agent
・combined
:通常のアクセスログ
:Referer 情報のログ
:User-agent 情報のログ
:common + referer + agent
Ⅵ.FTP サーバのセキュリティ
Ⅵ-ⅰ. FTP サーバの ACL 設定を行う [178]
① /etc/ftpaccess でユーザの制御を行う
1) 設定項目
[1] ユーザ単位
・deny-uid
:拒否
・allow-uid
:許可
[2] グループ単位
・deny-gid
:拒否
・allow-gid
:許可
[177]
[180]
2) 書式
書式:ユーザ制御の書式
・deny-uid
ユーザ名
・deny-gid
ユーザ名
・allow-uid
ユーザ名
・allow-gid
ユーザ名
deny は allow より先に処理される。
ユーザ名またはグループ名は UID, GID でも記述可
→ この場合、数値の前に[%]
複数入力はスペースで区切る
「-」で区切ると範囲の指定
例) %-99
:99 以下
- 18 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
%65535%10-%100
:65535 以上
:10~100
3) 記述例
[1] Linux の全ての特権ユーザや特殊ユーザを FTP で拒否する場合
deny-gid %-99 %65535deny-uid %-99 %65535[2] FTP 接続を許可するユーザの uid を 500 番台。そのうち 500~549 まではゲストユーザとしたい場合
deny-uid
allow-uid
gestuser
realuser
*
%500-%599
*
%550-
② /etc/ftpusers でアクセスできないアカウントを指定する
/etc/ftpusers
→ アクセスできないアカウントを設定する
[182]
③ファイルごとに接続制限する [183]
1) ファイルのダウロード制限
→ /etc/ftpaccess
noretrieve
:ダウンロード拒否
allow-retrieve :ダウンロード許可
書式:ファイルごとの制限
・noretrieve
ファイル名 [class=クラス]
・allow-retrieve
ファイル名 [class=クラス]
2) ファイル名指定の例
・/etc/passwd :/etc/passwd が指定される。ほかのディレクトリにある passwd は指定されない
・passwd
:全てのディレクトリにある passwd が対象になる
:/etc 以下のファイルが全て対象になる
・/etc
・/home/*/passwd:/home ディレクトリ以下の passwd が対象となる
3) 制限されたファイル
制限されたファイルをダウンロードしようとすると次が表示される
550 /etc/passwd is marked unretrievable
④接続元での接続制限を行う [184]
1) /etc/ftphosts の設定
書式:接続元で接続制限を行う
・allow ユーザ名 接続元アドレス
・deny ユーザ名 接続元アドレス
例) deny * *
allow taro 192.168.0.0/24 localhost
allow hanako localhost
→ 基本的にはどこからもアクセスしてはいけないが、ユーザ「taro」の場合は
192.168.0.0~192.168.0.255 のネットワークとローカルホストからの接続は許
可し、「hanako」の場合はローカルホストからの接続のみが許可される
- 19 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
2) /etc/ftpaccess の deny 設定
→ 接続制限を行う設定項目のひとつ
書式:deny による接続拒否設定
deny
接続元アドレス メッセージファイル名
接続を拒否するとともに、指定したメッセージファイルを表示することができる。
Ⅵ-ⅱ.匿名 FTP サービス
[186]
①匿名 FTP サービスの注意事項 [186]
1) 匿名アクセス者の移動できるディレクトリを制限する
2) アップロードはできないようにする
3) 利用できるコマンドを制限する
②匿名 FTP でディレクトリを制限する
[187]
/etc/ftpaccess 内の項目
書式:anonymous-root
anonymous-rootdeny
ディレクトリ[クラス]
ディレクトリは匿名 FTP ユーザがアクセスできるディレクトリを記述
この項目の設定がない場合、/etc/passwd に記述されたユーザ「ftp」のホームディレクトリが有効
③ファイルのアップロードができないようにする [187]
/etc/ftpaccess 内の項目
・upload
例) upload /var/ftp no
→ /var/ftp ディレクトリを制限する
※匿名 FTP のルートディレクトリのパーミッションを書き込み不許可にしておく
④コマンドを利用できないようにする [188]
P173 で行ったコマンドを制限する方法を使う
chmod
no anonymous
delete
no anonymous
overwrite no anonymous
rename
no anonymous
⑤匿名 FTP ユーザのパスワードをチェックする
1) /etc/ftpaccess 内の項目
[188]
書式:passwd-check
passwd-check
チェック方法
動作
2) チェック方法
・none
:パスワードをチェックしない
・trivial :「@」が含まれているかをチェックする
・rgc822 :RFC822 に適合したメールアドレスであることをチェックする
3) 動作
・warn
:警告はするがログインを許可する
- 20 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.
・enforce :警告し、ログアウトさせる
4) 基本設定
passwd-check
rfc822
enforce
- 21 CCCopyright(C) 2008 HIDEKAZU@kimagure All Rights Reserved.