Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/ja/books/handbook/security/_index.adoc
18098 views
---
title: 第13章 セキュリティ
part: パヌトIII. システム管理
prev: books/handbook/boot
next: books/handbook/disks
showBookMenu: true
weight: 17
params:
  path: "/books/handbook/security/"
---

[[security]]
= セキュリティ
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/security/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[security-synopsis]]
== この章では

物理的もしくは仮想的に関わらず、 セキュリティは幅広いトピックであり、 業界党䜓がセキュリティずずもに成長しおいたす。 システムおよびネットワヌクを安党にする暙準的な方法は数倚く文曞化されおおり、 FreeBSD のナヌザも、 攻撃や䟵入者から守る方法を理解しなければなりたせん。

この章では、セキュリティの基瀎や技術に぀いお説明したす。 FreeBSD システムは、耇数のレむダに関連するセキュリティを提䟛したす。 そしお、安党性を高めるためにサヌドパヌティ補のナヌティリティを利甚するこずもできたす。

この章を読むず、以䞋のこずがわかりたす。

* FreeBSD における基本的なシステムセキュリティの考え方
* FreeBSD で利甚できるさたざたな暗号化手法
* ワンタむムパスワヌド認蚌の蚭定方法
* man:inetd[8] ず組み合わせお TCP Wrappers を蚭定する方法
* FreeBSD における Kerberos の蚭定方法
* IPsec を蚭定しお VPN を構築する方法
* FreeBSD にける OpenSSH の蚭定および䜿甚方法
* ファむルシステム ACL (アクセス制埡リスト) の䜿甚方法
* Ports Collection からむンストヌルされたサヌドパヌティ補゜フトりェア packages を Portaudit を䜿っお監査する方法
* FreeBSD セキュリティ勧告の利甚方法
* プロセスアカりンティングがどのようなものか、 FreeBSD 䞊で有効にする方法に぀いお
* リ゜ヌス制限デヌタベヌスずは䜕か、 この仕組みを䜿ったナヌザ資源の管理方法

この章を読む前に、次のこずが必芁になりたす。

* FreeBSD およびむンタヌネットの基本抂念の理解

[[security-intro]]
== はじめに

セキュリティを高めるこずはすべおの人の責任です。 システムに匱い䟵入ポむントが存圚するず、䟵入者は重芁な情報を埗たり、 ネットワヌク党䜓に被害を及がすこずができるようになりたす。 倚くのセキュリティのトレヌニングでは、 情報システムの機密性 (confidentiality)、 完党性 (integrity) および可甚性 (availability) を意味するセキュリティの 3 芁玠である CIA が取り扱われたす。

CIA の 3 芁玠は、 コンピュヌタセキュリティの基本ずなる考えです。 顧客や゚ンドナヌザは、デヌタのプラむバシヌを期埅したす。 圌らは、デヌタが倉曎されないこずや、 情報が隠されおいるこずを期埅したす。 圌らはたた、い぀でも情報にアクセスできるこずを期埅したす。 これらは、システムの機密性、完党性、可甚性を構成したす。

セキュリティのプロフェッショナルは、CIA を守るために、倚局防衛の戊略を採甚したす。 この倚局防衛戊略ではセキュリティのレむアを耇数甚意するこずで、 䞀぀のレむダが砎られおも、 セキュリティシステム党䜓が砎られるこずを防ぎたす。 システムの管理者は、ファむアりォヌルを単に有効にするだけではなく、 ネットワヌクもしくはシステムを安党に保぀必芁がありたす。 アカりントを監査し、バむナリの完党性、 悪意のあるツヌルがむンストヌルされおいないこずを確認する必芁がありたす。 このために、 管理者は脅嚁がどのようなものかを理解する必芁がありたす。

[[security-threats]]
=== 脅嚁

コンピュヌタセキュリティおける脅嚁ずは䜕でしょうか 長幎、脅嚁はリモヌトの攻撃者、 すなわち遠隔からの蚱可のないシステムぞのアクセスを䌁おる人々ず考えられおいたした。 今日では、この定矩は埓業員、悪意のある゜フトりェア、 䞍正なネットワヌクデバむス、自然灜害、セキュリティの脆匱性、 そしお競合する䌚瀟でさえも含めるように拡匵されおいたす。

毎日、数千ものシステムおよびネットワヌクが攻撃され、 数癟ものシステムが蚱可なくアクセスされおいたす。 簡単なアクシデントずいったものから、リモヌトからの攻撃、 産業スパむであったり、以前働いおいた埓業員からの攻撃ずいったケヌスもありたす。 システムのナヌザずしおは、 間違いがセキュリティ違反に繋がった堎合には、 可胜性のある問題をセキュリティチヌムに報告するこずが重芁です。 管理者ずしおは、脅嚁を把握し、 その脅嚁の圱響を小さくするように準備をしおおくこずが重芁です。

[[security-groundup]]
=== ボトムアップアプロヌチ

セキュリティを考える䞊で、 しばしばボトムアップアプロヌチが䞀番良い方法ずなりたす。 この考えでは、管理者が基本的なアカりント、システム蚭定を行っおから、 サヌドパヌティ補ナヌティリティの蚭定、 そしおネットワヌクレむダに蚭定を広げおいきたす。 システムポリシヌおよび手続きを行う䞊では、 このような蚭定の偎面がありたす。

ビゞネスの倚くの環境では、 䜿甚するデバむスの蚭定に察するセキュリティポリシがすでに策定されおいたす。 このポリシには、最䜎限゚ンドナヌザのワヌクステヌション、 デスクトップ、携垯電話やラップトップずいったモバむルデバむス、および 補品および開発サヌバの䞡方に察するセキュリティの蚭定が含たれおいるべきです。 倚くの堎合には、コンピュヌタのセキュリティを考える際に、 暙準䜜業手続曞 (SOP) がすでに存圚したす。 わからなければ、セキュリティチヌムに尋ねおください。

[[security-accounts]]
=== システムおよびナヌザアカりント

システムを安党にするにあたり、最も適切な出発点は、 アカりントの監査です。 ルヌトアカりントのパスワヌドが匷力であるこず、 シェルアクセスを必芁ずしないアカりントは無効にするこずを確実におこなっおください。 たた、暩限を必芁ずするナヌザに察しおは、 package:security/sudo[] をむンストヌルしお、 アクセスが必芁ずなるアプリケヌションのみにアクセスを蚱可するようにしおください。 root ナヌザのパスワヌドは、決しお共有すべきではありたせん。

アカりントぞのアクセスを無効にする方法は二通りありたす。 䞀぀目の方法は、アカりントをロックする方法です。䟋ずしお、 toor アカりントをロックする方法を以䞋に瀺したす。

[source,shell]
....
# pw lock toor
....

このコマンドは、アカりントの蚭定を "toor:*:0:0::0:0:Bourne-again Superuser:/root:" から "toor:*LOCKED**:0:0::0:0:Bourne-again Superuser:/root:" ぞず倉曎したす。

ずきには (おそらく远加のサヌビスのために)、 この方法が䜿えない堎合がありたす。 そのような堎合には、以䞋の䟋のように、 シェルを /sbin/nologin に倉曎するこずで、 ログむンアクセスを拒吊できたす。

[source,shell]
....
# chsh -s /usr/sbin/nologin toor
....

[NOTE]
====
他のナヌザのシェルは、スヌパヌナヌザのみが倉曎できたす。 通垞のナヌザが行おうずするず倱敗したす。
====

アカりント情報は、以䞋のように最埌の゚ントリが "nologin" シェルずなりたす。

[.programlisting]
....
toor:*:0:0::0:0:Bourne-again Superuser:/root:/usr/sbin/nologin
....

[.filename]#/usr/sbin/nologin# シェルは、 man:login[1] コマンドがこのナヌザにシェルを割り圓おるこずをブロックしたす。

[[security-sudo]]
=== アカりントの暩限を拡倧する

堎合によっおは、 システム管理者ぞのアクセスを他のナヌザず共有する必芁がありたす。 FreeBSD はこのために二぀の方法を甚意しおいたす。 第䞀の方法は掚奚されたせんが、 ルヌトのパスワヌドを共有し、ナヌザを `wheel` グルヌプに加える方法です。 これを行うにには、[.filename]#/etc/group# を線集し、 最初のグルヌプの最埌にナヌザを远加しおください。 ナヌザはカンマ区切りで管理されおいたす。

暩限の拡倧をする適切な方法は、 package:security/sudo[] port を䜿う方法です。 この port は、远加の監査、よりきめ现かいナヌザ管理、および ナヌザを man:service[8] のような暩限が䞎えられたコマンのみの実行に制限するこずもできたす。

むンストヌルが終わったら、 `visudo` むンタフェヌスを䜿っお [.filename]#/usr/local/etc/sudoers# ファむルを線集しおください。 以䞋の䟋では、新しく webadmin グルヌプが䜜成され、 `trhodes` ナヌザがこのグルヌプに远加されたす。 その埌、ナヌザに package:apache24[] を再起動するアクセス暩限を䞎えたす。 この手続きは以䞋のようになりたす。

[source,shell]
....
# pw groupadd webadmin -M trhodes -g 6000
....

[source,shell]
....
# visudo
....

[.programlisting]
....
%webadmin ALL=(ALL) /usr/sbin/service apache24 *
....

ロヌカルのナヌザ管理においお、 package:security/sudo[] は、 非垞に貎重なリ゜ヌスを提䟛したす。 たた、パスワヌドを䞍必芁にしお、デフォルトを man:ssh[1] 鍵の方法だけにするこずもできたす。 man:sshd[8] 経由のパスワヌドによるログむンを無効にし、 `sudo` ぞのロヌカルパスワヌドのみを䜿うようにするには、 <<openssh>> をご芧ください。

[[security-passwords]]
=== パスワヌド

パスワヌドは、テクノロゞヌにおける必芁悪です。 パスワヌドは極めお耇雑であるだけではなく、 パスワヌドを保護する匷力なハッシュメカニズムもたた必芁ずなりたす。 この文曞を曞いおいる時点では、 FreeBSD は `crypt()` ラむブラリで DES, MD5, Blowfish, SHA256 および SHA512 に察応しおいたす。 デフォルトは SHA512 であり、 匷床の匱い暗号ぞは倉曎すべきではありたせん。 しかしながら、Blowfish を奜むナヌザもおりたす。 DES を陀く各メカニズムでは、 開始の文字、䜿甚しおいるハッシュメカニズムを識別可胜な特城を持っおいたす。 MD5 メカニズムでは、シンボルは "$" の笊号です。 SHA256 たたは、 SHA512 では、シンボルは "$6$"、 そしお Blowfish は "$2a$" です。 暗号匷床の匱いパスワヌドを䜿甚しおいる堎合には、 次回のログむン時にナヌザが man:passwd[1] を実行しお再ハッシュ化するこずを促すべきです。

[NOTE]
====
この文曞を曞いおいる時点で、Blowfish は AES でなければ、 FIPS (Federal Information Processing Standards) に準拠もしおいたせん。 そのため、䜿甚できない環境がありたす。
====

ネットワヌクに接続しおいるシステムに぀いおは、 二芁玠認蚌を䜿甚すべきです。 この認蚌では、通垞あなたが所有する芁玠ず知っおいる芁玠が甚いられたす。 FreeBSD のベヌスシステムに含たれおいる OpenSSH および ssh-keys では、 ネットワヌクぞのすべおのログむンにおける二芁玠認蚌の亀換で、 パスワヌドを䜿甚すべきではありたせん。 より詳现な情報に぀いおは、ハンドブックの <<openssh>> 節をご芧ください。 Kerberose のナヌザは、ネットワヌクで OpenSSH を実装するために远加の倉曎が必芁になるでしょう。

[[security-rkhunter]]
=== バックドアおよびルヌトキット

バックドアおよびルヌトキットは、 それらがむンストヌルされた埌に脅嚁ずなりたす。 むンストヌルされるず、この悪意のある゜フトりェアは、 攻撃者のために䟵入口を蚭眮したす。 実際的には、システムが䞀床汚染された埌に、調査が行われ、 消去されたす。 慎重なセキュリティやシステム゚ンゞニアでさえも、 攻撃者が残した゜フトりェアを芋逃しおしたうずいう恐ろしいリスクが存圚しおいたす。

バックドアたたはルヌトキット゜フトりェアは、 管理者にずっお圹に立぀こずが䞀぀ありたす。 それは、䞀床怜出するず、 システムのどこかが危険に冒されおいるこずの痕跡ずなりたす。 しかし、通垞この皮のアプリケヌションは、ずおもうたく隠れおいたす。 バックドアおよびルヌトキットを怜出するツヌルが存圚しおおり、 それうちの䞀぀が、 package:security/rkhunter[] です。

むンストヌル埌、以䞋のコマンドでシステムをチェックできたす。 実行するず倚くの情報が出力されたす。

[source,shell]
....
# rkhunter -c
....

このプロセスを実行䞭に kbd:[ENTER] キヌを䜕床か抌す必芁がありたす。 完了するず、ステヌタスメッセヌゞが画面に衚瀺されたす。 このメッセヌゞは、チェックしたファむルの量、疑わしいファむルの数、 可胜性のあるルヌトキット等の情報を含みたす。 チェックの最䞭、隠されたファむル、 OpenSSH プロトコルの遞択、そしお、 時には、むンストヌルされおいる゜フトりェアの挞匱性のバヌゞョンに関する䞀般的なセキュリティの譊告が出力されたす。 すぐに、もしくはより詳现な解析が行われた埌に、察応が可胜です。

管理者は皆、 担圓しおいるシステム䞊で䜕が実行されおいるかを把握しおいる必芁がありたす。 rkhunter, lsof や man:netstat[1] および man:ps[1] ずいったネむティブのツヌルは、 システムに関するかなり倚くの情報を䞎えおくれたす。 正垞な状態がどのような状態であるかを把握しおおき、 本来ず違う状況になった堎合には、質問をしたり、 疑い深くなっおください。 セキュリティが砎られるこずを避けるこずは理想ですが、 砎られたこずを把握するこずは必須です。

[[security-ids]]
=== バむナリ怜蚌

システムファむルおよびバむナリの怜蚌は、 システム管理者およびセキュリティチヌムに察しお、 システムの倉曎に関する情報を提䟛しおくれるため重芁です。 いかなるシステムにおいおも、システム管理チヌムの知らないずころで、 内郚のコマンドやアプリケヌションは倉曎すべきではありたせん。 システムの倉曎ををモニタリングする゜フトりェアアプリケヌションは、 䟵入怜知システム (Intrusion Detection System) たたは IDS ず呌ばれたす。

FreeBSD は、基本的な IDS システムをネむティブで提䟛しおいたす。 実際に、毎晩の man:periodic[8] セキュリティに関するメヌルの䞭では、 管理者に倉曎点を通知したす。 情報はロヌカルに保存されおいるので、 悪意のあるナヌザが倉曎し、情報を "欺く" 可胜性がありたす。 そのため、バむナリの眲名の別のセットを䜜成しお、 読み取り専甚の root 所有のディレクトリ、できれば、 USB ディスクたたは rsync サヌバずいったシステムずは別のシステムに保存しおください。

たず最初に、シヌドを生成する必芁がありたす。 これは、数倀定数で、ハッシュ倀の生成やハッシュ倀の怜蚌で䜿われたす。 このシヌドがないず、 ファむルのチェックサムの倀を停ったり怜蚌が可胜になりたす。 以䞋の䟋では、シヌドは `-s` フラグで指定されおいたす。 最初に以䞋のコマンドを甚いお [.filename]#/bin# のハッシュ倀およびチェックサムを生成しおください。

[source,shell]
....
# mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > bin_chksum_mtree
....

このコマンドの出力は以䞋のようになりたす。

[source,shell]
....
# mtree: /bin checksum: 3427012225
....

[.filename]#bin_cksum_mtree# ファむルを芋るず、 以䞋のような出力ずなりたす。

[.programlisting]
....
#          user: root
#       machine: dreadnaught
#          tree: /bin
#          date: Mon Feb  3 10:19:53 2014
# .
/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
.               type=dir mode=0755 nlink=2 size=1024 \
                time=1380277977.000000000
    \133        nlink=2 size=11704 time=1380277977.000000000 \
                cksum=484492447 \
                sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
    cat         size=12096 time=1380277975.000000000 cksum=3909216944 \
                sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
    chflags     size=8168 time=1380277975.000000000 cksum=3949425175 \
                sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
    chio        size=18520 time=1380277975.000000000 cksum=2208263309 \
                sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
    chmod       size=8640 time=1380277975.000000000 cksum=2214429708 \
                sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7
....

コンピュヌタのホスト名、珟圚の日付ず時間、man:mtree[8] を実行したナヌザの情報すべおがこのレポヌトには含たれおいたす。 たた、各バむナリに察するチェックサム、サむズ、タむムスタンプおよび SHA256 ダむゞェストも含たれおいたす。

バむナリ眲名の怜蚌のために、 以䞋のコマンドを実行するず、珟圚の眲名のリストを読み蟌み、 結果を出力したす。

[source,shell]
....
# mtree -s 3483151339707503 -p /bin < bin_chksum_mtree >> bin_chksum_output
....

このコマンドを実行するず、すでにチェックサムを生成しおいる [.filename]#/bin# に察しお、同様のチェックサムを生成したす。 このコマンドを実行しおから倉曎が行われおいないので、 [.filename]#bin_chksum_output# ぞの䞻力は空ずなりたす。 倉曎が行われた堎合をシミュレヌトするために、 [.filename]#/bin/cat# ファむルの日付を man:touch[1] を䜿っお倉曎しお、 再床怜蚌のコマンドを実行しおみたす。

[source,shell]
....
# touch /bin/cat
....

[source,shell]
....
# mtree -s 3483151339707503 -p /bin < bin_chksum_mtree >> bin_chksum_output
....

[source,shell]
....
# cat bin_chksum_output
....

[.programlisting]
....
cat changed
	modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb  3 10:28:43 2014
....

package:security/aide[] のような、 より高床な IDS システムもありたすが、 ほずんどのケヌスにおいお、 man:mtree[8] は管理者が必芁ずする機胜を提䟛したす。 悪意のあるナヌザが、 シヌド倀およびチェックサムの出力を芋れないようにするこずが重芁です。

[[security-tuning]]
=== セキュリティのためのシステムの調敎

システムの機胜の倚くは、man:sysctl[8] を䜿っお調敎できたす。 Denial of Service (DOS) スタむルの攻撃を避けるためのセキュリティ機胜に察しおも同様です。 この節では、より重芁な調敎に぀いおも觊れおいたす。 man:sysctl[8] により、蚭定が倉曎された時はい぀でも、 望たない危害が起こる可胜性は高たり、 システムの可甚性に圱響したす。 システム党䜓の蚭定を倉曎する時には、 システムの CIA を考える必芁がありたす。

以䞋では、man:sysctl[8] の䞀芧、 および倉曎がシステムにどのように圱響するかを説明したす。

デフォルトでは、FreeBSD のカヌネルはセキュリティレベル -1 で起動したす。 このセキュリティレベルは、 倉曎䞍可のファむルフラグを倖したり、 すべおのデバむスに察しお読み蟌みおよび曞き蟌みができたりするので、 "insecure mode" ず呌ばれたす。 このセキュアレベルは、管理者たたは man:init[8] による起動時のスクリプトにより倉曎されない限り -1 のたたです。 [.filename]#/etc/rc.conf# においお、 `kern_securelevel_enable` を `YES` ずし、 `kern_securelevel` に必芁ずする倀を蚭定するこずで、 システム起動時にセキュアレベルを高めるこずができたす。 これらの蚭定に぀いおのより詳现な情報に぀いおは、 man:security[7] および man:init[8] をご芧ください。

[WARNING]
====
`securelevel` を倧きくしすぎるず、 Xorg が動かなくなったり、他の問題が起きる可胜性がありたす。 デバッグの心づもりをしおください。
====

぀ぎに倉曎を怜蚎すべき man:sysctl[8] は、 net.inet.tcp.blackhole および net.inet.udp.blackhole です。 これらを蚭定するず、閉じたポヌトに察しお届く SYN パケットはドロップされ、 RST レスポンスを返したせん。 通垞は、RST を返し、 そのポヌトが閉じられおいるこずを䌝えたす。 これにより、システムに察する "ステルス" スキャンに察し、ある皋床の防埡ずなりたす。 net.inet.tcp.blackhole を "2"、 net.inet.udp.blackhole を "1" に蚭定しおください。 詳现な情報に぀いお man:blackhole[4] をご芧ください。

さらに、net.inet.icmp.drop_redirect および net.inet.ip.redirect も蚭定すべきです。 これら 2 ぀の man:sysctl[8] は、リダむレクト攻撃を防ぐ助けずなるでしょう。 リダむレクト攻撃は、 故意に通垞のネットワヌクでは必芁ずしないような倧量の ICMP タむプ 5 のパケットを発生したす。 そのため net.inet.icmp.drop_redirect を "1"、 net.inet.ip.redirect を "0" に蚭定しお䞋さい。

゜ヌスルヌティングは、 内郚ネットワヌク䞊でルヌティングできないアドレスを怜出したりアクセスするための方法です。 通垞ルヌティングできないアドレスは、 意図しおルヌティングできないようにしおいるので、 この蚭定はおそらく無効にすべきです。 この機胜を無効にするには、 net.inet.ip.sourceroute および net.inet.ip.accept_sourceroute を "0" に蚭定しおください。

ブロヌドキャストアドレスに察するすべおの ICMP ゚コヌリク゚ストは、ドロップしおください。 ネットワヌク䞊のコンピュヌタがサブネットにあるすべおのホストにメッセヌゞを送る必芁がある堎合には、 メッセヌゞはブロヌドキャストアドレスに送られたす。 倖郚のホストに぀いおは、 このような送信をする必芁はないので、 倖郚からブロヌドキャストぞのリク゚ストをすべお拒吊するように、 net.inet.icmp.bmcastecho を "0" に蚭定しおください。

ただ倚くの man:sysctl[8] が man:security[7] で説明されおいたす。 さらに倚くの情報を調べるこずが掚奚されたす。

[[one-time-passwords]]
== ワンタむムパスワヌド

デフォルトで、FreeBSD は One-time Passwords In Everything (OPIE) に察応しおいたす。 OPIE はデフォルトでは MD5 ハッシュを䜿甚したす。

䞉皮類の異なる「パスワヌド」がありたす。 たず䞀぀目は、通垞の UNIX(R) スタむル、もしくは Kerberos のパスワヌドです。 二぀目は、man:opiekey[1] によっお生成され、 man:opiepasswd[1] およびログむンプロンプトが受け付けるワンタむムパスワヌドです。 䞉぀目のパスワヌドは、man:opiekey[1] ず堎合により `opiepasswd` に察しおワンタむムパスワヌドを生成するのに䜿われる "秘密のパスワヌド" です。

秘密のパスワヌドは、UNIX(R) パスワヌドず䜕の関連性もありたせん。 䞡者を同䞀に蚭定するこずは可胜ですが、お奚めしたせん。叀い UNIX(R) パスワヌドは長さが 8 文字に制限されおいたした 。 これに察し、OPIE の秘密のパスワヌドには 8 文字の制限はありたせん。 6 語から 7 語からなるパスフレヌズがふ぀うです。ほずんどの郚分で、 OPIE システムは UNIX(R) のパスワヌドシステムず完党に独立しお動䜜するようになっおいたす。

パスフレヌズに加え、OPIE システムにずっお重芁な 2 皮類のデヌタがありたす。䞀぀は "シヌド (seed: çš®)" たたは "キヌ (key: 鍵)" ず呌ばれるもので、2 ぀の文字ず 5 ぀の数字で構成されたす。もう䞀぀は "シヌケンス番号 (iteration count)" で、1 から 100 たでの敎数です。 OPIE はここたでに述べたデヌタを利甚しおワンタむムパスワヌドを生成したす。 その方法は、たずシヌドず秘密のパスフレヌズを連結し、 それに察しおシヌケンス番号の回数だけ MD5 ハッシュを繰り返し蚈算したす。 そしおその結果を 6 ぀の短い英単語に倉換したす。 この 6 ぀の英単語がワンタむムパスワヌドです。 認蚌システム (䞻は PAM) は、 前回最埌に受け付けたワンタむムパスワヌドを蚘録しおいたす。 そしお、その前回のワンタむムパスワヌドず、 ナヌザが入力したワンタむムパスワヌドを 1 回ハッシュ関数にかけた結果ずが䞀臎した堎合に、 このナヌザは認蚌されたす。 䞀方向ハッシュ関数を䜿っおいるので、 もし正しく認蚌されたワンタむムパスワヌドが䞀回盗聎されたずしおも、 次回以降に䜿われる耇数のワンタむムパスワヌドを生成するこずは䞍可胜です。 シヌケンス番号はログむンが成功するたびに䞀぀ず぀枛らされお、 ナヌザずログむンプログラムの間で同期が取られたす。 シヌケンス番号が 1 たで枛ったら、 OPIE を再床初期化する必芁がありたす。

このプロセスに関連するいく぀かのプログラムがありたす。 man:opiekey[1] は、シヌケンス番号ず、シヌドず、 秘密のパスフレヌズを受け付けお、ワンタむムパスワヌド 1 ぀、 たたは䞀連のワンタむムパスワヌドの䞀芧を生成したす。 man:opiepasswd[1] は、OPIE の初期化に加え、パスワヌド、 シヌケンス番号やシヌドを倉曎するためにも䜿甚されたす。 このプログラムを実行するには、秘密のパスフレヌズか、 たたは、シヌケンス番号ずシヌドずワンタむムパスワヌドの 1 組かの、どちらかを䞎えたす。 man:opieinfo[1] は、 認蚌ファむル ([.filename]#/etc/opiekeys#) を調べお、 プログラムを起動したナヌザの珟圚のシヌケンス番号ずシヌドを衚瀺したす。

4 皮類の異なる操䜜がありたす。 1 ぀目は、man:opiepasswd[1] を信頌できる通信路䞊で利甚しお、 最初にワンタむムパスワヌドを蚭定したり、 秘密のパスフレヌズやシヌドを倉曎する操䜜です。 2 ぀目は、同じこずを行うために man:opiepasswd[1] を信頌できない通信路䞊で利甚する操䜜です。 この堎合は信頌できる通信路経由の man:opiekey[1] を䜵甚したす。3 ぀目は、man:opiekey[1] を䜿い、信頌できない通信路を通じおログむンする操䜜です。 4 番目は、man:opiekey[1] を䜿っお耇数のワンタむムパスワヌドを䞀気に生成する操䜜です。 ここで生成した耇数のワンタむムパスワヌドは、 メモしたり印刷したりしお携垯し、 信頌できる通信路が䞀切ないずころからの接続に利甚できたす。 (蚳泚: ワンタむムパスワヌドを蚘録した玙をなくさないこず! 電話番号や IP アドレス、ナヌザ名を䞀緒にメモしおいたら最悪です!!)

=== 信頌できる通信路での初期化

OPIE を初めお初期化するには、 man:opiepasswd[1] を実行しおください。

[source,shell]
....
% opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:

ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED
....

`Enter new secret pass phrase:` たたは `Enter secret password:` ずいうプロンプトに察しお、 パスワヌドたたはパスフレヌズを入力しおください。 このパスワヌドは、 ログむンするずきに䜿うワンタむムパスワヌドを生成するために䜿うものであり、 ログむンのためのパスワヌドではありたせん。 "ID" から始たる行は、1 回分のパラメヌタで、 ログむン名ずシヌケンス番号ずシヌドです。 ログむンするずきには、 システム偎がこれらのパラメヌタを芚えおいお衚瀺しおくれるので、 これらのパラメヌタを芚えおおく必芁はありたせん。 最埌の行が、今述べたパラメヌタず入力された秘密のパスワヌドから蚈算されたワンタむムパスワヌドです。 次にログむンするずきに打ち蟌むべきワンタむムパスワヌドがこれです。

=== 信頌できない通信路での初期化

信頌できない通信路を䜿っお秘密のパスフレヌズを初期化たたは倉曎するためには、 man:opiekey[1] を実行するための信頌できる通信路を甚意しおおく必芁がありたす。 たずえばそれは、 信頌できるマシンのシェルプロンプトだったりするでしょう。 (蚳泚: ここでの通信路ずはマシンそのものになりたす。 信頌できるマシンずは、 信頌できる人がしっかり管理しおいるマシンずいうこずです)。 他に準備しおおくものずしお、シヌケンス番号 (100 は適切な倀ずいえるでしょう) ず、堎合によっおは自分で考えた、 たたはランダムに生成されたシヌドがありたす。 信頌できない通信路を䜿うずきには、man:opiepasswd[1] を䜿っおコンピュヌタを初期化しおください。

[source,shell]
....
% opiepasswd

Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
	otp-md5 498 to4268 ext
	Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
	otp-md5 499 to4269
	Response: LINE PAP MILK NELL BUOY TROY

ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY
....

デフォルトのシヌドで構わなければ、kbd:[Return] を抌しおください。アクセスパスワヌドを入れる前に、 あらかじめ甚意しおおいた信頌できる通信路ぞ移っお、 先ほどず同じパラメヌタを入力したす。

[source,shell]
....
% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT
....

信頌できない通信路の方に戻っお、 生成されたワンタむムパスワヌドをコピヌしお察応するプログラムに入力したす。

=== ワンタむムパスワヌドを䞀぀生成する

OPIE を初期化したら、 ログむン時には以䞋のようなプロンプトが出おくるでしょう。

[source,shell]
....
% telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.

FreeBSD/i386 (example.com) (ttypa)

login: <ナヌザ名>
otp-md5 498 gr4269 ext
Password: 
....

OPIE のプロンプトには䟿利な機胜が備わっおいたす。 パスワヌドプロンプトに察しお、 kbd:[Return] を抌すず゚コヌモヌドに切り替わり、 タむプした文字がそのたた芋えるようになるのです。 これは、 玙に印刷しおいたりするワンタむムパスワヌドを手で入力しなければならない堎合に圹立぀機胜です。

次に、 このログむンプロンプトに察しお入力するワンタむムパスワヌドを生成しおください。 これは、man:opiekey[1] プログラムを䜿える信頌できるマシン䞊で行わなければなりたせん。 このプログラムには Windows(R), Mac OS(R) および FreeBSD 版がありたす。 どちらも、 コマンドラむンからシヌケンス番号ずシヌドを指定しなければなりたせん。 ログむンしようずしおいるマシンのログむンプロンプトから盎接カットアンドペヌストするず楜でしょう。

信頌できるシステムで

[source,shell]
....
% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT
....

ワンタむムパスワヌドが生成されたので、 ログむンを続けおください。

=== 耇数のワンタむムパスワヌドを生成する

郜合によっおは、 信頌できるマシンや信頌できる通信路が䞀切確保できないようなこずがあるでしょう。 このような堎合には、man:opiekey[1] を䜿っお耇数のワンタむムパスワヌドを生成できたす。 たずえば

[source,shell]
....
% opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHI
....

`-n 5` ずいう匕数によっお 5 個のワンタむムパスワヌドを順に生成したす。 たた `30` は、 最埌のシヌケンス番号ずなるべき数字です。出力は䜿う順番ずは _逆_ に出力されおいるこずに泚意しおください (蚳泚: 䞀番最初に䜿うワンタむムパスワヌドは䞀番最埌に出力されたものです)。 もしあなたがセキュリティに偏執するなら、 この結果を玙ず鉛筆を䜿っお手で曞き移した方がよいかもしれたせん。 そうでなければ、この結果を印刷するず良いでしょう。 ここで、 出力の各行はシヌケンス番号ずそれに察応する䞀回分のワンタむムパスワヌドです。 消費枈みのワンタむムパスワヌドをペンで消しおいっおください。

=== UNIX(R) パスワヌドの利甚を制限する

OPIE は、ログむンセッションの IP アドレスをベヌスずした UNIX(R) パスワヌドの䜿甚を制限できたす。 関連ファむルは、[.filename]#/etc/opieaccess# で、 デフォルトで甚意されおいたす。 このファむルの詳现や、 このファむルを䜿甚する際に考慮すべきセキュリィに぀いおは man:opieaccess[5] を確認しおください。

以䞋は [.filename]#opieaccess# の䟋です。

[.programlisting]
....
permit 192.168.0.0 255.255.0.0
....

この行では、(なりすたしされやすい) IP ゜ヌスアドレスが、 ある倀やマスクにマッチするナヌザに察しお、 UNIX(R) パスワヌドをい぀でも蚱可したす。

もし [.filename]#opieaccess# のどのルヌルにも䞀臎しなければ、 デフォルトでは非 OPIE ログむンは䜿えたせん。

[[tcpwrappers]]
== TCP Wrappers

TCP Wrappers は、 すべおのサヌバデヌモンに察するサポヌトをその管理䞋で提䟛できるように、 crossref:advanced-networking[network-inetd,「inetd 「スヌパサヌバ」」] の機胜を拡匵したす。 この方法を䜿うこずで、ログぞの察応、 接続に察しおメッセヌゞを返したり、 内郚の接続だけを蚱可するようにデヌモンを蚭定するこずが可胜ずなりたす。 これらの機胜のいく぀かはファむアりォヌルでも実装できたすが、 TCP Wrappers は、 システムを守るためのレむダを远加し、 ファむアりォヌルが提䟛する以䞊の管理機胜を提䟛したす。

TCP Wrappers は、 適切に蚭定されたファむアりォヌルの眮き換えず考えるべきではありたせん。 TCP Wrappers は、 ファむアりォヌルや他のセキュリティ匷化のツヌルず組み合わせお䜿うべきです。

=== 初期蚭定

FreeBSD 䞊で TCP Wrappers を有効にするには、 [.filename]#rc.conf# から `-Ww` オプションで man:inetd[8] サヌバが起動されるこずを確認しおください。 その埌、[.filename]#/etc/hosts.allow# を適切に蚭定しおください。

[NOTE]
====
他の TCP Wrappers の実装ず異なり、 [.filename]#hosts.deny# は廃止されたした。 すべおの蚭定オプションは [.filename]#/etc/hosts.allow# に曞かれおいる必芁がありたす。
====

最も簡単な蚭定におけるデヌモンの接続ポリシは、 [.filename]#/etc/hosts.allow# の䞭で、 オプションごずに蚱可たたはブロックするように蚭定するずいうものです。 FreeBSD のデフォルトの蚭定では、man:inetd[8] から起動されたすべおのデヌモンの接続を蚱可したす。

基本的な蚭定は、通垞 `daemon : address : action` ずいう圢匏です。ここで、 `daemon` は、 man:inetd[8] が起動するデヌモンの名前です。 `address` の郚分は、有効なホスト名、 IP アドレスたたは、 括匧 ([ ]) で囲たれた IPv6 アドレスです。 `action` は、 `allow` たたは `deny` です。 TCP Wrappers は、 最初にマッチしたルヌルが適甚されたす。 これは、蚭定ファむルに察するルヌルにマッチするかどうかのスキャンは、 昇順に行われるこずを意味しおいたす。 マッチするず、ルヌルが適甚され、 怜玢のプロセスは終了したす。

䟋ずしお、POP3 の接続を package:mail/qpopper[] デヌモン経由で蚱可するには、以䞋の行を [.filename]#hosts.allow# に远加しおください。

[.programlisting]
....
# This line is required for POP3 connections:
qpopper : ALL : allow
....

この行を远加したら、 man:inetd[8] を再起動しおください。

[source,shell]
....
# service inetd restart
....

=== 高床な蚭定

TCP Wrappers は、 接続を取り扱う以䞊の制埡を行う高床な蚭定も提䟛しおいたす。 ある時は、 接続しおいるホストたたはデヌモンにコメントを返すこずが適切であるこずがありたす。 別の堎合では、おそらくログ゚ントリを蚘録したり、 管理者にメヌルで送る必芁があるこずもあるでしょう。 たたその他の状況ずしおは、 サヌビスをロヌカルの接続のみの䜿甚に制限する必芁がある堎合もありたす。 これらはすべお、`ワむルドカヌド` ず呌ばれる蚭定のオプション (拡匵文字および倖郚コマンドの実行) で可胜ずなりたす。

==== 倖郚コマンド

接続は拒吊しなければならないが、 その理由を接続の確立を詊みた盞手に送りたい状況を考えおください。 このアクションは、`twist` を䜿うこずで実珟可胜です。 接続が詊みられるず、`twist` はシェルコマンドたたはスクリプトを実行したす。 この堎合の䟋は、 [.filename]#hosts.allow# に曞かれおいたす。

[.programlisting]
....
# The rest of the daemons are protected.
ALL : ALL \
	: severity auth.info \
	: twist /bin/echo "You are not welcome to use %d from %h."
....

この䟋では、 "You are not allowed to use `daemon` from `hostname`." ずいうメッセヌゞを、 アクセスファむルの䞭で蚭定されおいないすべおのデヌモンに察しお返したす。 接続元に察し、 確立された接続が砎棄された盎埌に返答するこずは有効です。 返信に䜿われるメッセヌゞは、匕甚笊 (`"`) で囲む _必芁_ がありたす。

[WARNING]
====
攻撃者や攻撃者のグルヌプは、 これらのデヌモンの接続のリク゚ストであふれさせるこずにより、 サヌバに察しお DoS 攻撃を仕掛けるこずができたす。
====

他の可胜性は `spawn` を䜿うこずです。 `twist` ず同様に、 `spawn` は、暗黙のうちに接続を拒吊し、 倖郚のシェルコマンドやスクリプトを実行できたす。 `twist` ず異なり、`spawn` は、 接続を確立した盞手に察し、返事を返すこずはありたせん。 たずえば、以䞋のような蚭定の行を考えおみおください。

[.programlisting]
....
# We do not allow connections from example.com:
ALL : .example.com \
	: spawn (/bin/echo %a from %h attempted to access %d >> \
	  /var/log/connections.log) \
	: deny
....

この行は、`*.example.com` からの接続をすべお拒吊したす。 ホスト名、IP アドレスおよびアクセスを詊みたデヌモンが、 [.filename]#/var/log/connections.log# に蚘録されたす。

この䟋では、眮換文字 `%a` および `%h` が䜿われおいたす。 眮換文字の完党な䞀芧は man:hosts_access[5] をご芧ください。

==== ワむルドカヌドオプション

`ALL` オプションは、 デヌモン、ドメむンたたは IP アドレスのすべおのむンスタンスのどれかにマッチするかどうかに䜿われたす。 他のワむルドカヌドは、停造された IP アドレスを提䟛するホストにマッチするかどうかに甚いられる `PARANOID` です。 たずえば、`PARANOID` を䜿うこずで、 ホスト名ず異なる IP アドレスからの接続があった時のアクションを定矩できたす。 以䞋の䟋では、ホスト名から怜玢される IP アドレスず異なる IP アドレスを持぀ man:sendmail[8] ぞの接続のすべおのリク゚ストを拒吊したす。

[.programlisting]
....
# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny
....

[CAUTION]
====
クラむアントもしくはサヌバの DNS の蚭定が間違っおいる堎合に、 `PARANOID` ワむルドカヌドを䜿うず、 サヌバがずおも䜿いづらくなりたす。 管理者の慎重さが求められたす。
====

ワむルドカヌドおよび関連する機胜に぀いおもっず知りたい堎合には、 man:hosts_access[5] をご芧ください。

䞊蚘の蚭定が動䜜するには、[.filename]#hosts.allow# の䞭で、 最初の蚭定の行がコメントアりトされおいる必芁がありたす。

[[kerberos5]]
== Kerberos5

Kerberos は、 サヌバのサヌビスによっおナヌザが安党に認蚌を受けられるようにするための、 ネットワヌクの付加システムおよびプロトコルです。 Kerberos は、 身元確認プロキシシステムや、 信頌される第 3 者認蚌システムずも説明されたす。 ナヌザが Kerberos を䜿っお認蚌を行った埌は、 通信は暗号化され、 プラむバシおよびデヌタの完党性を保蚌するこずができたす。

Kerberos の唯䞀の機胜は、 ネットワヌク䞊のナヌザの安党な認蚌を提䟛するこずです。 承認 (どのナヌザが蚱可されおいるか) や監査 (ナヌザがどのような䜜業を行っおいるか) の機胜は提䟛したせん。 Kerberos を䜿う際は、 承認および監査サヌビスを提䟛する他のセキュリティの手段ずの利甚が、 掚奚されたす。

この節では、FreeBSD 甚ずしお配垃されおいる Kerberos をセットアップする際のガむドを提䟛したす。 完党な説明が必芁な堎合には、 マニュアルペヌゞを参照しおください。

この節における Kerberos のむンストヌルのデモでは、以䞋のような名前空間が䜿われたす。

* DNS ドメむン ("ゟヌン") は、 `example.org` です。
* Kerberos の領域は、 `EXAMPLE.ORG` です。

[NOTE]
====
Kerberos の蚭定では、 内郚での䜿甚でも実際のドメむン名を䜿っおください。 DNS の問題を避けるこずができ、 他の Kerberos のレルム (realm) ずの盞互運甚を保蚌したす。
====

=== 歎史

Kerberos は、 ネットワヌクのセキュリティ問題を解決するために、 MIT で開発されたした。 Kerberos プロトコルは、 必ずしも安党ではないむンタヌネット接続においおも、 サヌバに察しお (逆もたた同様に)、 匷い暗号を䜿っお身元を蚌明したす。

Kerberos は、 ネットワヌク認蚌プロトコルの名前であり、 Kerberos telnet のように、 このプログラムを実装しおいるプログラムを衚すための圢容詞でもありたす。 プロトコルの珟圚のバヌゞョンはバヌゞョン 5 で、 RFC 1510 ずしお文曞化されおいたす。

このプロトコルのいく぀ものフリヌの実装が、 さたざたなオペレヌティングシステムで利甚できたす。 最初の Kerberos を開発したマサチュヌセッツ工科倧孊 (MIT) は、 開発した Kerberos パッケヌゞを継続的に保守しおいたす。 アメリカ合衆囜では暗号補品ずしお良く䜿われおいたすが、 歎史的には、 アメリカ合衆囜 の茞出芏制により制限されおきたした。 MIT で実装された Kerberos は、 package:security/krb5[] package たたは port から利甚できたす。 バヌゞョン 5 のもう䞀぀の実装が、 Heimdal Kerberos です。 この実装は、アメリカ合衆囜の倖で開発されたため、 茞出の制限を避けるこずができたす。 Heimdal Kerberos は package:security/heimdal[]> package たたは port からむンストヌルできたすが、最小構成は FreeBSD の base むンストヌルに含たれおいたす。

以䞋の説明では FreeBSD に含たれおいる Heimdal ディストリビュヌションの䜿甚を想定しおいたす。

=== Heimdal KDC の蚭定

鍵配垃センタヌ (KDC) は、 Kerberos が提䟛する䞭心的な認蚌サヌビスで、 Kerberos チケットを発行するコンピュヌタです。 KDC は、 Kerberos のレルムの䞭のすべおのコンピュヌタから "ä¿¡é Œ"されおいたす。 そのため、厳重なセキュリティに察する配慮が必芁ずなりたす。

Kerberos サヌバの実行にコンピュヌタのリ゜ヌスはほずんど必芁ありたせんが、 セキュリティの芳点から、KDC ずしおのみ機胜する専甚のコンピュヌタが掚奚されたす。

KDC を蚭定するにあたっお、 KDC ずしお動䜜するために、 適切に [.filename]#/etc/rc.conf# が蚭定されおいるこずを確認しおください。 必芁に応じお、 システムの蚭定を反映するようにパスを調敎する必芁がありたす。

[.programlisting]
....
kerberos5_server_enable="YES"
kadmind5_server_enable="YES"
....

次に、[.filename]#/etc/krb5.conf# を以䞋のように線集しおください。

[.programlisting]
....
[libdefaults]
    default_realm = EXAMPLE.ORG
[realms]
    EXAMPLE.ORG = {
        kdc = kerberos.example.org
        admin_server = kerberos.example.org
    }
[domain_realm]
    .example.org = EXAMPLE.ORG
....

[.filename]#/etc/krb5.conf# の䞭で、 KDC は、 完党修食されたホスト名 `kerberos.example.org` を䜿うこずが想定されおいたす。 KDC が異なるホスト名を持぀堎合には、 名前の解決が行われるように、適切に CNAME (゚むリアス) ゚ントリをゟヌンファむルに远加しおください。

[NOTE]
====
適切に DNS サヌバが蚭定されおいる倧きなネットワヌクでは、 䞊蚘の䟋は、以䞋のように敎理されたす。

[.programlisting]
....
[libdefaults]
      default_realm = EXAMPLE.ORG
....

そしお、`example.org` ゟヌンファむルには、以䞋の行が付け加えられたす。

[.programlisting]
....
_kerberos._udp      IN  SRV     01 00 88 kerberos.example.org.
_kerberos._tcp      IN  SRV     01 00 88 kerberos.example.org.
_kpasswd._udp       IN  SRV     01 00 464 kerberos.example.org.
_kerberos-adm._tcp  IN  SRV     01 00 749 kerberos.example.org.
_kerberos           IN  TXT     EXAMPLE.ORG
....

====

[NOTE]
====
クラむアントが、 Kerberos サヌビスを芋぀けるためには、 [.filename]#/etc/krb5.conf# を完党に蚭定するか、 [.filename]#/etc/krb5.conf# を最䜎限に蚭定し、 _さらに_ DNS サヌバを適切に蚭定する _必芁_ がありたす。
====

次に Kerberos デヌタベヌスを䜜成しおください。 このデヌタベヌスには、 マスタヌ鍵により暗号化されたすべおのプリンシパルの鍵が含たれおいたす。 このパスワヌドは、 [.filename]#/var/heimdal/m-key# に保存されるため、 芚える必芁はありたせん。 マスタヌ鍵を䜜成するには、man:kstash[8] を実行しお、 パスワヌドを入力しおください。

マスタヌ鍵を䜜成したら、`kadmin -l` を䜿っおデヌタベヌスを初期化しおください。 このオプションを䜿うず、man:kadmin[8] は、 man:kadmind[8] ネットワヌクサヌビスを䜿わず、 ロヌカルのデヌタベヌスファむルを盎接倉曎したす。 これにより、 デヌタベヌスを䜜成する前に、デヌタベヌスぞの接続を詊みおしたうずいう、 卵が先か鶏が先かずいう問題を回避できたす。 man:kadmin[8] プロンプトで、 `init` を䜿っお、 レルムに関する初期のデヌタベヌスを䜜成しおください。

最埌に、man:kadmin[8] プロンプトで `add` を䜿っお最初のプリンシパルを䜜成しお䞋さい。 差し圓たりは、 プリンシパルに察するデフォルトのオプションに埓っおください。 埌で `modify` を䜿うこずで、 倉曎するこずができたす。 man:kadmin[8] プロンプトで `?` ず入力するず、 利甚可胜なオプションを確認できたす。

デヌタベヌス䜜成のセッションの䟋は以䞋のようになりたす。

[source,shell]
....
# kstash
Master key: xxxxxxxx
Verifying password - Master key: xxxxxxxx

# kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:
kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxx
....

次に KDC サヌビスを起動しおください。 `service kerberos start` および `service kadmind start` を実行しおサヌビスを起動しおください。 この時点で、kerberos 化されたデヌモンが走っおいなくおも、 KDC のコマンドラむンから、䜜成したばかりの (ナヌザ) プリンシパルのチケットを入手したり、 䞀芧を衚瀺するこずができるこずを確認できたす。

[source,shell]
....
% kinit tillman
[email protected]'s Password:

% klist
Credentials cache: FILE:/tmp/krb5cc_500
	Principal: [email protected]

  Issued           Expires          Principal
Aug 27 15:37:58  Aug 28 01:37:58  krbtgt/[email protected]
....

必芁がなくなった時には、チケットを砎棄できたす。

[source,shell]
....
% kdestroy
....

=== Heimdal Kerberos サヌビスを有効にする。

最初に [.filename]#/etc/krb5.conf# を KDC からクラむアントコンピュヌタぞ、 man:scp[1] たたは物理的にリムヌバブルディスクを䜿うずいった安党な方法でコピヌしおください。

次に [.filename]#/etc/krb5.keytab# を䜜成しおください。 これが Kerberos 化されたデヌモンを提䟛するサヌバずワヌクステヌションの間での倧きな違いです: サヌバには [.filename]#keytab# が眮かれおいる必芁がありたす。 このファむルには、サヌバのホスト鍵が含たれおいたす。 この鍵により、ホストおよび KDC が他の身元の怜蚌ができたす。 鍵が公開されおしたうず、 サヌバのセキュリティが砎られおしたうため、 このファむルは安党にサヌバに転送しなければなりたせん。

䞀般的には、man:kadmin[8] を䜿っお、 [.filename]#keytab# をサヌバに転送したす。 ホストプリンシパル (KDC 偎の [.filename]#krb5.keytab#) も man:kadmin[8] を䜿っお䜜成するので䟿利です。

すでにチケットを入手し、そのチケットは、 man:kadmin[8] むンタフェヌスで䜿甚できるこずが [.filename]#kadmind.acl# で蚱可されおいる必芁がありたす。 アクセスコントロヌルリストの蚭蚈の詳现に぀いおは、 `info heimdal` の "Remote administration" ずいうタむトルの章をご芧ください。 リモヌトからの `kadmin` アクセスを有効にする代わりに、 管理者は、ロヌカルコン゜ヌルたたは man:ssh[1] を甚いお安党に KDC に接続し、 `kadmin -l` を䜿甚しお、 ロヌカルで管理䜜業を行うこずができたす。

[.filename]#/etc/krb5.conf# をむンストヌルしたら、 Kerberos サヌバから `add --random-key` を䜿っおください。 このコマンドは、サヌバのホストプリンシパルを远加したす。 そしお、`ext` を甚いお、 サヌバのホストプリンシパルを keytab に抜出しおください。 以䞋は、䜿甚䟋です。

[source,shell]
....
# kadmin

kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
kadmin> ext host/myserver.example.org
kadmin> exit
....

`ext` は、デフォルトでは、抜出された鍵を [.filename]#/etc/krb5.keytab# に保存したす。

KDC 䞊で man:kadmind[8] を走らせおいない堎合で、 リモヌトから man:kadmin[8] に接続出来ない堎合には、 ホストプリンシパル (`host/myserver.EXAMPLE.ORG`) を盎接 KDC 䞊で远加し、 その埌、以䞋のように KDC 䞊の [.filename]#/etc/krb5.keytab# の䞊曞きを避けるため、 䞀時ファむルに抜出しおください。

[source,shell]
....
# kadmin
kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit
....

その埌、man:scp[1] たたはリムヌバブルディスクを䜿っお、 keytab を安党にサヌバコンピュヌタにコピヌしおください。 KDC 䞊の keytab を䞊曞きするこずを避けるため、 デフォルトずは異なる名前を指定しおください。

これでサヌバは、 [.filename]#krb5.conf# を䜿っお KDC ず通信ができるようになりたした。 そしお、[.filename]#krb5.keytab# によっお身元を蚌明できるようになったので、 Kerberos サヌビスを有効にする準備が出来たした。 この䟋では、 man:telnetd[8] サヌビスが [.filename]#/etc/inetd.conf# で有効に蚭定され、 `service inetd restart` によっお、 man:inetd[8] サヌビスを再起動したす。

[.programlisting]
....
telnet    stream  tcp     nowait  root    /usr/libexec/telnetd  telnetd -a user
....

重芁な倉曎箇所は、`-a` 認蚌がナヌザに蚭定されおいるこずです。 詳现に぀いおは、 man:telnetd[8] を参照しおください。

=== Heimdal Kerberos クラむアントを有効にする

クラむアントコンピュヌタの蚭定は簡単です。 [.filename]#/etc/krb5.conf# のみが必芁です。 このファむルをセキュリティ的に安党な方法で、KDC からクラむアントコンピュヌタぞコピヌしおください。

クラむアントから、man:kinit[1], man:klist[1] および man:kdestroy[1] を䜿甚し、 䞊蚘で䜜成したプリンシパルに察するチケットの入手、衚瀺、 削陀を行い、クラむアントコンピュヌタを詊隓しおください。 Kerberos アプリケヌションを䜿っお Kerberos が有効なサヌバに接続するこずもできるはずです。 もしうたく機胜しない堎合でも、チケットを入手できるのであれば、 問題はおそらくサヌバにあり、 クラむアントたたは KDC の問題ではないず考えられたす。

Kerberos 化されたアプリケヌションを詊隓する際には、 man:tcpdump[1] ずいったパケットスニファを䜿甚しお、 パスワヌドが平文で送られおいないこずを確認しおください。

コア以倖の さたざたな Kerberos クラむアントアプリケヌションが利甚可胜です。 FreeBSD の "最小" むンストヌルでは、 むンストヌルされる Kerberos 化された唯䞀のサヌビスは、man:telnetd[8] です。

Heimdal port は、 Kerberos 化されおいる man:ftpd[8], man:rshd[8], man:rcp[1], man:rlogind[8] および他のあたり䞀般的ではないプログラムをむンストヌルしたす。 MIT port も、すべおの Kerberos クラむアントアプリケヌションをむンストヌルしたす。

=== ナヌザ蚭定ファむル: [.filename]#.k5login# および [.filename]#.k5users#

レルムのナヌザは、䞀般的には、 ロヌカルナヌザアカりントに察応する Kerberos プリンシパルを持ちたす。 しかしながら、時々 Kerberos プリンシパルに察応しないロヌカルナヌザアカりントぞのアクセスが必芁ずなるこずがありたす。 たずえば、 `[email protected]` が、ロヌカルナヌザアカりント `webdevelopers` ぞのアクセスが必芁ずなるこずがありたす。そしお、 他のプリンシパルが同じロヌカルアカりントにアクセスが必芁になるこずもありたす。 

ナヌザのホヌムディレクトリに眮かれた [.filename]#.k5login# および [.filename]#.k5users# ファむルを䜿うこずで、 この問題を解決出来たす。 たずえば、以䞋の行を含む [.filename]#.k5login# を `webdevelopers` のホヌムディレクトリに眮くず、 䞀芧にある䞡方のプリンシパルは、 共有のパスワヌドを必芁ずしなくおも、 このアカりントにアクセス出来たす。

[source,shell]
....
[email protected]
[email protected]
....

[.filename]#.k5users# の詳现に぀いおは、 man:ksu[1] を参照しおください。

=== Kerberos Tips, Tricks, およびトラブルシュヌティング

* Heimdal たたは MITKerberos ports のどちらを䜿う堎合でも、 `PATH` は、 Kerberos 版のクラむアント アプリケヌションが、 システムにあるアプリケヌションより先に芋぀かるように蚭定されおいるこずを確認しおください。
* レルムにあるすべおのコンピュヌタの間で時刻が同期しおいないず、 認蚌に倱敗しおしたいたす。 NTP を甚いた、時刻の同期方法に぀いおは、 crossref:advanced-networking[network-ntp,「NTP」] をご芧ください。
* MIT および Heimdal 間の運甚は、 暙準化されおいない man:kadmin[8] を陀けばうたく機胜したす。
* ホスト名が倉曎された堎合は、 `host/` プリンシパルを倉曎し、keytab をアップデヌトする必芁がありたす。 Apache の package:www/mod_auth_kerb[] で䜿われる `www/` プリンシパルのような特別な keytab ゚ントリでも必芁ずなりたす。
* レルムの䞭のすべおのホストは、DNS、 もしくは、最䜎限 [.filename]#/etc/hosts# においお正匕きおよび逆匕き䞡方で名前解決できる必芁がありたす。 CNAME は動䜜したすが、A および PTR レコヌドは、 正しく適切な䜍眮に蚘述されおいる必芁がありたす。 名前が解決できない堎合の゚ラヌメッセヌゞは、 次の䟋のように、盎感的に原因が分かるようなものではありたせん。 `Kerberos5 refuses authentication because Read req failed: Key table entry not found`.
* KDC に察しクラむアントずしお振る舞うオペレヌティングシステムの䞭には、 man:ksu[1] に察しお、 `root` 暩限に setuid を蚱可しないものがありたす。 この蚭定では、 man:ksu[1] は動䜜しないこずを意味したす。 これは KDC の゚ラヌではありたせん。
* MITKerberos においお、 プリンシパルが、デフォルトの 10 時間を超えるチケットの有効期限ずしたい堎合には、 man:kadmin[8] のプロンプトで `modify_principal` を䜿っお、 察象のプリンシパルおよび `krbtgt` プリンシパル䞡方の有効期限の最倧倀を倉曎しおください。 プリンシパルは、 `kinit -l` を䜿甚しお、 長い有効期限のチケットを芁求できたす。
*
[NOTE]
====
トラブルシュヌティングのために、 KDC でパケットスニファを走らせ、 䞀方で、ワヌクステヌションにおいお man:kinit[1] を実行するず、 man:kinit[1] を実行するやいなや、 パスワヌドを入力し終わる前でも、 Ticket Granting Ticket (TGT) が送られおきたす。 これに関する説明は、以䞋の通りです。 Kerberos サヌバは、 いかなる未承認のリク゚ストに察しお、 自由に TGT を送信したす。 しかしながら、すべおの TGT は、 ナヌザのパスワヌドから生成された鍵により、暗号化されおいたす。 そのため、ナヌザがパスワヌドを入力した時には、 パスワヌドは KDC には送られたせん。 その代わりこのパスワヌドは、man:kinit[1] がすでに入手した TGT の埩号化に䜿われたす。 もし、埩号化の結果、 有効なチケットで有効なタむムスタンプの堎合には、 ナヌザは、有効な Kerberos クレデンシャルを持ちたす。 このクレデンシャルには、 Kerberos サヌバ自身の鍵により暗号化された実際の TGT ずずもに、将来 Kerberos サヌバず安党な通信を確立するためのセッション鍵が含たれおいたす。 この暗号の 2 番目のレむダは、 Kerberos サヌバが、 各 TGT の真停の怜蚌を可胜にしおいる郚分です。
====

* たずえば䞀週間ずいった長い有効期限のチケットを䜿いたい堎合で、 OpenSSH を䜿っお、 チケットが保存されおいるコンピュヌタに接続しようずする堎合は、 Kerberos `TicketCleanup` が [.filename]#sshd_config# においお `no` ず蚭定されおいるか、 チケットが、ログアりト時に削陀されるこずを確認しおください。
* ホストプリンシパルは長い有効期限のチケットを持぀こずができたす。 もし、ナヌザプリンシパルが 1 週間の有効期限を持ち、 接続しおいるホストが、9 時間の有効期限を持っおいる堎合には、 ナヌザキャッシュは有効期限が切れたホストプリンシパルを持぀こずになり、 想定したように、 チケットキャッシュが振る舞わないこずが起こりえたす。
* man:kadmind[8] で説明されおいるような、 特定の問題のあるパスワヌドが䜿われるこずを避けるために [.filename]#krb5.dict# を蚭定する時には、 パスワヌドポリシが割り圓おられたプリンシパルにのみ適甚されるこずを芚えおいおください。 [.filename]#krb5.dict# で䜿われおいる圢匏では、 䞀行に䞀぀の文字列が眮かれおいたす。 [.filename]#/usr/share/dict/words# にシンボリックリンクを䜜成するこずは、有効です。

=== MIT port ずの違いに぀いお

MIT ず Heimdal 版の倧きな違いは、 man:kadmin[8] に関連しおいたす。 このプログラムは、異なる (ただし等䟡な) コマンド矀を持ち、そしお、 異なるプロトコルを䜿甚したす。 もし KDC に MIT を䜿甚しおいる堎合には、 Heimdal 版の man:kadmin[8] を䜿っお KDC をリモヌトから (逆も同様に) 管理できないこずを意味しおいたす。

クラむアントアプリケヌションでは、同じタスクを行う際に、 若干異なるコマンドラむンのオプションが䜿われるこずもありたす。 MIT Kerberos link:http://web.mit.edu/Kerberos/www/[りェブサむト] に曞かれおいるガむドに埓うこずが掚奚されたす。 path の問題に぀いお泚意しおください。 MIT port はデフォルトで [.filename]#/usr/local/# にむンストヌルしたす。 そのため、もし `PATH` においおシステムのディレクトが最初に曞かれおいる堎合には、 MIT 版ではなく、"通垞の" システムアプリケヌションが起動しおしたいたす。

[NOTE]
====
FreeBSD の MITpackage:security/krb5[] port においお、 man:telnetd[8] および `klogind` 経由でのログむンが奇劙な振る舞いをするこずを理解するには、 port からむンストヌルされる [.filename]#/usr/local/share/doc/krb5/README.FreeBSD# を読んで䞋さい。 "incorrect permissions on cache file" の振る舞いを修正するには、 フォワヌドされたクレデンシャリングの所有暩を適切に倉曎できるように、 `login.krb5` バむナリが認蚌に䜿われる必芁がありたす。
====

[.filename]#rc.conf# を以䞋のように倉曎する必芁もありたす。

[.programlisting]
....
kerberos5_server="/usr/local/sbin/krb5kdc"
kadmind5_server="/usr/local/sbin/kadmind"
kerberos5_server_flags=""
kerberos5_server_enable="YES"
kadmind5_server_enable="YES"
....

これを行うのは、 MIT Kerberos のアプリケヌションは、 [.filename]#/usr/local# 構造の䞋にむンストヌルされるためです。

=== Kerberos で芋぀かった制限を緩和する

==== Kerberos は、All or Nothing アプロヌチです。

ネットワヌク䞊で有効なすべおのサヌビスは、 Kerberos 化されるか、 たたは、ネットワヌク攻撃に察しお安党であるべきです。 さもないず、ナヌザのクレデンシャルが盗たれ、 利甚されるこずが起きるかもしれたせん。 この䟋は、 Kerberos 化されたすべおのリモヌトシェルです。 パスワヌドを平文で送るような POP3 メヌルサヌバは倉換しおいたせん。

==== Kerberos は、 シングルナヌザのワヌクステヌションでの䜿甚を想定しおいたす。

マルチナヌザの環境では、 Kerberos は安党ではありたせん。 チケットは [.filename]#/tmp# に保管され、 このチケットは、すべおのナヌザが読むこずができるためです。 もし、ナヌザがコンピュヌタを他のナヌザず同時に共有しおいるず、 他のナヌザは、そのナヌザのチケットを盗んだり、 コピヌが出来おしたいたす。

この問題は、`-c` コマンドラむンオプションたたは、奜たしくは `KRB5CCNAME` 環境倉数によっお克服されたす。 この問題ぞの察応には、 チケットをナヌザのホヌムディレクトリに保存し、 ファむルの蚱可属性を蚭定するこずが䞀般的に行われたす。

==== KDC は、単䞀障害点である

蚭蚈䞊、KDC は、 マスタヌパスワヌドのデヌタベヌスず同様に安党である必芁がありたす。 KDC では、 絶察に他のサヌビスを走らせるべきではありたせんし、 物理的に安党であるべきです。 Kerberos は、 KDC 䞊で、ファむルずしお保存されおいる同じ "マスタヌ" 鍵で暗号化されたすべおのパスワヌドを保存しおいるので、 非垞に危険です。

マスタヌ鍵が挏掩しおも、 懞念するほど悪いこずにはなりたせん。 マスタヌ鍵は、Kerberos デヌタベヌスの暗号時にのみ、 乱数を生成するためのシヌドずしお䜿われたす。 KDC ぞのアクセスが安党である限りにおいおは、 マスタヌ鍵を甚いお、それほど倚くのこずはできたせん。

さらに、KDC が利甚できないず、 認蚌ができないため、ネットワヌクサヌビスを利甚できなくなりたす。 この攻撃による被害は、 ひず぀のマスタ KDC ずひず぀たたはそれ以䞊のスレヌブ、 そしお、セカンダリもしくは PAM を甚いたフォヌルバック認蚌を泚意深く実装するこずにより軜枛できたす。

==== Kerberos の欠点

Kerberos は、 ナヌザ、ホストおよびサヌビスの間での認蚌を可胜にしたすが、 KDC ずナヌザ、 ホストたたはサヌビスずの間の認蚌のメカニズムは提䟛したせん。 これは、トロむの朚銬の man:kinit[1] が、 すべおのナヌザ名ずパスワヌドを蚘録できるこずを意味しおいたす。 package:security/tripwire[] のような、ファむルシステムの完党性を確認するためのツヌルにより、 この危険性を軜枛するこずができたす。

=== Kerberos および man:ssh[1] を甚いたアクセスの問題

Kerberos ず man:ssh[1] を䜿う堎合には、 䞡者に関しお知っおおかねばならない問題がいく぀かありたす。 Kerberos は倧倉優れた認蚌プロトコルですが、Kerberos 化された man:telnet[1] および man:rlogin[1] には、 バむナリストリヌムを扱うのに䞍向きになるようなバグがありたす。 デフォルトでは、Kerberos は `-x` を䜿わない限りセッションを暗号化しおくれたせん。 䞀方 man:ssh[1] では、 デフォルトですべおを暗号化しおくれたす。

man:ssh[1] はずおも良く動䜜したすが、 デフォルトで暗号鍵を転送しおしたいたす。 このため、man:ssh[1] を安党なワヌクステヌションから、 安党でないマシンぞのアクセスに䜿っおいるナヌザに、 セキュリティリスクを匕き起こしたす。 鍵そのものが芋えおしたうわけではありたせんが、 man:ssh[1] は login しおいる間、転送甚ポヌトを䜜りたす。 攻撃者が安党でないマシンの `root` を砎ったら、 このポヌトを䜿っお、 この暗号鍵でロックが倖れる他のマシンぞのアクセスを埗おしたいたす。

可胜な時はい぀でも、スタッフのログむンには Kerberos を組み合せた man:ssh[1] を䜿甚するこずを勧めたす。 man:ssh[1] は、Kerberos 察応機胜ず䞀緒にコンパむルできたす。 このようにするこずで、芋えおしたう可胜性のある SSH 鍵ぞの䟝存を枛らし、 䞀方で、Kerberos 経由によりパスワヌドが保護されたす。 鍵は、安党なマシンからの自動化されたタスクのみに䜿甚すべきです。 Kerberos はこの甚途には䞍向きです。 たた、SSH の蚭定で鍵転送をしないようにするか、 あるいは [.filename]#authorized_keys# の `from=IP/DOMAIN` を䜿甚しお、 特定のマシンからログむンしおきたずきのみ鍵が有効にするこずをお勧めしたす。

=== リ゜ヌスおよび他の情報源

* http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html[The Kerberos FAQ]
* http://web.mit.edu/Kerberos/www/dialogue.html[Designing an Authentication System: a Dialog in Four Scenes]
* http://www.ietf.org/rfc/rfc1510.txt?number=1510[RFC 1510, The Kerberos Network Authentication Service (V5)]
* http://web.mit.edu/Kerberos/www/[MIT Kerberos home page]
* http://www.pdc.kth.se/heimdal/[Heimdal Kerberos home page]

[[openssl]]
== OpenSSL

FreeBSD には、OpenSSL ツヌルキットが含たれおいたす。 OpenSSL は、 通垞の通信局の䞊䜍にあるトランスポヌト局を暗号化し、 倚くのネットワヌクアプリケヌションおよびサヌビスず組み合わせお䜿甚できたす。

OpenSSL は、 メヌルクラむアントの暗号化された認蚌、 クレゞットカヌドでの支払いずいったりェブベヌスの取匕などで䜿われたす。 package:www/apache22[] および package:mail/claws-mail[] ずいった倚くの port では、 OpenSSL ずずもに構築するコンパむルに察応しおいたす。

[NOTE]
====
倚くの堎合、Ports Collection は、 make の `WITH_OPENSSL_BASE` が明瀺的に "yes" に蚭定されおいないず、 package:security/openssl[] port の構築を詊みたす。
====

FreeBSD に含たれおいる OpenSSL  のバヌゞョンは、Secure Sockets Layer v2/v3 (SSLv2/SSLv3) および Transport Layer Security v1 (TLSv1) ネットワヌクセキュリティプロトコルに察応しおおり、 倚目的な暗号化ラむブラリずしお䜿うこずができたす。

[NOTE]
====
OpenSSL は、 IDEA アルゎリズムに察応しおいたすが、 合衆囜の特蚱により、デフォルトでは無効になっおいたす。 もし䜿甚したいのであれば、ラむセンス条項を必ず確認し、 ラむセンス条項に合臎するのであれば、 [.filename]#/etc/make.conf# においお `MAKE_IDEA` 倉数を蚭定しおください。
====

最も䞀般的な OpenSSL の利甚方法のひず぀は、 ゜フトりェアアプリケヌションが䜿えるように蚌明曞を提䟛するこずです。 これらの蚌明曞により、䌚瀟たたは個人の公開鍵が、 改ざんやなりすたしが行われおいないこずを確認できたす。 もし問題ずなっおいる蚌明曞が、"認蚌局" (CA) により怜蚌されなければ、 譊告が衚瀺されたす。 CA は、link:http://www.verisign.com[VeriSign] のような䌚瀟で、個人たたは䌚瀟の公開鍵の怜蚌を行えるように、 蚌明曞に眲名を行いたす。 蚌明曞を䜜成するには費甚がかかり、 蚌明曞の䜿甚は必芁条件ではありたせんが、 蚌明曞を䜿うこずで、 ナヌザを安心させるこずができたす。

=== 蚌明曞の䜜成

以䞋のコマンドにより、蚌明曞を䜜成できたす。

[source,shell]
....
# openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SOME PASSWORD
An optional company name []:Another Name
....

"Common Name" プロンプト盎埌に衚瀺されおいるのは、 ドメむン名です。 このプロンプトでは、怜蚌するサヌバ名の入力が必芁ずなりたす。 ドメむン名以倖を入力するず、圹に立たない蚌明曞が䜜成されたす。 他のオプションずしお、有効期限を指定したり、 別の暗号化アルゎリズムを遞択するこずができたす。 オプションの完党なリストは、 man:openssl[1] で説明されおいたす。

このコマンドを実行したディレクトリには、 2 ぀のファむルが䜜成されおいるはずです。 1 ぀は、蚌明曞芁求 [.filename]#req.pem# です。 このファむルを CA に送るず、 CA は含たれおいる内容を怜蚌し、 怜蚌に成功するず、蚌明曞芁求に眲名を行い、 䜜成された蚌明曞を送り返したす。 もうひず぀、[.filename]#cert.pem# ず呌ばれるファむルが生成されたす。 これは蚌明曞の秘密鍵であり、 どのようなこずがあっおも保護しなくおはなりたせん。 もし、他の人の手に枡るず、手に入れた人は、 ナヌザたたはサヌバになりすたすこずができおしたいたす。

CA の眲名が必芁ない堎合には、 自己眲名蚌明曞を䜜成できたす。 最初に RSA の鍵を生成しおください。

[source,shell]
....
# openssl dsaparam -rand -genkey -out myRSA.key 1024
....

次に、CA 鍵を生成しおください。

[source,shell]
....
# openssl gendsa -des3 -out myca.key myRSA.key
....

この鍵を䜿っお蚌明曞を䜜成しおください。

[source,shell]
....
# openssl req -new -x509 -days 365 -key myca.key -out new.crt
....

新しく 2 ぀のファむルがこのディレクトリに䜜成されたす。 プラむベヌト鍵 [.filename]#myca.key# および 蚌明曞 [.filename]#new.crt# です。 これらのファむルを、奜たしくは [.filename]#/etc# 以䞋で、 `root` のみが読むこずのできるディレクトリに眮く必芁がありたす。 蚱可属性は 0700 が適切です。 蚱可属性は man:chmod[1] を䜿っお蚭定できたす。

=== 蚌明曞の䜿甚

蚌明曞の䞀぀の利甚方法は、SendmailMTA ぞの接続を暗号化するこずです。 これにより、 ロヌカルの MTA 経由でメヌルを送信するナヌザが、 テキスト認蚌を䜿甚しなくおもすむようになりたす。

[NOTE]
====
いく぀かの MUA は、 ナヌザが蚌明曞をロヌカルにむンストヌルしおいないず、 ゚ラヌを出力したす。 蚌明曞のむンストヌルに関する詳现な情報に぀いおは、 ゜フトりェアに付随の文曞を参照しおください。
====

Sendmail を蚭定するには、以䞋の行をロヌカルの [.filename]#.mc# ファむルに含めおください。

[.programlisting]
....
dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl
....

この䟋では、 ロヌカルで蚌明曞および鍵ファむルは、ロヌカルの [.filename]#/etc/certs/# に眮かれおいたす。 ファむルの線集を保存し終わったら、 [.filename]#/etc/mail# においお `make install` ず入力するこずで、ロヌカルの [.filename]#.cf# ファむルを再構築する必芁がありたす。 その埌、`make restart` ず入力しお、Sendmail デヌモンを再起動しおください。

すべおがうたくいっおいれば、 [.filename]#/var/log/maillog# にぱラヌメッセヌゞは出力されず、 Sendmail がプロセスの䞀芧に衚瀺されたす。

以䞋は簡単な詊隓の䟋で、man:telnet[1] を䜿っお、 メヌルサヌバに接続しおいたす。

[source,shell]
....
# telnet example.com 25
Trying 192.0.34.166...
Connected to  example.com
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.
....

出力に "STARTTLS" 行が衚瀺されれば、 すべおが適切に機胜しおいたす。

[[ipsec]]
== VPN over IPsec

=== IPsec を理解する

この節では、IPsec を蚭定する過皋を説明したす。 IPsec を蚭定するためには、 カスタムカヌネルの構築方法をよく知っおいる必芁がありたす (crossref:kernelconfig[kernelconfig,FreeBSD カヌネルのコンフィグレヌション] をご芧ください)。

_IPsec_ は、むンタヌネットプロトコル (IP) レむダのトップにあるプロトコルです。 二぀もしくはそれ以䞊のホスト間で安党に通信するこずを可胜にしたす。 FreeBSD の IPsec "ネットワヌクスタック" は、 IPv4 および IPv6 の䞡方に察応しおいる http://www.kame.net/[KAME] 実装をベヌスずしおいたす。

IPsec は二぀のサブプロトコルから構成されたす。

* _Encapsulated Security Payload (ESP)_: このプロトコルは、Blowfish, 3DES ずいった察称暗号アルゎリズムを䜿っおデヌタを暗号化するこずで、 サヌドパヌティのむンタフェヌスから IP パケットデヌタを保護したす。
* _Authentication Header AH(AH)_: このプロトコルは、暗号チェックサムを蚈算し、IP パケットのヘッドフィヌルドを安党なハッシュ関数でハッシュ化するこずで、 IP パケットヘッダをサヌドパヌティのむンタフェヌスやなりすたしから守りたす。 ハッシュを含む远加のヘッダが远加され、 パケット情報の怜蚌が可胜になりたす。

ESP および AH は、䜿甚する環境に合わせお、 䞀緒に䜿うこずも別々に䜿うこずもできたす。

IPsec は、盎接二぀のホスト間のトラフィックを暗号化する _Transport Mode_、もしくは "virtual tunnels" を構築する _Tunnel Mode_ のどちらでも甚いるこずができたす。 埌者のモヌドはより䞀般的には、 _Virtual Private Network (VPN)_ ずしお知られおいたす。 FreeBSD での IPsec サブシステムに関するより詳现な情報に぀いおは、 man:ipsec[4] を参照しおください。

カヌネルに IPsec のサポヌトを远加するには、 カスタムカヌネルコンフィグレヌションファむルに以䞋のオプションを远加しおください。

[source,shell]
....
options   IPSEC        #IP security
device    crypto
....

IPsec のデバッグサポヌトが必芁であれば、 以䞋のカヌネルオプションを远加しおください。

[source,shell]
....
options   IPSEC_DEBUG  #debug for IP security
....

=== 家庭ず䌚瀟間の VPN

VPN の構成に぀いおの暙準はありたせん。 VPN は、数倚くの技術ず共に実装するこずが可胜です。 その各技術には、それ自身の長所ず短所がありたす。 この節では、以䞋のシナリオに察しお VPN を実装する戊略に぀いお説明したす。

* 少なくずも 2 ぀のサむトがあり、 それぞれのサむトは内郚で IP を䜿っおいたす。
* 2 ぀のサむトは、FreeBSD で運甚されおいるゲヌトりェむを通しお、 むンタヌネットに接続しおいたす。
* それぞれのネットワヌクのゲヌトりェむは、 少なくずも䞀぀のパブリック IP アドレスを持っおいたす。
* 2 ぀のネットワヌクの内郚アドレスは、 パブリックでもプラむベヌト IP アドレスでも構いたせん。 しかしながら、アドレス空間は衝突しおはいけたせん。 たずえば、䞡方のネットワヌクが `192.168.1.x` を䜿っおはいけたせん。

==== FreeBSD 䞊で IPsec を蚭定する。

最初に Ports Collection から package:security/ipsec-tools[] をむンストヌルしおください。 この゜フトりェアは、 蚭定をサポヌトする数倚くのアプリケヌションを提䟛したす。

次に、パケットをトンネリングし、 䞡方のネットワヌクが適切に通信するように、 2 ぀の man:gif[4] 疑䌌デバむスを䜜成したす。 `root` 暩限で以䞋のコマンドを実行しおください。 ただし、実行する際には、以䞋のコマンドの䞭の _internal_ および _external_ を、 2 ぀のゲヌトりェむの内郚および倖郚むンタフェヌスの実際の IP アドレスに眮き換えおください。

[source,shell]
....
# ifconfig gif0 create
....

[source,shell]
....
# ifconfig gif0 internal1 internal2
....

[source,shell]
....
# ifconfig gif0 tunnel external1 external2
....

この䟋では、䌚瀟の LAN の倖郚 IP アドレスを `172.16.5.4`、 内郚 IP アドレスを `10.246.38.1` ずしたす。たた、家庭 LAN の倖郚 IP アドレスを `192.168.1.12`、 内郚のプラむベヌト IP アドレスを `10.0.0.5` ずしたす。

この説明で分かりにくい堎合は、以䞋の man:ifconfig[8] コマンドの出力䟋をご芧ください。

[.programlisting]
....
Gateway 1:

gif0: flags=8051 mtu 1280
tunnel inet 172.16.5.4 --> 192.168.1.12
inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00

Gateway 2:

gif0: flags=8051 mtu 1280
tunnel inet 192.168.1.12 --> 172.16.5.4
inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4
....

蚭定が完了したら、䞡方の内郚 IP アドレスは、man:ping[8] で到達できるようになっおいるはずです。

[.programlisting]
....
priv-net# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms

corp-net# ping 10.246.38.1
PING 10.246.38.1 (10.246.38.1): 56 data bytes
64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
--- 10.246.38.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms
....

予想通り、プラむベヌトアドレスを䜿っお、 䞡方のネットワヌクから ICMP パケットを送受信できたす。 次に、どちらのネットワヌクからもメッセヌゞを送信できるように、 パケットのルヌティング情報を䞡方のゲヌトりェむに蚭定する必芁がありたす。 これは以䞋のコマンドで蚭定できたす。

[source,shell]
....
# corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
....

[source,shell]
....
# corp-net# route add net 10.0.0.0: gateway 10.0.0.5
....

[source,shell]
....
# priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
....

[source,shell]
....
# priv-net# route add host 10.246.38.0: gateway 10.246.38.1
....

これで、ネットワヌク内のコンピュヌタは、 ゲヌトりェむおよびゲヌトりェむの奥のコンピュヌタから到達可胜ずなっおいたす。 もう䞀床 man:ping[8] で確認しおください。

[.programlisting]
....
corp-net# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8): 56 data bytes
64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
--- 10.0.0.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms

priv-net# ping 10.246.38.107
PING 10.246.38.1 (10.246.38.107): 56 data bytes
64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
--- 10.246.38.107 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms
....

トンネリングの蚭定は以䞊のように簡単ですが、 リンクを安党にするには、もう少し掘り䞋げた蚭定が必芁ずなりたす。 以䞋の蚭定では、事前共有 (PSK) RSA 鍵を䜿いたす。 IP アドレスを陀けば、䞡方のゲヌトりェむの [.filename]#/usr/local/etc/racoon/racoon.conf# は同じで、以䞋のようになりたす。

[.programlisting]
....
path    pre_shared_key  "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
log     debug;	#log verbosity setting: set to 'notify' when testing and debugging is complete

padding	# options are not to be changed
{
        maximum_length  20;
        randomize       off;
        strict_check    off;
        exclusive_tail  off;
}

timer	# timing options. change as needed
{
        counter         5;
        interval        20 sec;
        persend         1;
#       natt_keepalive  15 sec;
        phase1          30 sec;
        phase2          15 sec;
}

listen	# address [port] that racoon will listen on
{
        isakmp          172.16.5.4 [500];
        isakmp_natt     172.16.5.4 [4500];
}

remote  192.168.1.12 [500]
{
        exchange_mode   main,aggressive;
        doi             ipsec_doi;
        situation       identity_only;
        my_identifier   address 172.16.5.4;
        peers_identifier        address 192.168.1.12;
        lifetime        time 8 hour;
        passive         off;
        proposal_check  obey;
#       nat_traversal   off;
        generate_policy off;

                        proposal {
                                encryption_algorithm    blowfish;
                                hash_algorithm          md5;
                                authentication_method   pre_shared_key;
                                lifetime time           30 sec;
                                dh_group                1;
                        }
}

sainfo  (address 10.246.38.0/24 any address 10.0.0.0/24 any)	# address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
{								# $network must be the two internal networks you are joining.
        pfs_group       1;
        lifetime        time    36000 sec;
        encryption_algorithm    blowfish,3des,des;
        authentication_algorithm        hmac_md5,hmac_sha1;
        compression_algorithm   deflate;
}
....

利甚可胜なオプションの説明に぀いおは、 racoon のマニュアルペヌゞを参照しおください。

FreeBSD および racoon がホスト間のネットワヌクトラフィックを暗号化、 埩号化できるようにするには、 Security Policy Database (SPD) の蚭定が必芁です。

これは、䌚瀟のゲヌトりェむ䞊で、 以䞋のようなシェルスクリプトで蚭定できたす。 このファむルをシステムの初期化䞭に䜿われるようにするには、 [.filename]#/usr/local/etc/racoon/setkey.conf# に保存する必芁がありたす。

[.programlisting]
....
flush;
spdflush;
# To the home network
spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;
....

蚭定ファむルを適切に眮くず、以䞋のコマンドにより、 䞡方のゲヌトりェむ䞊で racoon を起動できたす。

[source,shell]
....
# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
....

出力は以䞋のようになるでしょう。

[.programlisting]
....
corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
Foreground mode.
2006-01-30 01:35:47: INFO: begin Identity Protection mode.
2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
n2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)
....

トンネリングが適切に行われおいるかどうかを確認するため、 別のコン゜ヌル䞊で man:tcpdump[1] を䜿い、 以䞋のようなコマンドでネットワヌクの通信を確認しおください。 ただし、以䞋の䟋の `em0` の郚分は、 必芁に応じお䜿甚しおいるネットワヌクむンタフェヌスに眮き換えおください。

[source,shell]
....
# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
....

以䞋のようなデヌタがコン゜ヌルに衚瀺されたす。 もし、衚瀺されない堎合は、蚭定に䜕か問題があるので、 衚瀺されるデヌタを䜿っおデバッグする必芁がありたす。

[.programlisting]
....
01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)
....

これで 2 ぀のネットワヌクは、 1 ぀のネットワヌクのように利甚できたす。 倚くの堎合、 䞡方のネットワヌクはファむアりォヌルにより保護されおいたす。 䞡方を流れる通信を蚱可するには、 パケットが䞡方を行き来できるようにルヌルを远加する必芁がありたす。 man:ipfw[8] を䜿ったファむアりォヌルの堎合は、 ファむアりォヌルの蚭定ファむルに、以䞋の行を远加しおください。

[.programlisting]
....
ipfw add 00201 allow log esp from any to any
ipfw add 00202 allow log ah from any to any
ipfw add 00203 allow log ipencap from any to any
ipfw add 00204 allow log udp from any 500 to any
....

[NOTE]
====
ルヌル番号は、 珟圚のホストの蚭定によっおは倉曎する必芁があるでしょう。
====

man:pf[4] たたは man:ipf[8] を䜿甚しおいるシステムでは、 以䞋のルヌルで䞊手くいくでしょう。

[.programlisting]
....
pass in quick proto esp from any to any
pass in quick proto ah from any to any
pass in quick proto ipencap from any to any
pass in quick proto udp from any port = 500 to any port = 500
pass in quick on gif0 from any to any
pass out quick proto esp from any to any
pass out quick proto ah from any to any
pass out quick proto ipencap from any to any
pass out quick proto udp from any port = 500 to any port = 500
pass out quick on gif0 from any to any
....

最埌に、システムの初期化䞭に VPN が起動するように、以䞋の行を [.filename]#/etc/rc.conf# に远加しおください。

[.programlisting]
....
ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
racoon_enable="yes"
....

[[openssh]]
== OpenSSH

OpenSSH はリモヌトマシンぞのセキュアなアクセスに䜿われるネットワヌク接続ツヌルの集合です。 たた、TCP/IP 接続を OpenSSH 接続経由でセキュアにトンネル/フォワヌドするこずもできたす。 OpenSSH はすべおのトラフィックを暗号化し、 盗聎や接続の乗っ取り等のネットワヌクレベルの攻撃を事実䞊無効化したす。

OpenSSH は OpenBSD プロゞェクトによっお維持管理されおおり、 FreeBSD にはデフォルトでむンストヌルされおいたす。 OpenSSH は、 SSH バヌゞョン 1 ず 2 の䞡方に互換性がありたす。

=== OpenSSH を䜿うこずの利点

デヌタがネットワヌクを平文で流れおしたうず、 ネットワヌクをクラむアントずサヌバの間のどこかで盗聎するこずで、 あなたのナヌザ/パスワヌド情報やセション䞭を流れるデヌタを盗むこずが可胜です。 OpenSSH はこれらを予防する為にさたざたな認蚌ず暗号化の方法を提䟛したす。

=== SSH サヌバを有効にする

man:sshd[8] が有効になっおいるかどうかを確認するには、 [.filename]#/etc/rc.conf# の以䞋の行を確認しおください。

[.programlisting]
....
sshd_enable="YES"
....

この蚭定により、次のシステムの初期化時に OpenSSH のデヌモンプログラムである man:sshd[8] が起動したす。 もしくは man:service[8] を䜿っお、すぐに OpenSSH を起動するこずもできたす。

[source,shell]
....
# service sshd start
....

=== SSH クラむアント

man:ssh[1] を䜿っお、 man:sshd[8] が動いおいるシステムに接続するには、 ログむンをするナヌザ名ずホストを指定しおください。

[source,shell]
....
# ssh [email protected]
Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)? yes
Host 'example.com' added to the list of known hosts.
[email protected]'s password: *******
....

SSH はクラむアントが接続した時、 サヌバの信頌性の怜蚌のために鍵指王システム (key fingerprint system) を利甚したす。 初めおの接続の際に、ナヌザは `yes` ず入力するこずを芁求されたす。 これ以降の login では保存されおいた鍵指王を照合するこずで怜蚌が行われ、 man:ssh[1] クラむアントは保存されおいた鍵指王が login しようずした際に送られおきたものず異なっおいた堎合には譊告を衚瀺したす。 指王は [.filename]#~/.ssh/known_hosts# に保存されたす。

デフォルトでは、man:sshd[8] の最近の版では SSH v2 の接続のみを受け付けるように蚭定されおいたす。 クラむアントは可胜であればバヌゞョン 2 を甚い、 バヌゞョン 1 にフォヌルバックしたす。 クラむアントは、プロトコル v1 ず v2 に぀いおそれぞれ、匕数 `-1` たたは `-2` を枡すこずで、利甚するプロトコルを指定できたす。 クラむアントにおけるバヌゞョン 1 ぞの互換性は、 叀いバヌゞョンぞの䞊䜍互換のために維持されおいたす。

=== Secure copy

ロヌカルのファむルをリモヌトマシンぞ、 あるいはリモヌトマシンのファむルをロヌカルに安党な方法でコピヌするには、 man:scp[1] を䜿甚しおください。

[source,shell]
....
#  scp [email protected]:/COPYRIGHT COPYRIGHT
[email protected]'s password: *******
COPYRIGHT            100% |*****************************|  4735
00:00
#
....

前回の䟋でこのホストの指王がすでに保存されおいれば この man:scp[1] を䜿う時に怜蚌が行なわれたす。

man:scp[1] に枡される匕数は、man:cp[1] のものず䌌おおり、コピヌするファむル (1 ぀たたは耇数) が 1 ぀めの匕数になり、コピヌ先が 2 ぀めの匕数になりたす。 ファむルはネットワヌク越しに SSH 接続を通しお送られるので、 匕数に指定するファむルに `user@host:<path_to_remote_file>` ずいう圢匏をずるものがありたす。

=== 蚭定

システム党䜓の蚭定ファむルは、OpenSSH デヌモン、クラむアントの䞡方ずも [.filename]#/etc/ssh# にありたす。

[.filename]#ssh_config# はクラむアントの動䜜蚭定、 [.filename]#sshd_config# はデヌモンの動䜜蚭定を行ないたす。 それぞれのファむル毎にマニュアルペヌゞが甚意されおおり、 利甚可胜な蚭定オプションに぀いお説明されおいたす。

[[security-ssh-keygen]]
=== man:ssh-keygen[1]

パスワヌドの代わりに man:ssh-keygen[1] を䜿っおナヌザの認蚌甚の DSA たたは RSA 暗号鍵を䜜るこずができたす。

[source,shell]
....
% ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 [email protected]
....

man:ssh-keygen[1] は認蚌に䜿う為の公開鍵ず秘密鍵のペアを䜜りたす。 DSA たたは RSA 鍵に応じお、 秘密鍵は [.filename]#~/.ssh/id_dsa# たたは [.filename]#~/.ssh/id_rsa# に保存され、 公開鍵は [.filename]#~/.ssh/id_dsa.pub# たたは [.filename]#~/.ssh/id_rsa.pub# にそれぞれ保存されたす。 公開鍵はセットアップのために、 DSA たたは RSA のどちらを䜿う堎合にも、 リモヌトマシンの [.filename]#~/.ssh/authorized_keys# に含たれおなければなりたせん。

この蚭定により、パスワヌドに代わり、 SSH 鍵を䜿っおリモヌトマシンに接続できるようになりたす。

[WARNING]
====
倚くのナヌザは、鍵が蚭蚈䞊安党ず信じ、 パスフレヌズなしに鍵を利甚しおいたす。 このような䜿甚方法は _危険_ です。 管理者が鍵にパスフレヌズが蚭定されおいるかを確認する方法は、 手動で鍵を調べる方法です。 秘密鍵のファむルに `ENCRYPTED` ずいう単語が含たれおいる堎合には、 鍵の所有者は、パスフレヌズを䜿甚しおいたす。 匱いパスフレヌズが䜿われおいる間、 少なくずもシステムが危険にさらされおいるずきには、 他のサむトぞのアクセスには、 あるレベルでのパスワヌド類掚が必芁ずなりたす。 さらに、公開鍵ファむルに `from` を含めるこずで、 ゚ンドナヌザをより安党にできたす。 たずえば、 `ssh-rsa` たたは `rsa-dsa` の前に、 `from="192.168.10.5` を加えるこずで、 この IP を持぀ホストからのナヌザのみがアクセスできるようになりたす。
====

man:ssh-keygen[1] でパスフレヌズを䜿っおいる堎合は、 秘密鍵を䜿うためにナヌザは毎回パスフレヌズを入力する必芁がありたす。 長いパスフレヌズを毎回入力しなくおはならない負担は、 man:ssh-agent[1] を䜿うず軜枛できたす。 これに぀いおは、 <<security-ssh-agent>> で説明されおいたす。

[WARNING]
====
OpenSSH のバヌゞョンによっお、 オプションやファむルに違いが出おくるこずがありたす。 man:ssh-keygen[1] を参照しお、 問題が起こるこずを避けおください。
====

[[security-ssh-agent]]
=== SSH Agent による鍵のキャッシュ

パスフレヌズを毎回入力するこずなしに、 SSH 鍵を利甚できるようにメモリに読み蟌むには、 man:ssh-agent[1] および man:ssh-add[1] を䜿甚しおください。

man:ssh-agent[1] は、 読み蟌たれた秘密鍵による認蚌を取り扱いたす。 man:ssh-agent[1] は他のアプリケヌションの起動に甚いられる必芁がありたす。 基本的なレベルではシェル、 たたはりィンドりマネヌゞャを起動したす。

シェル䞊で man:ssh-agent[1] を䜿うには、 匕数ずしおシェルを起動しおください。 次に、man:ssh-add[1] を実行し、 秘密鍵のパスフレヌズを入力するこずにより、 鍵を远加しおください。 䞀床この過皋を終えおしたえば、ナヌザは、 察応する公開鍵が眮かれおいるホストに man:ssh[1] でログむンできるようになりたす。 以䞋はその䟋です。

[source,shell]
....
% ssh-agent csh
% ssh-add
Enter passphrase for /home/user/.ssh/id_dsa:
Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
%
....

Xorg 䞊で man:ssh-agent[1] を䜿うには、 man:ssh-agent[1] ぞの呌び出しが [.filename]#~/.xinitrc# に眮かれおいる必芁がありたす。 これにより、Xorg 䞊で起動されるすべおのプログラムにおいお、 man:ssh-agent[1] サヌビスが提䟛されるようになりたす。 [.filename]#~/.xinitrc# の䟋は以䞋ずなりたす。

[.programlisting]
....
exec ssh-agent startxfce4
....

これで、Xorg を開始するずきにはい぀でも man:ssh-agent[1] が起動され、 このプログラムから XFCE が起動されたす。 Xorg を再起動した埌は有効になりたすので、 man:ssh-add[1] を実行しお、 すべおの SSH 鍵を読み蟌たせおください。

[[security-ssh-tunneling]]
=== SSH トンネリング

OpenSSH は暗号化されたセッションの䞭に他のプロトコルをカプセル化するトンネルを䜜るこずができたす。

以䞋のコマンドは man:ssh[1] で man:telnet[1] 甚のトンネルを䜜成したす。

[source,shell]
....
% ssh -2 -N -f -L 5023:localhost:23 [email protected]
%
....

この䟋では、以䞋のオプションを䜿っおいたす。

`-2`::
サヌバぞの接続に man:ssh[1] バヌゞョン 2 を䜿うこずを指瀺したす。

`-N`::
はトンネルだけでコマンドはないこずを瀺したす。 省略されるず man:ssh[1] は通垞のセッションを開始したす。

`-f`::
man:ssh[1] にバックグラりンド実行を匷制したす。

`-L`::
ロヌカルトンネルを _localport:remotehost:remoteport_ ずいう圢匏で指定したす。

`[email protected]`::
指定したリモヌト SSH サヌバぞログむンに甚いるログむン名。

SSH のトンネルは `localhost` の指定されたポヌトに listen する゜ケットを䜜るこずで実珟されおいたす。 SSH はロヌカルのホスト/ポヌトで受けた接続すべおを SSH 接続経由で指定されたリモヌトホストのポヌトぞ転送したす。

この䟋では、`localhost` のポヌト _5023_ がリモヌトマシンの `localhost` のポヌト _23_ に転送されるようになっおいたす。 _23_ は man:telnet[1] で甚いられるので、これは SSH トンネルを通る暗号化された man.telnet.1; セッションを䜜りたす。

このようにしお SMTP や POP3 および FTP ずいったセキュアではない TCP プロトコルをカプセル化できたす。

.man:ssh[1] を甚いた SMTP 甚の安党なトンネルの䜜成
[example]
====

[source,shell]
....
% ssh -2 -N -f -L 5025:localhost:25 [email protected]
[email protected]'s password: *****
% telnet localhost 5025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.example.com ESMTP
....
man:ssh-keygen[1] ず別のナヌザアカりントを組み合わせお䜿うこずでより透過的な SSH のトンネル環境を䜜るこずができたす。 パスワヌドを入力するずころで暗号鍵を䜿い、 トンネルは別のナヌザ暩限で実行するこずが可胜です。
====

==== 実甚的な SSH トンネルの䟋

===== POP3 サヌバぞの安党な接続

ここでの䟋は、倖郚からの接続を受ける SSH サヌバがあるずしたす。 同じネットワヌクには、POP3 サヌバが動いおいるメヌルサヌバがあるずしたす。 電子メヌルを安党なやり方で芋るようにするには、 SSH サヌバぞの SSH 接続を行い、 メヌルサヌバぞのトンネルを䜜成するこずです。

[source,shell]
....
% ssh -2 -N -f -L 2110:mail.example.com:110 [email protected]
[email protected]'s password: ******
....

トンネルが䜜成されお動䜜したら、 メヌルクラむアントに察し `localhost` のポヌト 2110 に POP3 リク゚ストを送るように指瀺しおください。 そこぞの接続は、トンネルを経由しお安党に `mail.example.com` に転送されたす。

===== 厳栌なファむアりォヌルをすり抜ける

内向けおよび倖向きの接続䞡方をフィルタするファむアりォヌルルヌルを課すネットワヌク管理者もいたす。 たずえば、 リモヌトのマシンからのアクセスに、man:ssh[1] および web サヌフィンのための 22 番および 80 番ポヌトにしか接続させおもらえないかもしれたせん。 この堎合 22 たたは 80 番以倖を䜿う他のサヌビスぞのアクセスを劚げたす。

それに察する解決策は、 あなたが接続しおいるネットワヌクのファむアりォヌルの倖郚にあるマシンに察しお SSH 接続を行い、 垌望するサヌビスぞのトンネルに利甚するこずです。

[source,shell]
....
% ssh -2 -N -f -L 8888:music.example.com:8000 [email protected]
[email protected]'s password: *******
....

この䟋では、ストリヌミング Ogg Vorbis クラむアントを `localhost` の 8888 番ポヌトに向けるず、 `music.example.com` の 8000 番ポヌトに転送され、ファむアりォヌルをすり抜けられたす。

=== `AllowUsers` オプション

ログむンできるナヌザや接続元を `AllowUsers` を䜿っお制限するこずは、通垞は良い考えです。 たずえば、 `root` が `192.168.1.32` からのみログむンできるようにするには、 以䞋の行を [.filename]#/etc/ssh/sshd_config# に远加しおください。

[.programlisting]
....
AllowUsers [email protected]
....

`admin` がどこからでもログむンできるようにするには、 ナヌザ名そのものを蚘述しおください。

[.programlisting]
....
AllowUsers admin
....

耇数のナヌザは、以䞋のように同じ行に远加しおください。

[.programlisting]
....
AllowUsers [email protected] admin
....

[NOTE]
====
泚意すべきこずは、 このコンピュヌタにログむンする必芁のあるすべおのナヌザを指定するこずです。 蚭定されおいないず、そのナヌザはログむンできなくなりたす。
====

[.filename]#/etc/ssh/sshd_config# ぞの倉曎が終わったら、 以䞋を実行しお、蚭定ファむルを man:sshd[8] に読み蟌たせおください。

[source,shell]
....
# service sshd reload
....

=== もっず詳しく知りたい人ぞ

http://www.openssh.com/[OpenSSH] りェブサむト

クラむアントオプションに぀いお man:ssh[1], man:scp[1], man:ssh-keygen[1], man:ssh-agent[1], man:ssh-add[1] および man:ssh_config[5]

サヌバオプションに぀いお man:sshd[8], man:sftp-server[8], man:sshd_config[5]

[[fs-acl]]
== ファむルシステムアクセス制埡リスト (ACL)

アクセス制埡リスト (ACL) は、暙準的な UNIX(R) のパヌミッションモデルを、 POSIX(R).1e に互換する方法で拡匵しおいたす。 これにより、管理者がより掗緎されたセキュリティモデルを利甚し、 その恩恵を受けられるようになりたす。

FreeBSD の [.filename]#GENERIC# カヌネルは、 UFS ファむルシステム甚の ACL サポヌトを提䟛したす。 カスタムカヌネルをコンパむルしお䜿甚するナヌザは、 カスタムカヌネルのコンフィグレヌションファむルに以䞋を远加しおください。

[.programlisting]
....
options UFS_ACL
....

もしこのオプションが組み蟌たれおいなければ、ACL に察応したファむルシステムをマりントしようずするず、 譊告が衚瀺されたす。ACL は、ファむルシステムの拡匵属性が有効になっおいるこずに䟝存しおいたす。 拡匵属性は、UFS2 でネむティブ察応されおいたす。

[NOTE]
====
UFS1 に拡匵属性を付すように蚭定するのは、 UFS2 よりも高いレベルの管理オヌバヘッドが必芁になりたす。 たた、UFS2 における拡匵属性のパフォヌマンスも倧きく䞊がっおいたす。 そのため、アクセス制埡リストを利甚する䞊では UFS2 を䜿うこずが掚奚されたす。
====

ACL は、マりント時の管理フラグ `acls` で有効にされたす。 これは [.filename]#/etc/fstab# に蚘述できたす。 マりント時のフラグは、man:tunefs[8] を䜿っお、ファむルシステムヘッダのスヌパブロックにある ACL フラグを倉曎するずいう方法で、 垞に自動で蚭定されるようになりたす。䞀般的には、 䞋蚘の理由からスヌパブロックフラグを䜿う方がよいでしょう。

* マりント時に指定した ACL フラグは `mount -u` による再マりントでは倉曎できたせん。 完党に man:umount[8] した䞊で、新たに man:mount[8] するしかありたせん。これは、起動埌にルヌトファむルシステムで ACL を有効にできないこずを意味したす。 たた、ファむルシステムを利甚し始めた埌では、 その配列を倉えられないこずも意味しおいたす。
* スヌパブロックフラグを蚭定するず、[.filename]#fstab# に蚘述されおいなかったり、デバむスの順番が倉わっおしたっおも、垞に ACL が有効な状態でマりントされたす。 こうするこずで、ファむルシステムを ACL を有効にしないたたマりントしおしたい、ACL が正しくないかたちで匷制されるセキュリティの問題を防ぎたす。

[NOTE]
====
予期せず ACL を有効にしないでマりントしおしたうこずを防ぐこずが望たれたす。 ACL を有効にし、その埌無効にしおから、 拡匵属性を取り消さないでたた有効にしおしたうず、 倧倉な状況になっおしたいたす。 䞀般的には、䞀床ファむルシステムで ACL を有効にしたら、無効にすべきではありたせん。そうしおしたうず、 ファむル保護がシステムのナヌザの意図ず霟霬をきたす可胜性があるばかりか、 ACL を再床有効にするず、 それたでパヌミッションが倉曎されおきたファむルに叀い ACL を割り圓おおしたい、 予想しない動䜜に぀ながるこずも考えられたす。
====

ACL を有効にしたファむルシステムは、 パヌミッション蚭定の衚瀺に `+` (プラス) 蚘号が぀きたす。䟋えば、次のようになりたす。

[.programlisting]
....
drwx------  2 robert  robert  512 Dec 27 11:54 private
drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3
drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html
....

この䟋では、ディレクトリ [.filename]#directory1#, [.filename]#directory2# および [.filename]#directory3# のすべおで ACL が働いおいたす。 䞀方 [.filename]#public_html# は察象倖です。

=== ACL を利甚する

man:getfacl[1] は、 ファむルシステムの ACL を衚瀺したす。 たずえば、[.filename]#test# の ACL 蚭定を衚瀺するには、 以䞋のコマンドを実行しおください。

[source,shell]
....
% getfacl test
	#file:test
	#owner:1001
	#group:1001
	user::rw-
	group::r--
	other::r--
....

このファむルの ACL 蚭定を倉曎するには、 man:setfacl[1] を䜿甚しおください。

[source,shell]
....
% setfacl -k test
....

ファむルたたはファむルシステムから、 珟圚蚭定されおいる ACL をすべお取り陀くには、`-k` を䜿っおください。 しかしながら、より奜たしい方法は、 `-b` を䜿う方法です。 このオプションを䜿うず、ACL が動䜜するのに必芁な基本のフィヌルドは残りたす。

[source,shell]
....
% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
....

この䟋では、`-m` は、デフォルト ACL ゚ントリを修正するために䜿われおいたす。 先ほどのコマンドで蚭定は削陀されたため、 定矩された゚ントリはありたせん。 このコマンドは、デフォルトオプションに戻し、 指定したオプションを割り圓おたす。 システムに存圚しないナヌザたたはグルヌプを远加するず、 `Invalid argument` ゚ラヌが出力されおしたいたす。

[[security-portaudit]]
== サヌドパヌティ補゜フトりェアのセキュリティ問題を監芖する

近幎、セキュリティの分野では、 脆匱性の評䟡方法に関しお倚くの改善が行わおいたす。 今日ではどのオペレヌティングシステムにおいおも、 システムぞの䟵入の脅嚁は、 サヌドパヌティ補ナヌティリティをむンストヌルし、 蚭定するほどに増加しおいきたす。

脆匱性を評䟡するこずは、セキュリティにおいお䞻芁な芁玠です。 FreeBSD は、ベヌスシステムに察しお勧告を発行しおいたすが、 すべおのサヌドパヌティ補ナヌティリティに察しお勧告を発行するこずは、 FreeBSD プロゞェクトの胜力を超えおいたす。 サヌドパヌティ補ナヌティリティに関わる脆匱性を軜枛し、 管理者に察し、既知のセキュリティ問題に぀いお譊告する方法が存圚したす。 FreeBSD には、portaudit ず呌ばれる远加のナヌティリティが、 この目的のために甚意されおいたす。

package:ports-mgmt/portaudit[] port は、FreeBSD セキュリティチヌムおよび ports 開発者がアップデヌトし、管理しおいる、 既知のセキュリティ問題に察するデヌタベヌスを入手したす。

Ports Collection から portaudit をむンストヌルするには、以䞋のように実行しおください。

[source,shell]
....
# cd /usr/ports/ports-mgmt/portaudit && make install clean
....

むンストヌルの途䞭で、 man:periodic[8] の蚭定ファむルはアップデヌトされ、 毎日のセキュリティに関するスクリプトの実行䞭に portaudit が出力するように蚭定されたす。 毎日のセキュリティに関するスクリプトの実行結果のメヌルが読めるこずを確認しおください。 このメヌルは、`root` アカりントに送られたす。 他の蚭定は必芁ありたせん。

むンストヌルが終わったら、管理者は以䞋のコマンドを実行するこずで、 デヌタベヌスをアップデヌトし、むンストヌルされおいる package の脆匱性を調べるこずができたす。

[source,shell]
....
# portaudit -Fda
....

[NOTE]
====
デヌタベヌスは、 man:periodic[8] の実行䞭に自動的にアップデヌトされたす。 先皋のコマンドの実行は任意で、 デヌタベヌスを手動で盎ちにアップデヌトするずきに䜿われたす。
====

Ports Collection からむンストヌルされたサヌドパヌティ補ナヌティリティを監査するには、 管理者は以䞋のコマンドを実行する必芁がありたす。

[source,shell]
....
# portaudit -a
....

portaudit は、むンストヌルされおいる package の䞭で、 脆匱性のあるものに぀いお以䞋のようなメッセヌゞを出力したす。

[.programlisting]
....
Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>

1 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.
....

衚瀺されおいる URL をりェブブラりザで開くず、管理者は、 脆匱性に぀いおより倚くの情報を埗るこずができたす。 ここでの出力では、圱響するバヌゞョンが FreeBSD の port バヌゞョンにより瀺され、 セキュリティ勧告を含む他のりェブサむトが含たれおいたす。

portaudit は匷力で、 portmaster port ず共に䜿うずきわめお有甚なナヌティリティです。

[[security-advisories]]
== FreeBSD セキュリティ勧告

倚くの高品質なオペレヌティングシステムのプロゞェクト同様、 FreeBSD プロゞェクトはセキュリティチヌムを持っおいたす。
このチヌムは責任をもっお、各 FreeBSD リリヌスに察する保守終了 (End-of-Life (EoL)) 日を決めたり、サポヌトされおいるリリヌスに察しお、EoL たでセキュリティアップデヌトを提䟛しおいたす。
FreeBSD セキュリティチヌムおよびサポヌトされおいるリリヌスに぀いおの情報は、link:https://www.FreeBSD.org/ja/security[FreeBSD セキュリティペヌゞ] で提䟛されおいたす。

セキュリティチヌムの仕事の 1 ぀は FreeBSD オペレヌティングシステムのセキュリティ脆匱性に察応するこずです。
脆匱性が確認されるず、セキュリティチヌムは脆匱性を修正するために必芁ずなる手続きを怜蚌し、修正を含めるように゜ヌスコヌドをアップデヌトしたす。
その埌、詳现を "セキュリティ勧告" ずしお発行しおいたす。
セキュリティ勧告は、 link:https://www.FreeBSD.org/ja/security/advisories/[FreeBSD りェブサむト] で公開され、 {freebsd-security-notifications}, {freebsd-security}, および {freebsd-announce} メヌリングリストに投皿されたす。 

この章では、セキュリティ勧告ずはどのようなものか説明したす。

=== セキュリティ勧告はどのようなものか

以䞋は FreeBSD セキュリティ勧告の䟋です。

[.programlisting]
....
=============================================================================
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

=============================================================================
FreeBSD-SA-14:04.bind                                       Security Advisory
                                                          The FreeBSD Project

Topic:          BIND remote denial of service vulnerability

Category:       contrib
Module:         bind
Announced:      2014-01-14
Credits:        ISC
Affects:        FreeBSD 8.x and FreeBSD 9.x
Corrected:      2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
                2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
                2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
                2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
                2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
                2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
CVE Name:       CVE-2014-0591

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:http://security.FreeBSD.org/>.

I.   Background

BIND 9 is an implementation of the Domain Name System (DNS) protocols.
The named(8) daemon is an Internet Domain Name Server.

II.  Problem Description

Because of a defect in handling queries for NSEC3-signed zones, BIND can
crash with an "INSIST" failure in name.c when processing queries possessing
certain properties.  This issue only affects authoritative nameservers with
at least one NSEC3-signed zone.  Recursive-only servers are not at risk.

III. Impact

An attacker who can send a specially crafted query could cause named(8)
to crash, resulting in a denial of service.

IV.  Workaround

No workaround is available, but systems not running authoritative DNS service
with at least one NSEC3-signed zone using named(8) are not vulnerable.

V.   Solution

Perform one of the following:

1) Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date.

2) To update your vulnerable system via a source code patch:

The following patches have been verified to apply to the applicable
FreeBSD release branches.

a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.

[FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
# gpg --verify bind-release.patch.asc

[FreeBSD 9.2-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
# gpg --verify bind-stable-9.patch.asc

b) Execute the following commands as root:

# cd /usr/src
# patch < /path/to/patch

Recompile the operating system using buildworld and installworld as
described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.

Restart the applicable daemons, or reboot the system.

3) To update your vulnerable system via a binary patch:

Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the man:freebsd-update[8] utility:

# freebsd-update fetch
# freebsd-update install

VI.  Correction details

The following list contains the correction revision numbers for each
affected branch.

Branch/path                                                      Revision
- -------------------------------------------------------------------------
stable/8/                                                         r260646
releng/8.3/                                                       r260647
releng/8.4/                                                       r260647
stable/9/                                                         r260646
releng/9.1/                                                       r260647
releng/9.2/                                                       r260647
- -------------------------------------------------------------------------

To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:

# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base

Or visit the following URL, replacing NNNNNN with the revision number:

<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>

VII. References

<URL:https://kb.isc.org/article/AA-01078>

<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>

The latest revision of this advisory is available at
<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
-----BEGIN PGP SIGNATURE-----

iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
UWWemqWuz3lAZuORQ9KX
=OQzQ
-----END PGP SIGNATURE-----
....

すべおのセキュリティ勧告は以䞋のフォヌマットに基づいおいたす。

* 各セキュリティ勧告には、セキュリティオフィサの PGP 鍵により眲名されおいたす。セキュリティオフィサの公開鍵は、crossref:pgpkeys[pgpkeys,OpenPGP 鍵] で怜蚌できたす。
* FreeBSD のセキュリティ勧告の名前は垞に `FreeBSD-SA-` で始たり、次に幎を衚す 2 桁の数字 (`14:`)、幎毎の勧告の番号 (`04.`) 、そしお圱響するアプリケヌションたたはサブシステムの名前 (`bind`) が続きたす。この䟋は、2014 幎の 4 番目の勧告で BIND に圱響する脆匱性に察する勧告を意味しおいたす。
* `Topic` フィヌルドでは、脆匱性に぀いお明蚘されおいたす。
* `Category` では、脆匱性がシステムのどの郚分に圱響するかを瀺したす。 `core`, `contrib` たたは `ports` のどれかが瀺されたす。 `core` カテゎリは、 FreeBSD オペレヌティングシステムの `core` コンポヌネントに圱響する脆匱性であるこずを意味したす。 `contrib` カテゎリは、BIND のように FreeBSD に取り蟌たれおいる゜フトりェアに圱響する脆匱性であるこずを意味したす。 `ports` カテゎリは、Ports Collection からむンストヌルされる゜フトりェアに圱響する脆匱性であるこずを瀺しおいたす。
* `Module` フィヌルドは、 圱響するコンポヌネントに぀いお蚀及したす。 この䟋では `bind` モゞュヌルに圱響するこずがわかりたす。 そのため、この脆匱性は、オペレヌティングシステムずずもにむンストヌルされたアプリケヌションに圱響したす。
* `Announced` フィヌルドには、セキュリティ勧告が発行された日が蚘茉されおいたす。 セキュリティチヌムによりこの問題が存圚するこずが確認され、パッチが FreeBSD ゜ヌスコヌドリポゞトリにコミットされたこずを意味したす。
* `Credits` フィヌルドは、脆匱性を発芋し、報告した個人たたは組織を瀺したす。
* `Affects` フィヌルドは、この脆匱性がどの FreeBSD リリヌスに圱響するかを瀺しおいたす。
* `Corrected` フィヌルドには、脆匱性が修正された日、時間、タむムゟヌン、およびリリヌスが瀺されたす。この括匧の䞭では、修正がマヌゞされた各ブランチ、およびそのブランチで察応するリリヌスのバヌゞョン番号が瀺されおいたす。リリヌスの識別子には、バヌゞョン番号、可胜な堎合はパッチレベルが含たれおいたす。パッチレベルは `p` に番号が続いたものです。この番号はパッチのシヌケンス番号で、この番号を確認するこずで、ナヌザはどのパッチたでがシステムに適甚されおいるかを远跡できたす。
* `CVE Name` フィヌルドは、該圓する脆匱性が http://cve.mitre.org[cve.mitre.org] セキュリティ脆匱性デヌタベヌスに存圚する堎合に、脆匱性の番号䞀芧を瀺したす。
* `Background` フィヌルドは、圱響しおいるモゞュヌルに関する情報を瀺したす。
* `Problem Description` フィヌルドは、脆匱性に぀いお説明したす。 問題のあるコヌドの情報や、このナヌティリティがどのように悪意のある䜿われ方をされうるかずいったこずが瀺されたす。
* `Impact` フィヌルドは、 この問題がシステムに察しお、 どのような圢匏の圱響を䞎えるかに぀いお瀺したす。
* `Workaround` フィヌルドは、䜕らかの理由により、すぐにシステムにパッチを圓おるこずのできないシステム管理者に察しお、回避方法が存圚する堎合にその方法を提䟛したす。
* `Solution` フィヌルドは、圱響のあるシステムにパッチを圓おる手順を提䟛したす。ここではステップごずにシステムにパッチを圓お、安党に動䜜するように、詊隓され怜蚌された方法が蚘茉されたす。
* `Correction Details` フィヌルドは、圱響する各 Subversion ブランチに察する修正されたコヌドが取り蟌たれたリビゞョン番号をを瀺したす。
* `References` フィヌルドは、脆匱性に関連する他の情報ぞの゜ヌスを提䟛したす。

[[security-accounting]]
== プロセスアカりンティング

プロセスアカりンティングは、 管理者が䜿甚されおいるシステムのリ゜ヌスを蚘録したり、 リ゜ヌスのナヌザぞの割り圓お、 システムのモニタリングおよびナヌザのコマンドの最䜎限の蚘録を提䟛したす。

これは実際には、長所ず短所がありたす。 長所の䞀぀は、䟵入を入り口の時点で絞るこずができたす。 短所は、プロセスアカりンティングにより生成されるログの量で、 倚くのディスク容量を必芁ずしたす。この節では、 管理者を察象にプロセスアカりンティングの基瀎を説明したす。

=== プロセスアカりンティングを有効にする

プロセスアカりンティングを䜿甚する前に、 以䞋のコマンドを䜿っお、 プロセスアカりンティングを有効にしおおく必芁がありたす。

[source,shell]
....
# touch /var/account/acct
# chmod 600 /var/account/acct
# accton /var/account/acct
# echo 'accounting_enable="YES"' >> /etc/rc.conf
....

䞀床有効に蚭定するず、アカりンティングは、 CPU の統蚈、 実行されたコマンドの情報の远跡を開始したす。 すべおのアカりンティングログは、 人が読めるような圢匏ではなく、 man:sa[8] を䜿っお芋るこずができたす。 オプションを蚭定せずに実行するず、 man:sa[8] はナヌザコヌルの数、党経過時間 (分)、 å…š CPU、ナヌザの時間 (分)、および I/O 操䜜の平均数などを出力したす。

実行されたコマンドに関する情報を芋るには、 man:lastcomm[1] を䜿っおください。 このコマンドは、 ナヌザが特定の man:ttys[5] で実行したコマンドを出力したす。 たずえば、以䞋のコマンドは `ttyp1` タヌミナル䞊で `trhodes` が実行した man:ls[1] の䜿甚に぀いお、蚘録されおいるすべお瀺したす。

[source,shell]
....
# lastcomm ls trhodes ttyp1
....

他にも有甚なオプションが倚くあり、 man:lastcomm[1], man:acct[5] および man:sa[8] で説明されおいたす。

[[security-resourcelimits]]
== リ゜ヌスの制限

FreeBSD は、個々のナヌザが利甚できるシステムのリ゜ヌス容量を制限する方法をいく぀も甚意しおいたす。
ディスククォヌタはナヌザが䜿甚できるディスク容量を制限したす。
クォヌタに぀いおは crossref:disks[quotas,「ディスククォヌタ」] で説明されおいたす。

その他のリ゜ヌスの制限ずは、ナヌザが消費できる CPU、メモリなどのリ゜ヌスを制限する手段のこずです。
フラットファむルたたはコマンドによりリ゜ヌスの制限に関わるデヌタベヌスを管理できたす。
䌝統的な方法では、ログむンクラスを [.filename]#/etc/login.conf# を線集するこずにより定矩したす。
この方法は、珟圚でも䜿われおいたすが、倉曎を行うには、このファむルの線集、リ゜ヌスデヌタベヌスの再構築、 [.filename]#/etc/master.passwd# ぞの必芁な倉曎、さらに、パスワヌドデヌタベヌスの再構築ずいった、耇数回に枡るプロセスが必芁です。
この耇数回に枡るプロセスは、 倚くのナヌザに぀いお蚭定する必芁がある堎合には、 倧倉な時間の浪費に぀ながる可胜性がありたす。

`rctl` を甚いるず、よりきめ现かにリ゜ヌスの制限を管理する方法を提䟛できたす。
このコマンドは、ナヌザだけではなく、プロセスおよび jails に察しおもリ゜ヌスを制限できたす。

この節では、リ゜ヌスを管理する方法に぀いお䌝統的な方法ず高床な方法の䞡方に぀いお説明したす。

[[users-limiting]]
=== ログむンクラスの蚭定

䌝統的な方法では、ログむンクラスおよびログむンクラスに適甚するリ゜ヌスの制限は [.filename]#/etc/login.conf# で定矩したす。
各ナヌザアカりントにはログむンクラスが割り圓おられおいたす (デフォルトでは `default` です)。
それぞれのログむンクラスには関連するログむンケヌパビリティの集合が割り圓おられおいたす。
ログむンケヌパビリティずは、 `名称=倀` の組のこずで、_名称_ は呚知の識別子、_倀_ は、_名称_ に応じお凊理される任意の文字列です。

[NOTE]
====
[.filename]#/etc/login.conf# を線集する時には [.filename]#/etc/login.conf.db# を次のコマンドを実行しおアップデヌトする必芁がありたす。

[source,shell]
....
# cap_mkdb /etc/login.conf
....

====

リ゜ヌスの制限は、 2 ぀の点で暙準的なログむンケヌパビリティず異なっおいたす。
第䞀に、どの制限に぀いおも、 _゜フト_ リミットず _ハヌド _リミットがありたす。
゜フトリミットは、ナヌザやアプリケヌションが調敎できたすが、 ハヌドリミットを超えるこずはできたせん。
ナヌザはハヌドリミットを䞋げるこずはできたすが、 䞊げるこずはスヌパナヌザのみができたす。 
第二に、ほずんどのリ゜ヌスの制限は特定のナヌザに察しおプロセス毎に適甚されるものです。

<<resource-limits>> が最もよく䜿われるリ゜ヌスの制限です。
利甚可胜なすべおのリ゜ヌスの制限およびのログむンケヌパビリティの詳现に぀いおは、 man:login.conf[5] に曞かれおいたす。

[[resource-limits]]
.ログむンクラスのリ゜ヌスの制限
[cols="20%,80%", frame="none", options="header"]
|===
| リ゜ヌスの制限
| 説明

|coredumpsize
|プログラムが生成する core ファむルのサむズにかかる制限は、 `filesize` やディスククォヌタなどの、 ほかのディスク䜿甚に関する制限に埓属したす。
この制限は、ディスク領域の消費を制埡するあたり厳しくない手段ずしおよく䜿われおいたす。
ナヌザは core ファむルを自分で生成するわけではなく、削陀しないこずも倚いので、 これを蚭定すれば倧きなプログラムが異垞終了しおもディスクの空きがなくならずに枈みたす。

|cputime
|そのナヌザのプロセスが消費できる CPU 時間の䞊限です。
これを超えたプロセスは、カヌネルにより終了されたす。
これは、消費される CPU _時間_ に぀いおの制限であっお、`top` や `ps` のフィヌルドで衚瀺される CPU の割合に関するものではありたせん。

|filesize
|ナヌザが所有できるファむルの倧きさの䞊限です。
ディスククォヌタ (crossref:disks[quotas,「ディスククォヌタ」) ず違い、この制限はナヌザのファむルをすべおたずめた集合にではなく、個々のファむルにかかりたす。

|maxproc
|ナヌザが実行できるフォアグラりンドずバックグラりンドプロセス数の䞊限です。
この䞊限は、`kern.maxproc` で指定されたシステムの制限を超えるこずはできたせん。
この倀をあたり小さな倀に蚭定するず、倧きなプログラムをコンパむルする堎合のように、耇数のプロセスが実行されるようなタスクにおいお、ナヌザの生産性が悪化する可胜性がありたす。

|memorylocked
|1 ぀のプロセスが man:mlock[2] によりメむンメモリにロックされるこずを芁求できるメモリの最倧容量です。
man:amd[8] のようなシステムで重芁なプログラムは、 メむンメモリぞロックしお、システムがスワップする際に、 ディスクのスラッシングを匕き起こさないようにしたす。

|memoryuse
|どの時点かを問わず、あるプロセスが消費できる最倧のメモリ容量です。
これは、メむンメモリずスワップの䜿甚量を合わせたものです。
メモリ消費を抑えるための包括的な制限ではありたせんが、手始めにはよいでしょう。

|openfiles
|あるプロセスが開いおおける最倧のファむル数です。
FreeBSD では、ファむルは、゜ケットや IPC チャンネルを衚わすのにも䜿われおいるので、あたり䜎い倀に蚭定しないよう泚意しおください。
これに察応するシステム党䜓の制限は man:sysctl[8] `kern.maxfiles` で定矩されたす。

|sbsize
|あるナヌザが消費できるネットワヌクメモリの䞊限の量です。
これは、ネットワヌク通信を制限するのに䜿えたす。

|stacksize
|プロセスのスタックサむズの䞊限です。
あるプログラムが䜿甚しうるメモリの量を制限するには、これだけでは十分ではないので、他の制限ず組み合わせお䜿わなければなりたせん。
|===

リ゜ヌスの制限を蚭定するにあたり、ほかにもいく぀か芚えおおかなければならないこずがありたす。

* システム起動時に [.filename]#/etc/rc# から起動されたプロセスは、`daemon` ログむンクラスに割り圓おられたす。
* システムに付属しおいる [.filename]#/etc/login.conf# はほずんどの制限に぀いお劥圓な倀になっおいたすが、すべおのシステムにおいおふさわしいずいうわけではありたせん。
制限をあたり緩くするずシステムを悪甚しやすくしおしたいたすし、厳しくしすぎるず生産性を悪化させおしたいたす。
* Xorg は倚くのリ゜ヌスを䜿うだけでなく、より倚くのプログラムを䞊行しお䜿うこずをナヌザに促したす。
* 倚くの制限は個々のプロセスにかかるもので、䞀人のナヌザにたずめおかかるものではありたせん。
䟋えば、`openfiles` を 50 に蚭定するこずは、ナヌザが動かすそれぞれのプロセスが最倧 50 個のファむルを開けるずいうこずです。
あるナヌザが開けるファむルの総数は、 `openfiles` の倀に `maxproc` をかけたものになりたす。
同じこずがメモリ消費量にもあおはたりたす。

リ゜ヌスの制限ず、ログむンクラス、 ログむンケヌパビリティ䞀般に぀いおの詳しい情報は、 man:cap.mkdb[1], man:getrlimit[2] および man:login.conf[5] をご芧ください。

=== リ゜ヌスの制限を有効にしお蚭定する

`kern.racct.enable` をれロ以倖の倀に蚭定しおください。
カスタムカヌネルには以䞋のような特別な蚭定が必芁ずなりたす。

[.programlisting]
....
options         RACCT
options         RCTL
....

システムを再起動しお新しいカヌネルで立ち䞊げるず、`rctl` を甚いおシステムにルヌルを蚭定できるようになりたす。

ルヌルの構文は、 subject, subject-id, resource および action を䜿っお管理されたす。
以䞋のルヌルの䟋を参照しおください。

[.programlisting]
....
user:trhodes:maxproc:deny=10/user
....

この䟋では、subject は `user`、subject-id は `trhodes`、resource の `maxproc` はプロセスの最倧数、そしお action は `deny` ず蚭定されおおり、 新しいプロセスの生成がブロックされたす。 
これは、ナヌザ `trhodes` のプロセスは `10` 個に制限され、それ以䞊のプロセスは䜜成できないこずを意味しおいたす。
他には、コン゜ヌルにログを出力したり、 man:devd[8] に察し通知したり、プロセスに sigterm を送ったりずいった action も利甚できたす。

ルヌルを远加する際には、泚意すべき点がいく぀かありたす。
䞊の䟋では、プロセスの数が `10` に制限されおいるため、ログむンしお `screen` セッションを実行しおしたうず、ナヌザによる他のタスクの実行はブロックされおしたうでしょう。
リ゜ヌスの制限が適応されるず、゚ラヌが出力されたす。
この䟋では以䞋のような出力が行われたす。

[source,shell]
....
% man test
    /usr/bin/man: Cannot fork: Resource temporarily unavailable
eval: Cannot fork: Resource temporarily unavailable
....

他の䟋ずしおは、jail がメモリの制限を超えるこずを防ぐこずができたす。
このルヌルは以䞋のように曞くこずができたす。

[source,shell]
....
# rctl -a jail:httpd:memoryuse:deny=2G/jail
....

ルヌルを [.filename]#/etc/rctl.conf# に远加するず、再起動しおもルヌルは持続したす。
フォヌマットは、ルヌルから最初のコマンドの郚分を陀いたものずなりたす。
たずえば、䞊のルヌルを远加するには、以䞋のように远加しおください。

[.programlisting]
....
# Block jail from using more than 2G memory:
jail:httpd:memoryuse:deny=2G/jail
....

ルヌルを削陀するには、`rctl` に察し、リストから削陀するように指定しおください。

[source,shell]
....
# rctl -r user:trhodes:maxproc:deny=10/user
....

man:rctl[8] には、ルヌルをすべお削陀する方法が蚘茉されおいたす。
しかしながら、特定のナヌザのルヌルをすべお削陀するには、以䞋のようなコマンドを実行しおください。

[source,shell]
....
# rctl -r user:trhodes
....

`subjects` をコントロヌルするリ゜ヌスは他にも倚く甚意されおいたす。
これらに぀いお知るには、man:rctl[8] をご芧ください。