LPIC202 備忘録と、これから受ける人には是非やって欲しいこと

- ※2018年11月ごろの記事になります

# 宣伝(2020/11/13)
一つ宣伝をさせてください。
現在、「もくもくオンライン勉強会」という勉強コミュニティを運営しています
創設から１年が経過し、より情報のやりとりが多くなり活発化するよう
メンバーを募集しています。コミュ独自でpythonとnodejsを活用して
BOTを開発し、いろいろな自動化を進めているので今後も便利になる成長のあるコミュです

👇詳細は以下にまとめましたので興味ある方は連絡ください
https://bosyu.me/b/G43e6INUpQw

# 注意書き(2020/11/5)
試験受験前の備忘録としてこの記事を作成しましたが
多くの誤字を確認しております。
そのため、11月末までに各種コマンドの誤字がないかなど確認する予定でおります。
が、もし時間がなく対応できなければ11月末で削除する予定です。
もし、誤字の箇所が見つかりましたら
気軽に「編集リクエスト」を頂ければと思います。
その都度確認して、適応して参ります。

#合格後の追記（11月10日）
##11月10日（土）午前の受験日を終えて、実は私...
- 実は私、2週間前に同様の試験を受けて不合格になっています。

#LPIC202合格しました。(2018/12/27)
 12月初めの試験には落ちました。
その時の敗北理由を考察すると、Ping-tで新しい単語（設定項目やコマンド、オプション）を
頭に入れることに無理中になっており、その設定はいつ使うのか、どういう書式で書くのか。
LPICレベル1と違う点では、コマンドよりサーバ内の設定項目やその書式を良く聞かれます。
　
##これからLPICレベル２をとる人へ伝えたい事
　私は未経験からLPIC1と２の取得を目指しました。サーバの知識、技術はほとんどありません。
構築環境がなければ「`AWSの無料EC2を使ってみよう`」
設定項目や書式を問われることが多い為
「`サーバ構築して、各サーバのconfファイル等の中身を知ろう`」

　私は、独自ドメインを購入して
bind、apache、samba、postfix、dovecot位のサーバ構築の勉強をした程度です。
思い切って、安いドメインを購入して、やる気を高める為に尻に火をつけるのもありかと思います。

##今回のスコア:570点
- 12月27日 LPICスコアレポート（LPI Level 2 Exam 202)
    - ドメインネームサーバ-----------------75%
    - HTTPサービス-------------------------72%
    - ファイル共有--------------------------75%
    - ネットワーククライアントの管理------90%
    - 電子メールサービス--------------------62%
    - システムのセキュリティ---------------71%



##次の目標
- Githubの使い方を学ぶ（登録、導入済）
- AWS アーキテクト アソシエイト資格取得
- LPIC202内で学んだサーバを構築し、選出した上で独自ドメインで一年間運用


お付き合い頂きありがとうございました。
（以下「はじめに」から、試験を受けるまでの勉強記録、内容まとめになります。）

#はじめに（2018/11/12）
 先日、LPI201に合格しまして、次は202の試験合格目指して勉強を進めていきます。
勉強期間は３週間で、12月1日（土）進捗により12月2日（日）に受験する予定です。

前回のLPIC201勉強時より、
AmazonEC2の環境（１年間無料）を用意して勉強で使っています。
通勤時間１時間を資格勉強に活用し、１日２回（通勤、退勤）
Ping-Tで勉強した範囲内の問題をランダム60問解いて、
間違った部分の答え合わせと、説明を読んで理解を深めていく。
毎日の問題繰り返しの中で、後半部分の勉強最中でも
前半部分で勉強した問題を解くことで、記憶の定着を行なっていきたい。

##勉強予定
１週間目「ドメインネームサーバ」,「HTTPサーバ」,「ファイル共有」
２週間目：「ネットワーククライアントの管理」,「電子メールサービス」,「システムセキュリティ」
３週間目：仮想環境でサーバ構築とPing-Tでの反復練習
受験予定：2018/12/1

#勉強する上で使用したサイト
##勉強ツール

- [Ping-t](https://ping-t.com/)

##参考サイト
- [14日間でLPIC202に合格するための対策法](https://eng-entrance.com/lpic202)

- [Qiita - Postfixの設定確認をしてみる](https://qiita.com/emowl/items/06bdffa83e36b7dddd30)

#各サーバごとのコマンド
<details><summary>DNS</summary><viv>

- rndc
    - status
    - reload
    - halt
    - stop

</div></details>

<details><summary>WEB</summary><div>

- apache[2]ctl
    - start
    - stop
    - restart
    - graceful：安全に再起動
    - configtest
- httpd
    - -l静的
    - -M:動的＆静的


</div></details>

<details><summary>OpenLDAP</summary><div>

- slapadd
- slapcat
- slaptest
- slapindex
- slappasswd
- おおよそ共通なオプション
    - -v
    - d：デバッグレベル
    - -f
    - -c
    - -n
    - -b
- slapd
    - −４
    - -6
    - -d
    - -f
    - -u
    - -g
    - -r：ルートディレクトリ
- ldapsearch
    - -h
    - -x：SASLしようしない
    - -b：検索開始位置
    - -L
    - -LL
    - -LLL
</div></details>





#備忘録
##ドメインネームサーバ(主題207)
###207.1◆DNSサーバの基本的な設定

####★rndc（remote named daemon control)
- rndcコマンド：ローカルやリモートからnamedの設定や管理が行える。
- オプション
    - status：namedの状態表示
    - reload：サーバの設定再読み込みを行う（ゾーンは指定した単独ゾーンだけ再読み込み）
    - halt：namedを直ちに停止
    - stop：動的な更新等を保存してからnamedを停止

####★BIND（named）の設定ファイル

- 設定ファイルの場所
    - /etc/named.conf
- 構文チェックコマンド
    - named-checkconfigコマンド
- ステートメント（設定５項目）
    - options：namedのオプションの設定
    - acl：アクセス対象のIPアドレスとネットワークアドレスのリストを任意の名前で定義
    - controls：rndcコマンド（namedを操作する）のしようを許可するホストを指定
    - include：指定された外部ファイルを読み込み、設定ファイルに追加
    - zone：ゾーン（管理するドメインの範囲）を定義。（スレーブのゾーンファイル）

- optionsステートメントのオプション
    - directory：namedの作業ディレクトリ、named設定ファイル内の相対パスはここを起点とする
    - recursion [yes|no]：再帰的に問い合わせを受けつけるかの設定。yesならキャッシュサーバ
    - forwarders：自身が保持しないドメイン情報を転送するDNSサーバのアドレスを指定
    - forward [first|only]：問い合わせ失敗時の動作設定、(firtst)問い合わせする(only)しない
    - allow-query：問い合わせを受けつけるホストを指定
    - allow-recursion：再帰的問い合わせを受けつけるホスト指定
    - allow-transfer：ゾーン転送を許可するホスト指定、マスターはスレーブのアドレスを指定
    - blackhole：問い合わせを受け付けないホストを指定
    - version "文字列"
    
 ※acl（ステートメント）：access control list

####★/etc/named.confのログファイルの場所
- logファイルを指定指定ない場合、BINDはsyslogに送信する
    - （RedHat)/var/log/messages
    - （Debian）/ver/log/syslog

####★IPアドレスとホスト名の変換するコマンド（３種）
- nslookup：現在は非推奨されている
- dig：推奨されているコマンド、各種情報を詳細に得る
    - （HEADER部）status問い合わせの結果、flags実行して得られた返答
    - （QUESTION SECTION部）問い合わせた情報、リソースタイプ（A、MX、NS）
    - （ANSWER SECTION部）問い合わせた情報、TTL、リソースタイプ、アドレス情報
    - （ADDITIONAL SECTION部）追加で行なった名前解決の情報
- host：名前解決の結果のみ簡潔表示


####★各種DNSサーバ（２種）とその他
- PowerDNS
    - RDB(リレーショナルデータベース)やLDAP、BINDのゾーンをバックエンドに使用する
    - djbdnsと同様にDNSキャッシュサーバとコンテンツサーバの機能が分かれている
- djbdns
    - DNSキャッシュサーバとコンテンツサーバが分かれている。
    - RDBなどのバックエンドデータベースとしては使用できない
  
ソフトウェア

- dnsmasq：DNSキャッシュサーバとDHCPサーバなどの機能を持つソフトウェア

技術

- DNSSEC：公開鍵暗号方式の電子署名により、正当なDNSサーバであることを保証し、改竄されていないことを保証する技術






###207.2◆DNSゾーンの作成と保守
####★ドメインの名前解決情報を記載したゾーンファイル

- $で始まるディレクティブによる制御情報、リソースレコードの二つから構成される。
- ディレクティブ（２種）
    - ＄ORIGIN [ドメイン名]：ホスト名のみ(逆引き設定のホスト名の最後に「.」をつける)
    - ＄TTL [秒]：デフォルトTTL（Time To Live有効期間）を指定する

- リソースレコード（６種）
    - SOA(Start of Authority)
    - NS(Name Server)
    - MX(Mail Exchange)
    - A(Address)
    - CNAME（Canonical Name)
    - PTR（Pointer）：逆引きようにIPアドレスに対応するホスト名を定義するリソースタイプ

- SOAレコード
    - 必ずリソースレコードの最初に記載しなければならない。
    - 書式：＜ドメイン＞IN SOA ＜ネームサーバFQDN＞ ＜管理者メールアドレス＞（各更新秒数）

####★DNSサーバの主な２つの機能
- キャッシュサーバ機能
    - 名前解決検索要求を受け取り、他のDNSサーバに問い合わせを行う。
- コンテンツサーバ機能
    - 自身の管理するドメインの情報を公開する。

- ゾーンの種類（２種）
    - 正引きゾーン：名前（FQDN）からIPアドレスを検索
    - 逆引きゾーン：IPアドレスから名前（FQDN）を検索


####★ゾーンファイルに関するチェックコマンド
- named-checkzoneコマンド
    - 構文上の間違いを確認する
    - 整合性を確認する

####★バイナリ形式のゾーンファイルを人が読める形式（テキスト）に変換
- named-compilezonコマンド
    - スレーブ側のバイナリファイルを表示させ、raw形式をtext形式に変換する





###207.3◆DNSサーバの保護
####★送信元のなりすましや更新データの改竄を防止する技術
- TSIG（Transaction Signature）
    - 共通の秘密鍵
    - 正しく機能するには、クライアント（送信元）とサーバ（送信先）の時刻があっていることが必要
- TSIGの設定（共通鍵作成後の設定）
    - ⑴マスター/スレーブDNSの双方「/etc/named.conf」ファイルにkeyステートメントして設定
    - （１行目）ゾーン転送に伴うドメイン名
    - （２行目）使用する暗号化アルゴリズム
    - （３行目）secretに続けて共通鍵（” ")を設定
    - ⑵マスター/スレーブ双方のserverステートメントにお互いの「IPアドレス」「共通鍵名」を設定
- 使用用途
    - ゾーン転送でDNSサーバの偽装防止
    - ダイナミックDNSの不正アップデート防止
    - 不正クライアントからrndcコマンド操作防止
    
####★公開鍵と秘密鍵の作成
- dnssec-keygenコマンド
- （例）dnssec-keygen -a RSASHA1 -b 1024 -n zone testdomain.local.db
    - -a：暗号化のアルゴリズム指定（<デフォルト>RSASHA1、HMAC-MD5）
    - -b：鍵のビット長を指定（RSA鍵：512~2048、HMAC-MD5：1~512bit）
    - -n：鍵のオーナータイプを指定（<デフォルト>ZONE、HOST）
    - （DNSSECの場合）-n ZONE
    - （TSIGの場合）-n HOST
    
####★ゾーンファイルへの署名
- dnssec-signzoneコマンド

####★X509の認証書とDNSを紐づけで認証を行う
- DANE（DNS-based Authentication of Named Entities）
    - DNSSECの技術を応用して、認証にDNSを使う仕組み

- DNSSEC（DNS Security Extensions）
    - 公開鍵暗号方式を用いた電子署名で、正当なDNSでゾーン情報が正しいことを保証する
    
＜その他＞

- PAM（DNS Security Extensions）
    - プログラムが使用する様々な認証方式を一元的に管理するシステム

####★chrootでプロセスのルートディレクトを変更する
- namedコマンド
    - chrootするコマンド
    - BINDを不正に操作されても、変更後のディレクトリ内しか操作されなくする（chroot jail）
- オプション
    - -t：namedのルートディレクトリを指定
    - -u：namedの実行ユーザ
    - -g：namedの実行グループ





##HTTPサービス（主題208）
###208.1◆Apacheの基本的な設定

####★Apache
- 指定したディレクトリにアクセスがあった際、ユーザ認証を行なってアクセスを許可・拒否できる
- ユーザ認証２種
    - BASIC認証（基本認証）
    - ダイジェスト認証

####★htpassudコマンド
- BASIC認証を導入するために作業の一つ
- パスワードファイルの作成およびユーザ登録を行う
- ファイル名は「.htpasswd」が使われる。（外部からアクセス出来ないように）
- オプション
    - -c：パスワードファイルの新規作成
    - -D：ユーザの削除
    
####★【ディレクティブ】BASIC/ダイジェスト認証

ディレクティブ：apache専用の命令

- AuthType：認証方式を設定
    - （BASIC認証）Basic
    - （ダイジェスト認証）Digest
- AuthName：認可領域名を指定
    - 指定した文字を認証要求時にブラウザに送信され、画面に表示される
- AuthUserFile：作成したパスワードファイルを指定
- AuthGroupFile：作成したグループファイルを指定
- Require：認証対象とするユーザまたはグループ指定
    - （ユーザの場合）Require user ＜ユーザ名＞ ...
    - （グループの場合）Require group ＜グループ名＞...

####★【ディレクティブ】サーバ処理関係
ディレクティブ：apache専用の命令

- Timeout ＜秒＞：クライアントがリクエスト受け取ってから完了するまでの最大時間を指定
- KeepAlive ＜on/off＞：１つのTCP接続で複数リクエストを受けつけるかどうか
- MaxKeepAliveRequests：KeepAlive時に１つの接続で受けつける最大リクエスト数（０は無限）
- KeepAliveTimeout ＜秒＞：KeepAlive時に完了してからコネクションを接続せずに次の待つ最大時間
- StartSevers ＜子プロセス数＞：Apache起動時のhttpd子プロセス数を指定
- MinSpareServers＜子プロセス＞：httpd待機子プロセスの最小値指定
- MaxSpereServers＜子プロセス＞：　　　　　　　　　　　最大値指定
- MaxRequestWorkers＜子プロセス＞：同時に応答するリクエスト最大数
- MaxConnectionsPerChild＜リクエスト数＞：httpd子プロセスが処理するリクエスト最大数指定

####★キープアライブについて
- 説明
    - KeepAliveディレクティブで設定をon/offできる
    - ウェブサーバとクライアント間でTCP接続をキープすること
    - ひとるのTCP接続で複数のリクエストを処理する

####★Apache2.2とApache2.4の設定の違い
- Apache2.2
    - Order、Allow、Denyのディレクティブを使用していたが、Ver2.4では`非推奨`になった
- Apache2.4
    - Requireディレクティブが使われる。
    - 認証関連のモジュールは機能分化された（mod_authは「_basic」「~n_file」の二つに）

####★Apache2.4のRequireディレクティブで複数条件指定したい
- 複数したい時に使う３つのディレクティブ
    - <RequireAll>：全条件に合致したら真
    - <RequireAny>：いずれかの条件に合致したら真
    - <RequireNone>：全条件に合致しなければ真

####★Apacheの設定ファイル「httpd.conf」の構文チェックなど
- RedHarはapachectl、Debianはapache2ctlを使う。

####★apachectl（apache2ctl）コマンド
- オプション
    - start：起動
    - stop：終了
    - restart：再起動
    - graceful：安全に再起動
    - configtest：構文チェック

####★ディストリビューション別の設定ファイル
- RedHat
    - Apacheデーモン：httpd
    - 設定ファイル：/etc/httpd/conf/httpd.conf
- Debian
    - Apacheデーモン：apache2
    - 設定ファイル：/etc/apache2/apache2.conf

####★apacheの指定したディレクトリにアクセスがあった時のアクセス許可・拒否
- ダイジェスト認証を使用する場合んびhtdigestコマンドを使用してユーザ管理する
- htdigestコマンド
    - オプションなし：パスワード変更、ユーザの追加が行える
    - -c：パスワードファイルの新規作成で使う

####★Apache2.2のOrderディレクティブ（Order、Allow、Deny）
- 全許可
    - Order Deny,Allow
    - Order Allow,Deny / Allow from all
- 全拒否
    - Order Deny,Allow / Deny from all
    - Order Allow,Deny  
- 一部のみ許可
    - Order Deny,Allow / Deny from all / Allow from / IPアドレス｜ホスト名
    - Order Allow,Deny / Allow from / IPアドレス｜ホスト名
- 一部のみ拒否
    - Order Deny,Allow / Deny from / IPアドレス｜ホスト名
    - Order Allow,Deny / Allow from all /Deny from / IPアドレス｜ホスト名

####★2.2からApache2.4で推奨設定に移行する
- Requireディレクティブ
- エンティティ
    - 全許可：all granted
    - 全拒否：all denied

####★Apache2.4の主なモジュール一覧
- モジュール（１２種）
    - mod_authn_core：認証コア機能
    - mod_auth_basic：BASIC認証のフロントエンド
    - mod_auth_digest：ダイジェスト認証のフロントエンド
    - mod_authn_file：.htaccessでのユーザ認証機能を提供
    - mod_authz_core：認証コア機能
    - mod_authz_host：ホストベースのアクセス制御
    - mod_authz_user：ユーザベースのアクセス制御
    - mod_access_compat：ホストベースのアクセス制御（互換機能）
    - mod_so：動的（DSO）モジュールを組み込む機能提供
    - mod_ssl：SSLによる暗号化通信を提供
    - mod_perl：Perlの機能を提供
    - mpd_php：PHP機能を提供



####★Requireディレクティブ（モジュール３種）
- mod_authz_coreモジュールは、認可（アクセス制御）コア機能を提供
    - all granted：全許可
    - all denied：全拒否
    - env 環境変数：指定した環境変数が設定されていると許可
    - method httpメソッド：指定したhttpメソッドと合致すると許可
    - expr 表現：指定した表現に合致すると許可
- mod_authz_host：ホストベースのアクセス制御
    - ip IPアドレス（範囲）：指定したアドレス（範囲）を許可
    - host ホスト名：指定したホスト名を許可
- mod_authz_user：ユーザベースのアクセス制御
    - user　ユーザ名：ユーザを許可
    - group　グループ名：グループを許可
    - valid-user：正常に認証されたユーザを許可

####★ログ関連のディレクティブ（５種）
- HostnameLookups on/off：ログファイルに記載する際、IPアドレスを逆引きしホスト名で記録するかどうか
- LogFormat 書式 書式名：アクセスログに使われる書式を定義
- CustomLog ファイル名 書式名：アクセスログのファイル名とLogFormatで定義された書式を指定
- ErrorLog ファイル名：エラーログファイル指定
- LogLevel ログレベル：エラーログに記録するログのレベルを指定

####★外部設定ファイルに関するディレクティブ（２種）
- AccessFileName ファイル名：外部ファイル名を指定（デフォルト：.htaccess）
- AllowOverrride パラメータ：外部ファイルによるhttpd.confの上書きを許可
    - パラメータ一覧
    - AuthConfig：認証関係の設定を許可
    - Limit：Ver2.2系のOrder、Allow、Denyディレクティブの設定許可
    - All：全設定変更許可
    - None：　　　　禁止
 
####★バーチャルホストの種類
- 名前ベースのバーチャルホスト
    - NameVirtualHostディレクティブで受けつけるIPアドレスを設定する
    - １つのIPアドレスに複数のドメイン名を設定すること
    - 異なるドメイン名で同じIPアドレスを返すようにDNS（CNAMEで別名）を設定する必要有り
    - 「＊:80」等、IPアドレスを＊とすることで、全インターフェイスに対してサービス提供できる
- IPベースのバーチャルホスト
    - Listenディレクティブで受けつけるIPを設定する
    - 複数のIPアドレスにそれぞれ異なるドメイン名を設定する

####★「Server」で始まるディレクティブ
- ServerName サーバのホスト名 [:ポート番号]
    - Apacheが稼働しているホスト名とポート番号を指定
- ServerRoot ディレクトリ名
    - httpdが利用するファイル
    - 関連コマンド、ライブラリ、設置するベースディレクトリを指定
- ServerAdmin メールアドレス
    - 管理者のメールアドレスを指定（エラーページなどに表示）
- ServerAlias サーバの別名
    - 名前ベースのバーチャルホストでサーバの別名を指定

####★Apache「http.conf」の基本設定および、コンテンツに関するディレクティブ（８種）
- Listen [IPアドレス]:ポート番号：受けつけるIPアドレスとポート番号を指定
- User ユーザ名｜ユーザID：httpd子プロセスの実行ユーザを指定
- Group グループ名｜グループID：　　　　　　　実行グループを指定
- DocumentRoot ディレクトリ名：ウェブで公開するHTMLを保存する最上位のディレクトリを指定
- DirectoryIndex ファイル名：インデックスとして返すファイル名を指定
- Alias ディレクトリ パス：指定ディレクトにアクセスがあったら、パスで指定したファイル・ディレクトリを参照
- UserDir ディレクトリ名｜disabled：一般ユーザの公開ディレクトリを指定
- ErrorDOcument/エラーコード/ファイル名｜文字列｜URL：エラー発生時の処理を指定

####Apacheに静的に仕込まれているモジュールを確認する
- httpdコマンド
- オプション
    - -l：静的に組み込まれたモジュール表示
    - -M：静的＆動的に組み込まれたモジュール表示

####★クライアント側、サーバ側のどちらで処理するか
- Aliasディレクティブ：サーバ側
    - ウェブサーバが移行後の新しいページを直接クライアントに返す。
- Redirectディレクティブ：クライアント側
    - 新しいページのアドレスへリダイレクトするようにクライアントにメッセージを送る。

####★様々な言語で記述されたプログラムをwebサーバ上で実行する仕組み
- CGI（Common Geteway Interface）
- アクセスカウンターや掲示板のように、webページの内容を動的に変化させたい場合に利用する。
- 利用方法
    - ScriptAliasディレクティブでCGIプログラムのディレクトリを指定
    - LoadModuleディレクティブで必要なモジュールをロードする

####★名前ベースのVirtualhost使用時、サーバ名を別名で指定する方法
- serverAliasディレクティブを使用する

####★動的（DSO）モジュールを組み込むコマンド
- Apachrインストール後
- apxsコマンド
    - Apacheの動的モジュールのコンパイルとインストールができる

- 有効、無効の設定
    - apxsコマンドで組み込んだ後、LoadModuleディレクティブで設定する。

####★Redirectの書式
- Redirectディレクティブ
    - あるURLから異なるURLへリダイレクトするように指示する
- Redirect [ステータス] URL-path URL
- ステータス（主に２種）
    - permanent / 301：リソースが永久に移動したことを意味
    - temp / 302：一時的なリダイレクトを意味

###208.2◆HTTPS向けのApacheの設定
####★ssl.confの主なディレクティブ（８種）
- SSLCertificateKeyFile
    - サーバ秘密鍵のファイル指定
- SSLCertificateFile
    - サーバ証明書のファイル指定（中間CA証明書がある場合は１にまとめること）
- SSLVerifyClient
    - クライアント照明のレベル指定（「Require」でクライアント証明書が必須になる）
- SSLCACertificateFile
    - クライアント証明に使用するCA証明書のファイル指定
- SSLCACertificatePath
    - クライアント証明に使用するCA証明書のファイルが置かれたディレクト指定
- SSLProtocol
    - 使用可能なSSLプロトコル指定
- SSLCipherSuite
    - 使用可能な暗号スイートを指定
- SSLEngine
    - SSLのon/offを指定

####★ApacheでSSL/TLSを使う流れ
- 1)秘密鍵のファイル名を決め、鍵長（bit）で作成(ex:openssl genrsa -out[ファイル名] [鍵長]
- 2)サーバ証明書を認証局に作成してもらう
    - CSR（Certificate Signing Request：証明書の署名要求）を作成
    - (ex)openssl req -new -key [鍵の名前] -out [CSRファイル名]
- 3)認証局にCSRを提出し、中間CA証明書とサーバ証明書が認証局より発行
- 4)秘密鍵と中間証明書、サーバじ証明書をサーバ所定の場所へ設置する
- 5)ApacheのSSL/TLS用設定ファイル「ssl.conf」でファイルを指定する

####★自己署名をするコマンド
- opensslコマンド
    - CSR（サーバ証明書発行要求）は「req」サブコマンドを使う
    - 秘密鍵の作成は「genrsa」サブコマンドを使う


####★セキュリティ設定に関する主なディレクティブ（３種）
- ServerTokens
    - クライアントに返信する応答ヘッダんびどのような情報を含めるか指定
- ServerSignature
    - エラーメッセージなどのフッタ表示のon/offの指定
- TraceEnable
    - TRACEメソッドの使用のon/offの指定

####★自己認証局の構築コマンド
- バージョン
    - 〜OpenSSL1.0.2h1：CA.sh -newcaコマンド
    - OpenSSL1.1.0〜：CA.pl -newcaコマンド

####★SSL接続時にクライアントがwあから接続したいサーバを提示する
- SNI（Server Name Indication）技術
    - サーバだけでなく、クライアント側もSNIに対応していなければならない





###208.3◆キャッシュプロキシとしてのSquidの実装
####★Squidでアクセス制御を行うために設定ファイル（quid.conf）の「acl」で定義する
- alcコマンド：アクセスコントロールリスト（ACL）を定義し、アクセス制御する
    - src IPアドレス/マスク：クライアントIPアドレスとマスク
    - dst IPアドレス/マスク：宛先のIPアドレスとマスク
    - srcdomain ドメイン名：クライアントのドメイン名
    - dstdomain ドメイン名：宛先のドメイン名
    - port ポート番号：宛先ポート番号
    - arp MACアドレス：MACアドレス
    - proto プロトコル名：プロトコル
    - method メソッド名：HTTPリクエストのメソッド
    - time S|M|W|H|F|A 開始時間-終了：曜日と時間（S〜Aは日曜〜土曜）
    - url_regex 文字列：正規表現を使ったURL
    - urlpath_regex　文字列：（プロトコルとホスト名覗く）正規表現を使ったURL
    - proxy_auth ユーザ名：ユーザ認証の対象

####★Squidの設定ファイル「squid.conf」の主な設定項目
- http_port [IPアドレス:]ポート番号：Squidが利用するポート番号
- hierachy_stoplist 文字列：キャッシュを利用しない文字列指定
- maximum_object_size バイト数：キャッシュされるデータの最大サイズ
- minimum_object_size バイト数：　　　　　　　　　　　　最小サイズ
- maximum_object_size_in_memory バイト数：　　　　　　最大ファイルサイズ
- ipcache_size 数：IPアドレスの名前解決をキャッシュする数
- cache_dir ディレクトリ名：キャッシュディレクトリとパラメータ
- cache_mem バイト数：総メモリの最大量
- cache_log ファイル名：キャッシュのログ
- request_header_max_size バイト数：HTTPリクエストのヘッダ最大サイズ
- request_body_max_size バイト数：HTTPリクエストのボディ最大サイズ
- acl acl名 aclタイプ 文字列｜ファイル名：アクセスコントロールの定義
- http_access allow|deny ACL名：アクセスコントロールの制御
- auth_paeam 認証方式 program 認証プログラム パスワードファイル：ユーザ認証の方式など設定

####★http_accessの設定について
- 設定した条件は上から順に処理されていく
    - １つの条件にマッチしたら、それ以降の条件にチェックされない
- 最終行の定義に応じて、クライアントからの通信（全ての条件にマッチしなかった通信）が制御される。
- 最終行の定義
    - 最終行「allow」：拒否（条件にマッチしなかった通信は全て）
    - 最終行「deny」 ：許可

####★「/var/spool/squid」について
- 直下に作成されるディレクトリ名の範囲
- （例）chache_dir ufs /var/spool/squid 100 16 256
    - 00~0F
    - 16個のディレクトリ、256個のサブディレクトリ




###208.4◆Nginxの実装
####★nginx.confの主なディレクティブ（１２種）
- http{}：httpサーバとしての設定（main内で使用）
- server{}：バーチャルホストの設定（http内で使用）
- location プレフィックス URIのパスの条件{}：条件にマッチするリクエストURIの設定（server,location）
- listen IPアドレス:ポート;：リクエストを受けつけるIPアドレスとポート番号を指定(server）
- server_name 名前...;：バーチャルホストの名前指定（server）
- index ファイル名...;：インデックスとして返すファイル名指定（http,server,location)
- root パス;：Webで公開するHTMLを保存する最上位のディレクトリ（ドキュメントルート）指定（http,server,location）
- proxy_pass_ URL;：プロキシ先の指定（location）
- proxy_set_header フィールド 値;：送られるリクエストヘッダフィールドの再定義、追加(http,server,location)
- proxy_pass_header フィールド;：クライアントへの通信を許可するヘッダフィールド指定(http,server,location)
- fastcgi_pass IPアドレス;ポート;：FastCGIサーバの指定（location)
- fastcgi_param パラメータ 値;：FastCGIサーバに渡すパラメータの設定の指定(http,server,location)

####★nginx.confファイルの構文チェック
- nginx -tコマンド
    - 構文チェックする









   
##ファイル共有（主題209)
###209.1◆Sambaサーバの設定
####★Sambaの設定ファイル
- /etc/samba/smb.conf
- sambaとは
    - SMB（Server Message Block）プロトコルを使ったサービスを提供するシステム

####★Sambaが提供する機能
- Samba3
    - ファイルサーバ
    - プリントサーバ
    - WINSサーバ
    - ドメインコントローラ（NT）
    - ActiveDirectoryドメインに参加
    - Microsoftネットワーククライアント
- Samba4（追加機能）
    - ドメインコントローラー（ActiveDirectory）

####★/etc/samba/smb.confの特別なセクション（３種）
- ３つのセクション
    - global：Samba全般
    - homes：ユーザのホームディレクトリを共有するため
    - printers：共有プリンタ

####★「特別なセクション」global
- 主な設定項目
    - log file = ファイル名
    - log level = レベル：数字が大きいほど詳細に出力される
    - max log size = サイズ：ファイルが制限値を超えたら新しいファイルを作る（０は無制限）KB単位

- 全般設定に関わる主な設定
    - workgroup = ワークグループ名：所属するワークグループ指定
    - server string = 文字列：ブラウジングする際に表示するサーバの説明
    - netbios name = NetBIOS名：SambaサーバのNetBIOS名指定
    - browseable = yes|no：ブラウジングする際に表示するかどうか。表示されてなくてもアクセス可
    - wins support = yes|no：SambaサーバをWINSサーバとして動作させるか
    - wins server = IPアドレス：WINSサーバが存在する場合、IPアドレスを指定
    - hide dot files = yes|no：「.」で始まるファイルを隠すかどうか
    - logon script = スクリプトファイル名：ログオン後に実行されるスクリプトを指定

- パスワードに関する設定項目
    -  username map = ファイル名：ユーザ名のマッピング情報を格納したファイル
    -  guest account = ゲストユーザ名：ゲスト認証を許可する場合のユーザ名を指定
    -  map to guest = Never｜Bad User｜Bad Password：Sambaユーザとして認証できなかった時の対応
    -  ※(Never)ゲスト認証を許可しない(BadUser)存在しないユーザはゲスト認証とする(BadPassword)パスワードミスはゲストととする
    -  encrypt passwords = yes|no：暗号化されたパスワードを使用するかどうか
    -  unix password sync = yes|no：LinuxとSambaのパスワードを同期させるかどうか
    -  passwd program = yes|no：Samba側でパスワードを変更した際に実行するプログラム指定(uni password sync有効が条件）
    -  passwd chat = 文字列：パスワードプログラム実行時の応答内容を指定
    -  null passwords = yes|no：空のパスワードを許可するかどうか

- 認証方式に関する設定項目
- security = ：認証方法を設定
    - user：ユーザレベルでの認証
    - domain：NTドメインにおいて、ドメインコントローラを使用し認証
    - ads：Active Directoryドメインにおいて、ドメインコントローラを使用し認証
- passdb backend = 認証方式：Samba3.0以降、security = userの場合複数の認証方式設定可能
    - userの場合：smbpasswd、tdbsam、ldapsam
- smb passwd file = ファイル名：
    - security = userの場合：smbpasswdで認証を行う際のパスワードファイル指定
- password server ~ NetBIOS名｜IPアドレス：
    - security = [ads|domain|server]の場合：認証を別のサーバで行う際、パスワードサーバの指定

- Winbind関連の設定項目
    - idmap config * :backend=バックエンド：idmap機構で使用するバックエンドの指定）（tdb.ldap)
    - idmap config * :range = 最小UID・GID - 最大UID・GID：Linuxユーザに割り当てる範囲

- マスターブラウザ関連の設定項目
    - os level = 数値：ブラウザ選定時に宣言する優先度を指定（数値が大きいほど優先度は高い）
    - local maste = yse|no ：ブラウザ選定時に参加するかどうか
    - preferred master = yes|no：ブラウザ選定を要求するかしないか指定

####★「特別なセクション」hpmes、printers

- 名前の関する設定項目
    - comment = コメント：ブラウジングした際に表示される説明を指定
    - path = ディレクトリ名：共有ディレクトリのパスを指定
    - writable = yes|no：書き込みを許可
    - read only = yes|no：読み取り専用
    - write list = ユーザ名|@グループ名：writableなどで書き込み拒否されていても、書き込みできるユーザ
    - valid users = ユーザ名|@グループ名：アクセス可能なユーザ指定
    - guest ok = yes|no(public = yes|no)：ゲストログインを許可するか、yesはパスワードなしでゲストとしてログインさせる
    - hide files = /ファイル名/：表示させたくないファイルやディレクトリを指定。アクセス可能
    - veto fukes = /ファイル名/：表示させたくないファイルやディレクトリを指定。アクセス不可
    - force user = ユーザ名：認証に関係なく、共有内では指定したユーザの権限で作業ができる
    - force group = グループ：認証に関係なく、　　　　　　　　 グループの権限で作業ができる

- パーミッション関連の設定項目
    - create mask = 値：ファイル適用可能なパーミッションを指定
    - force create mode = 値：必ずファイルに適用されるパーミッションを指定
    - directory mask = 値：ディレクトリに適用可能なパーミッションを指定
    - force directory mode = 値：必ずディレクトリに適用されるパーミッションを指定

####★「特別なセッション」printers
- 共有のプリンタの設定
    - printable = yes
    - print ok = yes

- [print$]
    - Windowsクライアントに自動的にドライバをダウンロードさせる機能

####★Samba3.0系で使えるユーザ認証方式（３種）
- smbpasswd
    - テキスト形式のパスワードファイルを使用する
- tdbsam
    - バイナリ形式のデータベースを使用する
- ldapsam
    - LDAPサーバを使用する

####★Samba2.2系とSamba3.0系の比較
- samba2.2
    - ユーザ認証：smbpasswd方式
    - パスワード管理：テキスト形式
    - パスワードファイル指定：設定項目「smb passwd file」
    - ユーザ管理：smbpasswdコマンド
- samba3.0
    - ユーザ認証：３種
    - 認証方式の設定：設定項目「passdb backend」
    - ユーザ管理：pdbeditコマンド

####★nmblookupコマンド
- マスターブラウザの検索、ワークグループ内のホスト検索、NetBIOS名の問い合わせを行う
- オプション
    - -M：マスターブラウザの検索
    - -A：引数をIPアドレスとみなす（指定されたIPアドレスのMACアドレスやNetBIOS名などを表示）

####★smbpasswdコマンド
- sampasswd
    - Sambaユーザの管理を行う
- オプション
    - なし：パスワード変更
    - -a：追加
    - -x：削除
    - -e：有効（無効になっているSambaユーザを有効にする）
    - -d：無効

####★Samba3.0系のpdbeditコマンド
- pdbedit
    - smbpasswdを含む、色々な認証方式を使用することができるようになった
- オプション
    - -L：Sambaユーザの一覧表示
    - -a：ユーザ追加
    - -x：ユーザ削除

　※smb.conf「sevurity = user」：ユーザ認証を行うために必要な設定

####★SambaサーバをActiveDirectoryドメインに参加させる主な設定項目
- workgroup = ドメイン名：ActiveDirectoryドメインのNetBIOS名の指定（短いADドメイン名）
- realm = レルム名：ActiveDirectoryドメイン名（レルム名）の指定（大文字でFQDN指定）
- security = 動作モード：Sambaの動作モードの指定、ActiveDirectoryと連携する際は「ads」を指定

- sAmba4から追加される動作モード
    - server role：securityと同様

- security = ads
    - ADドメインのドメインコントローラ（自サーバとは別）を使用して認証を行う設定

- ActiveDirectoryに参加させるコマンド
    - net ads joinコマンド

####★Samba4でアクセスする時に使うコマンド
- CIFS（Common Internet File System）
    - Windows共有フォルダ、Sambaの共有ディレクトリにアクセスするために使う
- CIFSを使用するためのコマンド
    - smbclientコマンド
    - mount -t cifsコマンド（=mount.cifsコマンド）

####★lmhostsファイル
- windowsネットワーク上で、ホストの「NetBIOS名とIPアドレスの名前解決」に使われる
- 配置場所
    - /etc/samba/lmhosts（smb.confと共に置かれている）
- samba3
    - WINSサーバで名前解決し、できなかった時にlmhostsファイルが使われる
- samba4
    - DNSによって名前解決が行われる（WINSサーバの名前解決もサポートされている）

####★Winbind機能の説明
- ３つの機能
    - windowsユーザのSIDを、LinuixユーザのUID・GIDにマッピングする
    - デーモン名：winbindd
    - Samba側でWindowsドメインの既存のユーザ情報を利用する

####★samba-toolコマンド
- Samba4のsamba管理ツール
- AD管理やDNS管理が行える
- サブコマンド
    - dns：DNS管理を行う
    - domain：ドメイン管理を行う
    - testparm：設定ファイルの構文チェックを行う
    - user：ユーザーの管理を行う

####★smbcontrolコマンド
- Sambaの主要なデーモン（smbd、nmbd、winbindd）にメッセージを送ることができるプログラム
- 対象
    - all：smbd,nmbs,winbindd全てのプロセスにブロードキャスト（~samba3.3はsmbdのみ）
    - <デーモン>：指定されたデーモンのpidに記載されたプロセスIDにメッセージ
    - <PID>：直接指定したプロセスIDにメッセージ

- メッセージタイプ
    - close-share：指定した共有をクローズ（smbdのみ）
    - reload-config：指定したデーモンに設定の再読み込みをさせる
    - kill-client-ip：指定したIPアドレスのクライアントを切断（smbdのみ）
    - ping：指定した対象にpingし、応答が来た対象のPIDを表示

####★smbclientコマンド
- 書式
    - smbclient //ホスト名/共有名[オプション]
- オプション
    - -L ホスト名（--list=ホスト名）：指定したホストで利用可能な共有リソースを一覧表示
   　    - -N：認証を行わない
    - -U：ユーザ名（--user=ユーザ名）：接続するユーザを指定

####★smbstatusコマンド
- サーバに接続しているWindowsクライアントを確認するコマンド

####★testparmコマンド
- オプション
    - -s：構文チェックした後、Enterキーを押さなくてもsmb.confの内容表示
    - -v：　　　　　　　　　、smb.confに記述されていないパラメータも表示

####★nmbnlookupコマンド
- マスターブラウザの検索、ワークグループ内のホストの検索、NetBIOS名の問い合わせ
- オプション
    - -M：マスターブラウザの検索
    - -A：引数をIPアドレスをみなす。指定されたIPアドレスのMACアドレス、NetBIOS名など表示

####★Samba３とSamba４の違い
samba3
◆ドメインコントローラー機能

- 認証サーバ（パスワードサーバ、自サーバではない認証サーバ）
    - 認証サーバの設定：password server

- Samba3
    - NTドメインのドメインコントローラの構築が可能
    - 認証：NTLMv２
    - LDAP：連携が可能
    - 名前解決：WINSサーバに
- Samba4
    - Active Dirwctoryドメインのドメインコントローラの構築が可能
    - 認証：Kerberos
    - LDAP：内臓
    - 名前解決：DNS

◆ファイルサーバ

- Samba3
    - ファイルサービスはSMB2に対応（Samba3.6以降）
- Samba4
    - ファイルサービスはSMB2、SMB3に対応

####★Samba３のデーモン
- sabd
    - ファイル、プリンタの共有およびユーザ認証などSambaの基本的機能提供
- nmbd
    - ブラウジング機能（ネットないのコンピュータ一覧表示
    - WINSサーバ（NetBIOS名とIPアドレスの名前解決）
- winbindd
    - NSSを利用し、Winbindと呼ばれる機能
    - （Samba側からWindowsユーザの情報を利用可能にする）

####★Samba４（ADドメインコントローラーが稼働している時）のデーモン

- samba
    - ADドメインコントローラを構成するプログラム




###209.2◆NFSサーバの設定
####★NFSサーバ
- エクスポートするディレクトリ設定
    - /etc/exportsファイル
    
- ファイル変更を反映
    - /etc/init.d/nfs reload
    - exportfs -r

####★/etc/exportsファイル
- オプションと書式
    - ro：読み取り専用でエクスポート
    - rw：読み取り、書き込みを許可してエクスポート
    - no_root_squash：rootのリクエストをroot権限で実行
    - root_squash：rootのリクエストを匿名アカウント権限で実行
    - all_aquash：全てのリクエストを匿名アカウント権限で実行
    - sync：サーバとクライアント側の書き込みを同期
    - fsid：（NFSv4の時のみ）「fsid=0」とすることで擬似ファイルシステムのルートディレクトリであることを示す

- 書式
    - オプションが複数になる場合には「(rw,sync)」の様に「,」で区切る

####★exportfsコマンド
- エクスポートの状況を表示する
- オプション
    - -a：全ディレクトリをエクスポート、アンポートする
    - -r：全ディレクトリの再エクスポート
    - -u：ディレクトリをアンエクスポート
    - -v：詳細なエクスポート状況の表示（引数なしも同様）

####★NFSサーバが応答するまで再試行を続ける
- mountコマンドのマウントオプション
    - nolock：ファイルをロックしない
    - soft：ソフトマウント（トラブル発生時にタイムアウトしてプログラムを終了する）
    - hard：ハードマウント（NFSサーバが応答があるまで再試行を続ける）
    - retrans：ソフトマウント時の再試行回数を指定
    - intr：ハードマウント時の割り込みを受け付け
    - rsize：読み取りのブロックサイズ指定
    - wsize：書き込みのブロックサイズ指定

####★showmountコマンド
- ネットワーク上にあるNFSサーバがエクスポートしているディレクトリを調べる
- オプション
    - -a：NFSクライアントのホスト名とマウントされているディレクトリを表示（NFSサーバ側）
    - -e NFSサーバ名：指定したサーバでエクスポートしているディレクトリ表示（クライアント側）

####★NFS関連のデーモン
- nfsd
    - 全バージョンでサーバ側に必須
    - ファイルシステムのエクスポート、マウント、アンマウント要求を受けつける
- rpc.idmapd
    - NFSv4のみで、サーバとクライアント両方に必要
    - /etc/idmapd.confの設定で、クライアントのユーザ/グループ名、UID、GIDとマッピングを行う
    - nfsサービスによって開始される
- mountd


- portmap
    - RPC（reamote procedure cell)プログラム番号をTCP/IPポート番号に変化する

- NFSv3で必須なデーモン
    - portmap
    - mountd
    - nfsd

####★rpcinfoコマンド
- RPCサービスのプログラム番号、プロトコル、ポート番号など調べられる
- オプション
    - -p：RPCサービスの一覧表示

####★NSFサーバがエクスポート（公開）したディレクトリを起動時に自動的にマウントしたい
- /etc/fstab

####★nfsstatコマンド
- NFSの統計情報を確認

####★NFSv4における擬似ファイルシステム
- /etc/exportsのエントリの１つに「fsid=0」が必要
- ２つのファイルシステム上の別々のディレクトリでも、mount(--bind)を使うことでクライアント側で１つに見せられる









##ネットワーククライアントの管理（主題210)
###210.1◆DHCPの設定
####★DHCPサーバの設定
- サーバの設定ファイル
    - /etc/dhcpd.conf

####★/etc/dhcpd.confの主な設定項目
- 設定項目
    - option domain-name ドメイン名;：ドメイン名指定
    - option domain-name-servers IPアドレス[,IPアドレス];：DNSサーバのIPアドレス指定
    - option routers IPアドレス [,IPアドレス];：デフォルトゲートウェイのIPアドレス指定
    - option subnet-mask IPアドレス：サブネットマスク指定
    - option broadcast-address IPアドレス;：ブロードキャストアドレスを指定
    - option ntp-servers IPアドレス [,IPアドレス];：NTPサーバのIPアドレス指定
    - option netbios-name-servers IPアドレス [,IPアドレス];：WINサーバのIPアドレス指定
    - default-lease-time 秒;：デフォルトの貸出期間を指定
    - max-lease-time 秒;：最大貸出期限を指定
    - renge [fynamic-bootp] 開始アドレス [終了アドレス];：クライアントに貸出すIPアドレスの範囲を指定
    - fixed-address IPアドレス;：クライアントに割り当てる固定IPアドレスを指定、宣言文内のみで使用
    - haedware インターフェイスタイプ MACアドレス;：クライアントを特定するためのMACアドレス指定
    - (allow|deny) unknown-clients;：MACアドレス指定ないクライアントにアドレスの割り当てを許可するか（デフォルトはallow）

####★デフォルトゲートウェイとは
- ローカルネットワーク外のリモートホストにアクセスする際に一番最初に中継する地点のこと
- 通常はルータ（routes)

####★dhcpd.leasesファイル
- DHCPクライアントに貸し出したIPアドレスなどの情報が定義されている

####★DHCPv6
- ステートレスアドレス自動設定だけでは設定できない情報を配布できる
- 一時アドレスを割り当てることができる
    - IPv6以外に、一時アドレス、プレフィックス情報など割り当てることができる

####★DHCPリレーエージェントに必要なデーモン
- デーモン
    - dhcrelay

- 書式
    - dhcrelay -i [インターフェイス名] [DHCP名]

####★DHCPクライアントのデーモン
- デーモン
    - dhcpcd
    - dhclient

- デーモンを使用し、IPアドレスを再取得する
    - chcpcd -k(dhcpcd)コマンド
    - dhclient -r(dhclient）コマンド


####★DHCPデーモンのログ
- 確認方法
    - cat /var/log/messages | grep DHCP
    - journalctl | grep DHCP

####★ルータ広告を行うデーモンの設定ファイル
- ルータ広告（RA、Router Advertisement)
    - IPv6フォワーディングを有効にする必要がある
    - ルータ広告を送信するように設定されている時、指定されたプレフィックスとデフォルトゲートウェイの情報を返す

- 必要なコマンド
    - radvdコマンド

- 設定ファイルの場所
    - radvd.confファイル





###210.2◆PAM認証
####★PAMとは
- PAM( Pluggable Authentication Modules )
    - プログラムが使用する様々な認証方式を一元的に管理するシステム

- PAMの設定ファイルの場所
    - /etc/pam.d
    - /etc/pam.conf（/etc/pam.dが存在する時、無視される）

- 書式
    - モジュールタイプ　コントロール　モジュール [引数]

####★PAMのモジュール
- PAMモジュールの格納場所
    - (32bit)/lib/security/
    - (64bit)/lib64/security/

- モジュールタイプ
    - auth：パスワードを使用してユーザの認証を行う
    - account：ユーザのアカウントが有効かどうかをチェック
    - passwotd：パスワードの設定および変更を行う
    - session：認証前後に実行させたい処理を指定する（ログの記録）

- モジュール一覧
    - pam_console.so：端末から一般ユーザでログインした際、様々な権限を一時的に一般ユーザに変更
    - pam_cracklib.so：パスワードの書式を制限し、安全性を向上
    - pam_deny.so：認証を全て拒否
    - pam_env.so：環境変数を設定
    - pam_idap.so：LDAPを使った認証
    - pam_limits.so：ユーザが利用するリソースを制限
    - pam_listfile.so；任意のファイルを用いてプログラムのアクセス制御を行う
    - pam_nologin.so：/etc/nologinファイルがある場合、一般ユーザのログインを拒否
    - pam_securetty.so：rootでのログインを「/etc/securetty」ファイルに記述された端末のみ許可
    - pam_sss.so：SSSDを使った認証
    - pam_unix.so：通常のパスワード認証（空のパスワード許可＝[引数]＝nullok）
    - pam_warm.so：認証時やパスワードの変更時にログを記録
    - pam_wheel.so；root権限のアクセスをwheelグループのメンバーに制限

####★SSSDとは

- SSSD（ System Security Services Daemon ）
    - リモートにある認証システムへのアクセスをクライアントシステムに提供する
    - 認証情報をキャッシュし、障害やオフライン時などでもこの情報を使って認証などを行える

- 設定ファイル
    - sssd.conf
    - 許可されるログイン試行の失敗回数などを制限できる


####★コントロール

- コントロール：成功、失敗した際の処理方法（４種）
    - requisite：モジュールの実行に失敗した場合、すぐ認証を拒否し以降の行にあるモジュールを実行しない
    - required：モジュールの実行に失敗した場合、以降の行にある同じタイプのモジュール実行してから認証拒否する
    - sufficient：（成功）以前の行のrequiredが全て成功していれば認証許可（失敗）引き続き以降の行の実行を続ける
    - optional：モジュールの実行に成功、失敗した場合でも以降の行にあるモジュールの実行を続ける


###210.3◆LDAPクライアントの利用方法
####★ldapsearchコマンド
- ldapsearchコマンド
    - LDAPサーバのエントリを検索する

- 書式
    - ldapsearch [オプション]　検索条件　[出力属性]

- オプション
    - -h ホスト：検索を行うLDAPサーバ指定（指定なし：ローカルホスト検索）
    - -x：SASLを使用せずに簡易認証を行う
    - -b 認識名：検索を開始する位置を指定
    - -L：検索結果をLDIFv1形式で表示
    - -LL：検索結果をコメントなしで表示
    - -LLL：検索結果をコメントとLDAPバージョンの表記なしで表示

- 検索条件：(属性名＝値）
- 演算子
    - =：等しい
    - *：任意の文字列
    - ＄：AND
    - ｜：OR
    - ！：NOT

####★ldappasswdコマンド
- LDAPサーバで管理されているユーザのパスワードを変更する

- ユーザ情報を検索する際「/etc/passwd」ファイルよりLDAPサーバを優先したい
    - /etc/neswitch.conf：（記述）passwd: ldap files

####★ldapaddコマンド
- LDIFファイルのエントリをDDAPサーバに登録する
- オプション
    - -h ホスト：LDAPサーバ指定
    - -x：SASLを使用せずに簡易認証を行う
    - -D 認識名：認証に利用する認識名を指定
    - -W：パスワードの入力の認証を対話的に行う
    - -w：パスワードを指定
    - -f：LDIFファイル指定
    - -l：追加するエントリが記述されているLDIFファイルを指定

####★ldapdeleteコマンド
- LDAPサーバに登録されたエントリを削除する





###210.4◆OpenLDAPサーバの設定
- LDAP( Lighitweight Directory Access Protocol )
    - LDAPはDAPを軽量化したプロトコル
    - 読み込みや検索に最適化
    - X.500ベースとしたディレクトリサービスに接続するためのプロトコル

####★OpenLDAPの設定方法
- OpenLDAP２．３以降
    - slapd-config方式：LDAPを使った動的な設定
    - cn=connfig：ツリー構造のルートの定義

####★OpenLDAPの管理コマンドと共通オプション
- 管理コマンド（５種）
    - slapadd：エントリの追加
    - slapcat：データベースからデータをLDIFファイルとして出力
    - slaptest：設定ファイル「slapd.conf」の構文をチェック
    - slapindex：設定ファイル「slapd.conf」で設定したインデックスを作成
    - slappasswd：サーバ管理者のパスワードをハッシュ化して生成

- 共通オプション
    - -v：詳細情報の表示
    - -d 数：デナッィレベル指定（slappasswd以外）
    - -f ファイル名：設定ファイル指定（slappasswd以外）
    - -c：エラー発生時も処理を継続（slappasswdとslaptest以外）
    - -n 数：使用するデータベースをDB番号で指定（slappasswdとslaptest以外）
    - -b DN：使用するデータベースをDNで指定（slappasswdとslaptest以外）

####★slapcatコマンド

- -l：出力するLDIFファイルを指定

####★slapdコマンド
- オプション
    - -4：IPv4アドレスのみ受付
    - -6：IPv6アドレスのみ受付
    - -d 数：デバッッグレベルの指定
    - -f　ファイル名：設定ファイルの指定
    - -u ユーザ名：slapdを起動するユーザを指定
    - -g グループ名：slapdを起動するグループ指定
    - -r ディレクトリ名：ルートディレクトリとするディレクトリを指定

####★slappasswdコマンド
- オプション
    - -s パスワード：ハッシュ化するパスワードの指定
    - -h ハッシュ方式：ハッシュ方式の指定
####★LDAPでのデータの階層構造
- LDAP
    - LDAPではデータをオブジェクトとして扱う

- データは「DIT」という階層構造で管理
- DIT上のエントリを識別するには
    - DN（Distinguished Name）：ファイルシステムでいう絶対パスのようなもの「RDN、上位のRDN...」
    - RDN（Relative Distinguished Name）：相対識別子、ファイルシステムのカレントディレクトリの様な物

####LDAPのエントリが必ず属するオブジェクトクラス
- オブジェクトクラス（３種）
    - ABSTRAVT（抽象型）：他のオブジェクトクラスのための基底クラス、抽象型だけではエントリを作成できない
    - STRUCRURAL（構造型）：人や組織などを表すオブジェクトクラス、構造型クラスのエントリが適用される必要有
    - AUXILIARY（補助型）：構造型クラスと共に使用する、構造型クラスでは足りない属性を補える

####★オブジェクト（LDAPではデータをオブジェクトとして扱う）
- エントリ（entry）
    - LDAPでのオブジェクトの単位
    - オブジェクトクラスによってエントリが人や組織など何を表すのか決定される
- 属性（attribute）
    - エントリ（オブジェクト）が持つ情報を表すもの
    - 属性は属性名と属性値から構成される。
    - どのような属性があるかは、エントリが属するオブジェクトクラスによって決められている
- DIT（Directory Information Tree）
    - エントリ間の関係を階層構造で表したもの

####★LDAPで使用される属性
- 属性
    - dn：識別名（Distinguished Name）
    - objectClass：オブジェクトクラス（必須）
    - c：国名（Country）
    - cn：一般名称（Common Name）
    - dc：ドメイン構成要素（Domain Component）
    - mail：メールアドレス
    - o：組織名（Organizetion）
    - ou：部署などの組織単位（Organizational Unit）
    - sn：名字（SurName）
    - telephoneNumber：電話番号
    - uid：ユーザのログイン名
    - uidNumber：ユーザID

####★オブジェクトクラス

- inetOrgperson（構造型）の属性
    - departmentNumber：部署コード
    - employeeNumber：社員番号
    - employeeType：雇用形態
    - givenName：名前
    - homePhone：自宅電話番号
    - homePostalAddress：自宅住所
    - mail：メールアドレス
    - manager：管理者
    - mobile：携帯電話番号
    - o：
    - roomNumber：部屋番号
    - uid：

- organizationalPerson（構造型）の属性
    - title：役職
    - street：番地
    - postOfficebox：私書箱
    - postalCode：郵便番号
    - ou：部署などの組織単位
    - facsimileTelephoneNumber：Fax番号

- preson（構造型）の属性
    - cn：（必須）
    - sn：（必須）
    - userPassword：パスワード
    - telephoneNumber：
    - description：エントリの説明


####★slapd.conf設定ファイルのaccessディレクティブ
- accessディレクティブ
- アクセス対象
    - *：全エントリ
    - dn=識別名：指定したエントリ
    - attrs=属性名：指定した属性
    - filter=検索フィルタにマッチするエントリ
- 要求者
    - *：全接続（ユーザ）
    - anonymous：認証されていない接続（匿名ユーザ）
    - users：認証された接続（認証済みのユーザ）
    - self：エントリ自身の接続（認証済みのユーザ自身）
    - dn=識別名：指定した識別名による接続
- アクセス権
    - none：アクセスできない
    - auth：認証（バインド）が可能
    - compare：比較が可能（＋auth権限）
    - search：検索が可能（+compare権限）
    - read：値の参照が可能（+search権限）
    - write：値の更新が可能（+read権限）

####★LDIFファイルの説明
- 説明
    - 空行によって複数のエントリを仕切る
    - バイナリデータを属性値に使うにはBase64でエンコードした値を指定
    - 属性値にバイナリ形式のデータなどを指定する場合「属性::属性値」のように指定
    - LDAPディレクトリ情報をUTF-8のテキスト形式で記載しているファイル

####LDIFファイルを利用してエントリの追加、削除、変更を行う
- LDIF( LDAP Date Interchange Format )
- LDIFファイル
    - changetypeディレクティブに記述
    - changetype：変更種別

 

- 変更種別
- add：エントリの追加
- delete：エントリの削除
- modify：エントリ情報の変更（複数の属性を変更する場合は「-」で区切る）
    - add
    - delete
    - replace：変更
- modrdn：RDN（相対識別名）の変更

####★OpenLDAPで使用されるスキーマファイル一覧
- 使用するスキーマファイルを指定するディレクティブ
    - include

- 簡易説明
    - スキーマファイルはあらかじめ用意されている
    - オブジェクトクラスや属性を定義する

- スキーマファイル
    - core.schema：cuやouなどの基本的な属性を定義（必須）
    - cosine.schema：X.500で定義された属性などを定義
    - inetorgperson.schema：inetOrgPersonクラスなどを定義
    - nis.schema：NIS（Network Infomation Service）関連のオブジェクトクラスや属性を定義

####★slapd-configの基本的なディレクティブと説明
- olcLogLevel: <level>：syslogに出力するレベルを指定
- olcInclude: DIlename>：includeファイルを指定
- olcAttributeTyoes：属性型を定義
- olcObjectClasses：オブジェクトクラスを定義
- oldBackend=<type>：バックエンドを指定

####★データベースセクションに記述する主なディレクティブ一覧
- ディレクティブ
    - datebase 種類：バックエンドデータベスの種類を指定
    - suffix DN：ディレクトリのトップとなるDNを指定
    - rootdn DN：データベース管理者のDNを指定
    - rootpw パスワード：データベース管理者のパスワード指定
    - index 属性名 種類：属性に作成するインデックスの種類指定
    - directory ディレクトリ：データベースファイルを格納するディレクトリを指定

####★グローバルセッションに記述する主なディレクティブ
- ディレクティブ
    - argfile ファイル名：slapdデーモン起動時のコマンド引数を格納するファイル指定
    - pidfile ファイル名：slapdのプロセスIDを格納するファイル指定
    - include ファイル名：読み込む設定ファイル指定
    - logfile ファイル名：デバッグログの出力先を指定
    - loglevel 数：ログレベル
    - idletimeout 秒数：アイドル状態のクライアント接続を強制的に切断するまでの秒数
    - timelimit 秒数：slapdが検索要求に応答に使う最大秒数

####★IANA（ Internet Assigned Numbers Authority ）という機関によって割り当てられるもの
- OID (Object Identifier)
    - 新しいオンブジェクトクラスや属性を作成するために、スキーマファイルを作成拡張する場合にIANAからOID取得する必要ある
    - オブジェクトクラスや属性に一意に割り当てられる
    - IANAという機関によって管理される









##電子メールサービス（主題２１１）
###211.1◆電子メールサーバの使用
####sendmail
- 主な設定ファイル
    - /etc/mail

####★Postfix
- 主な設定ファイル
    - /etc/postfix/main.cf
- デーモンの設定
    - /etc/postfix/master.cf 

####★/etc/postfix/main.cfの設定項目と書式
- 書式
        - 設定項目 = 値[,値]
- 設定項目
    - myhostname：自サーバのホスト名を指定
    - mydomain：自サーバのドメイン名を指定
    - myorigin：メールアドレスの「＠」以降に使用するドメイン名を指定
    - inet_interfaces：メールを受け取るネットワークインターフェースを指定
    - mydestination：ローカル配送を行うドメイン名を指定
    - mynetworks：リレーを許可するクライアントを指定
    - mail_spool_directory：メールスプールディレクトリ指定
    - home_mailbox：ユーザのホームディレクトリ配下のメールスプールディレクトリ指定
    - mailbox_command：ローカル配送を行うプログラム（MDA）を指定
    - disable_vrfy_command：SMTPコマンドのVRFYの使用をon/offするか指定

####★/etc/postfix/master.cfの各フィールド
- フィールド
    - service：postfixのサービス（デーモン）名を指定
    - type：サービスタイプの指定、inetはネットソケット、unixはドメインソケット、fifoは名前つきパイプ
    - private：メールシステムへのアクセス制限を行うかどうかの指定
    - unpriv：サービスをrootまたは所有者で動作させるかどうかの指定
    - chroot：chroot jail環境で動作させるかの指定
    - wakeup：サービスを何秒後に起動させるかの指定
    - maxproc：プロセスを同時に起動できる最大数の指定
    - command＋args：サービスの実体プログラムとその引数を指定

####★postfixコマンド
- postfixの制御を行うコマンド
- サブコマンド
    - start：起動する
    - stop：停止
    - abort：強制的に停止
    - flush：メールキュー内にあるメールを直ちに再送
    - reload：設定ファイルを再読み込み
    - check：設定ファイルの構文チェック

####★postconfコマンド
- オプション
    - なし：Postfixの設定内容が全て表示される
    - -n：デフォルト値から変更されている設定項目のみ表示

####★メールキューに関するコマンド
- sendmail（３種）
    - sendmail -bp(mailq) ：メールキューを表示
    - sendmail -q：メールキュー内にあるメールを直ちに再送
    - rm -f /var/spool/mqueue/*：メールキュー（送信待ち）内のメールを削除

- Postfix（３種）
    - postqueue -p(mailq)：メールキューを表示
    - postqueue -f(postfix flush)：メールキュー内にあるメールを直ちに再送
    - postsuper -d：メールキュー内のメールを削除

####★メールの転送
- 一般ユーザが自身宛のメールを別のメアドに転送するために使うファイル
    - ~/.forword
- 特定のユーザ宛に届いたmrーつを転送する場合に使うファイル
    - /home/test/.forward

####★オープンメールリレーについて
- デメリット
    - 誰でも（悪質な迷惑メール、スパム）メール送信に利用されてしまう
    - ネットに公開されたSMTPサーバをオープンメールリレー設定するべきでない
- 対処
    - 信頼できるSMTPクライアントのみに限定する

####★RBLについて
- RBL（ Real-time Blackhole List ）
    - 問題のあるメール送信元を登録したブラックリスト
    - MTAはクライアントから接続を受けつける際にRBLを紹介し、リストに載ったIPからの接続を拒否する
- ブラックリストの流れ（DNSを使った仕組み）
    - ①クライアントから接続
    - ②MTAは接続元IPから生成したDNSクエリをRBLに問い合わせ
    - ③RBLはIPアドレスが登録されていると「レコード」を返し、登録されていなければ「NXDOMAIN」を返す
    - ④MTAはレコードから得られたクライアント接続は拒否し、NXDOMAINが返ってきたクライアント接続は許可

####★電子メールを処理するソフトウェア（３種）
- MUA(Mail User Agent)
    - ユーザがメールを送受信するためのプログラム
    - （送信）SMTPを使用してMTAに渡し、（受信）POPかIMAPを使用する
- MTA（Message Transfer Agent）
    - メールの配信と受信を行うプログラム
    - 受信した目０ルが時サーバ宛のメールかどうか判別する
    - 転送先のMTAはDNSサーバのMXレコードを参照する
- MDA(Mail Delivery Agent)
    - 時サーバにあるMTAから受信したメールを、各ユーザのメールスプールに配送するプログラム
    - ローカル配送を行う

####★/etc/aliasesファイル
- メールのエイリアス（別名）を設定できる
- 書式
    - アカウント名： 受け取りユーザ名[,受け取りユーザ名 ...]
- 受け取りユーザ名以外にも別名を指定できる（４種）
    - /ファイルのパス：指定したファイルにメールのメッセージを追加
    - |コマンド：指定したコマンドにメールのメッセージを渡す（標準入力）
    - user@domain：指定したメールアドレスにメールを転送
    - :include:/ファイルのパス：指定したファイルに記述された内容を別名として読み込む
- ファイルの変更を反映
    - newaliasesコマンド

####★PostfixでTLSを有効にする項目
- /etc/postfix/master.cf
    - smtps：コメントを外して設定を有効化
- /etc/posfix/main.cf
    - smtpd_use_tls(2.3前）：「yes」でTLS有効化
    - smtpd_enforce_tls(2.3前）：「yes」でTLS強制
    - smtpd_tls_security_level(2.3以降）：（may)TLS有効化/クライアント依存、(encrypt)TLS有効/強制
    - smtpd_tls_cert_file：サーバ証明書ファイルを指定
    - smtpd_tls_CAfile：CAの証明書ファイルを指定
    - smtpd_tls_ket_file：サーバ秘密鍵ファイルを指定

####★Postfixが扱うメールの送信者アドレスだけを書き換えたい
- 関連するファイルと項目（２種）
    - sender_canonical_maps
    - main.cf

- canonical（正規化）機能
    - 異なる送信者から受け取ったメールを単一送信者から送られたように見せる（フィルタリングしやすい）
    - ユーザ名、ログインIDと異なるメールアドレスを使用できる

####★telnetを使用して、SMTPセッションを行う
- SMTPコマンド
    - # telnet loalhopst 25
    - HELO：セッション開始
    - MAIL FROM：差出人指定
    - RCPT TO：宛先指定
    - DATE：本文入力
    - QUITセッション終了




###２１１．３◆電子メール配信の管理
####★Sieveの構文について
- ３種類のコマンドで構成
    - コントロール
    - テスト
    - アクション
- コントロール（のコマンド）
    - if：if~elsif~elseを使って条件分岐を記載
    - require：拡張機能を指定（アクションコマンドのfileintoなど）
    - stop：処理停止（暗黙のkeep（ユーザのメールボックスに保管）が含まれる）
- テスト（のコマンド）
    - address：アドレスを評価
    - header：メールヘッダを評価
    - size：メールのサイズを評価
    - allof：論理積AND（かつ）
    - anyof：論理和OR（または）
    - not：否定
    - true：真
    - false：偽
- アクション（のコマンド）
    - keep：ユーザのメールボックスにメッセージを保管（デフォルトのアクション）
    - fileinto(※拡張機能)：メッセージを指定したメールボックスに配送
    - redirect：メッセージを指定したアドレスに転送
    - discard：メッセージを廃棄（keepアクションの停止）
    - reject(※拡張機能)：配信を拒否し、エラーメッセージを返す
    - vacation(※拡張機能)：長期休暇などの不在時に自動返信する

####★Sieveについて
- Sieve
    - 電子メールのフィルタリングのためのプログラミング言語
    - 電子メール形式を定義したRFC2822に準拠し、特定のOSやメールシステムに依存しない
    - Dovecotと連携して、メールボックスへ配信時にサーバ側でのSPAMメールの破棄を行うなどできる

####★MTAが受信したメールを各ユーザに配信するソフトウェア
- procmail
    - MDA( Mail Delivery Agent )
    - フィルタリング機能（メールの差出人、件名、内容に応じてメールの保管場所決定や破棄できる）

####★保存する形式
- Maildir形式
    - cur、tmp、newの３つのサブディレクトリに分類し、１メール１ファイルとして保存する
- mbox
    - 全てのメールを１つのファイルに保存する
    




###211.3◆メールボックスアクセスの管理
####★Dovecot2.xの基本設定
- 設定項目
    - ssl：「yes」でSSL/TLS有効化（Dovecot1.xでは「ssl_disable = no」）
    - ssl_cert：「= <サーバ証明書のパス」でサーバ証明書を指定（1.xは「ssl_cert_file = パス」）
    - ssl_key：「= <サーバ秘密鍵のパス」でサーバ秘密鍵を指定（1.xは「ssl_key_file = パス」）

####doveconfコマンド
- Dovecotの設定内容（cond.f配下の複数ファイル）を表示する
- オプション
    - -n：デフォルト以外の設定を表示
    - -c：設定ファイルの指定（デフォルトは/etc/dovecot/dovecot.conf）

####doveadmコマンド
- DOvecotの設定の再読み込みやプロセスの停止など、様々な管理が行える
- オプション
    - reload：設定の再読み込み
    - stop：Dovecot停止
    - mailbox：メールボックスを管理する
    - pw：パスワードを生成する（-sでパスワード形式を指定、-uでDIGEST-MD5の際にユーザ指定）
    - who：サーバのいログイン中のユーザ情報を表示（ユーザ名、PID、IPアドレス）

※ユーザとIPアドレスをverbose_proctile = yesを記述すれば、psコマンドで確認できる。
- パスワードの形式一覧（デフォルトはCRAM-MD5）
    - PLAIN、CRAM-MD5、HMAC-MD5、DIGEST-MD5、SHA、SHA256など

####Dovecot設定
- 設定ファイル（dovecot.conf）の項目
    - mechanisms：認証方式の指定
    - protocols：使用するプロトコルの指定
    - mail_location：メールの格納方法、場所を指定
    - 

####★ポート番号
- IMAPS：９９３
- POP3S：９９５
- IMAP：１４３
- POP3：１１０
- SMTP：２５

####★Maildir形式のメールボックスをサポートする、POPやIMAPに対応したMRA
- Courier-IMAP( クーリエアイマップ ）










##システムのセキュリティ（主題２１２）
###212.1◆ルータを構成する
####★ルーティング機能を提供するデーモン
- デーモン
    - routed
####★DoS（ Denial of Service )攻撃
- Smurf攻撃
    - 攻撃者は「ICMP Echo Request」パケットの送信元を攻撃対象のIPアドレスに書き換えてブロードキャストあてに送る。
    - ブロードキャスト宛に送った大量のICPMEchoRequestがターゲットに向かうことで負担になる
    - `Smurf攻撃の対策`echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

- SYN flood攻撃
    - TCPの３ウェイハンドシェイクを利用し、SYN ARCを受け取った状態で接続を放置し、正規ユーザがサーバに接続できないようにする
    - `SYN flood攻撃の対策`echo 1 > /proc/sys/net/ipv4/tcp_syncoolies

####★iptableコマンド
- iptable
    - パケットヂルタリングやNAT（ネットワークアドレス変換）の設定を行う機能、コマンド
- 書式
    - ★iptable [-t テーブル名] -A チェイン　ルール
    - iptable -N：チェインを作成
    - iptable -L：ルール一覧表示
    - iptable -D：ルール削除
    - iptable -P：ポリシー設定
    - iptable -F：ルール全て削除
    - iptable -X：チェインを削除（ルールが全て消えてることが条件）
- ルール
    - -s IPアドレス：送信元のIPアドレス指定
    - -d IPアドレス：送信先のIPアドレス指定
    - --sport ポート番号：送信元のポート番号指定
    - --dport ポート番号：送信先のポート番号指定
    - -p プロトコル：プロトコル指定（tcp,udp,icmp,all)
    - -i インターフェース：受信するインターフェース指定
    - -o インターフェース：送信するインターフェース指定
    - -j ターゲット：適用するターゲット指定
- ターゲット（アクション）
    - ACCEPT：通過を許可
    - DROP：破棄
    - REJECT：拒否（送信元に通知）
    - MASQUERADE：送信元IPアドレスと送信元ポート番号を変更
    - SNAT：送信元IPアドレスを指定したIPアドレスに変更（ポート番号は必要があれば変b高する）
    - LOG：ログに記録
- テーブル
    - filter：パケットフィルタリング用（デフォルトで使用できるチェイン：INPUT、OUTPUT、FORWARD）
    - nat：NAT用（デフォルト使用できるチェイン：POSTROUTING、PREROUTING、OUTPUT）
- チェイン：ルールの適用
    - INPUT：ローカルホスト宛のパケットに
    - OUTPUT：ローカルホストで生成されたパケットに
    - FORWARD：ローカルホスト経由するパケットに
    - PREROUTING：入ってきたパケットの内容を書き換えるために
    - POSTROUTING：出て行くパケット内容を書き換えるために

####★ip6tableコマンド
- IPv6のパケットフィルタリングの設定を行う

####★IPc5アドレス範囲一覧
| アドレス範囲|アドレスの種類や名称|IPc4で同様の機能に相当するアドレス|
|:-----------------|-------------------------:|:----------------------------:|
| ::1/128           |              ループバック |       １２７.0.0.0/8|
| fe80::/10          |            リンクローカルアドレス（※）|   リンクローカルアドレス       |
| fc00::/7            | ユニークローカルアドレス（※）|    プライベートアドレス        |
| 2000::/3               |                グローバルアドレス（※）|  グローバルアドレス      |
| ff00:/8             |             マルチキャストアドレス|    224.0.0.0/4      |
| fec0::/10          |          サイトローカルアドレス（廃止）（※）|     プライベートアドレス |
（※）ユニキャスト

- fe80::から始まるリンクローカルアドレス
    - ipv4にない機能を担っているのでリンクないで通信をINPUTでDROPしてはいけない
    - ルータ広告や近隣探索などのIPv6に特徴的な機能を持つ。

####★ルータとして使用するには
- パケット転送を許可するにはIPv4の場合
    - echo 1 > /proc/sys/net/ipv4/ip_forward

####★iptable-restoreコマンド
- iptableの設定が保存されているファイルから復元できる
    - 標準入力を利用するため「＜（リダイレクト）」を使う

####★iptable-saveコマンド
- iptableの現在の設定をファイルに保存するために使う

####★iptable -P INPUT DROPについて
 - 動作
    - iptableでファイアウォールを構築する際に、INPUTチェインのポリシーをDROPにする
    - ローカルホストあてのパケットを全拒否する設定
    - しかし、ローカルホストないでアプリケーションどうし通信する時のために、ローカルループバックアドレス(127.0.0.1)を送受信先を許可しておく


###２１２．２◆FTPサーバの管理
####★FTTPサーバの種類
- FTPサーバの種類と設定ファイル
    - ProFTPD：proftpd.conf
    - vsftpd：vsftpd.conf
    - Pure-FTPD：pure-ftpd.conf

- 使用するポート（２種）
    - 制御用：制御用ポートの接続要求は常にクライアント側から行う
    - データ転送用：データ転送用ポートの接続要求には、サーバ側とクライアント側から行うかによって２つの方法がある
- データ転送用の２つのモード
    - アクティブモード（接続要求サーバ側）：ポート番号は制御用に２１番、データ転送用には２０番を使う
    - パッシブモード（接続要求クライアント側）：ポート番号は制御用２１番、データ転送用にはサーバが指定する任意のポートを使う
    
####★匿名ユーザに関するコマンド（オプションと設定項目）
- pure-ftpdコマンド
    - -E：匿名ユーザによるログイン禁止
    - -e：匿名ユーザのみログイン許可
    - -i：匿名ユーザによるファイルのアップロード禁止
- sftpd.confファイルの設定項目
    - anonymous_enable=YES|NO：匿名ユーザのログインを許可｜禁止
    - anon_upload_enable=YES|NO：匿名ユーザによるアップロードを許可｜禁止
    - ftp_username=ftp：匿名ユーザ名を設定（デフォルトは「ftp」）

####匿名ユーザのユーザ名
- 匿名ユーザ
    - ftp
    - anonymous

####★匿名ユーザ用のルート（ホーム）ディレクトリ
- （vsftpd）anonymousユーザがログインすると指定されたホームディレクトリへ移される
    - ディレクティブ「ftp_usernam」で指定されたホームディレクトリにchrootされる。

####★chroot環境でlsした時にエラーが出た時の対処（の一つ）
- 必要な共有ライブラリをchroot環境にコピー

####★FTPサーバにログインを許可しないユーザ
- 記述するファイル
    - /etc/ftpusers
    - １行につき１ユーザ

####★FTPサーバでのセキュリティ対策
- FTPサーバにanonymousユーザに対してアップロードを許可する時に気をつけること
    - ディレクトリのパーミッションを匿名ユーザが読み取りできないようにする（不正ファイル交換場にならぬよう）





###２１１.3◆セキュアシェル
####★sshd（OpenSSHのサーバデーモン）の設定ファイルの主な設定項目
- /etc/ssh/sshd_config
    - protocol[1|2|1,2|2,1]：受けつけるSSHプロトコルのバージョンを指定（デフォルト：２）
    - PermitRootLogin [yes|no]：rootユーザのSSHログインを許可するかを指定（デフォルト：yes）
    - PubkeyAuthentication [yes|no]：SSHプトロコルバージョン2で公開鍵認証を許可するか（デフォ：yes）
    - PasswordAuthenticcation [yes|no]：パスワード認証を許可するかどうか指定（デフォ：yes）
    - PermitEmptyPasswords [yes|no]：空のパスワードを許可するか（デフォ：no）
    - X11Forwarding [yes|no]：X11転送を許可するか（デフォ：no）
    - AllowUsers ユーザ名：ログインを許可するユーザ
    - DenyUsers ユーザ名：ログインを禁止するユーザ
    - AllowGroups グループ名：許可するグループ
    - DenyGroups グループ名：禁止するグループ


####★SSHサーバの公開鍵と秘密鍵(/etc/ssh配下）
- SSHプロトコルバージョン１
    - 秘密鍵：ssh_host_key（RSA）
    - 公開鍵：ssh_host_key.pub(RSA)
- SSHプロトコルバージョン２
    - 秘密鍵：ssh_host_rsa_key(RSA)
    - 公開鍵：ssh_host_rsa_key.pub(RSA)
- SSHプロトコルバージョン３
    - 秘密鍵：ssh_host_dsa_key(DSA)
    - 公開鍵：ssh_host_dsa_key.pub(DSA)

####★ユーザの公開鍵と秘密鍵（~/.ssh/配下）
- SSHプロトコルバージョン１
    - 秘密鍵：identity(RSA)
    - 公開鍵：identity.pub(RSA)
- SSHプロトコルバージョン２
    - 秘密鍵：id_rsa(RSA)
    - 公開鍵：id_rsa.pub(RSA)
- SSHプロトコルバージョン３
    - 秘密鍵：id_dsa(DSA)
    - 公開鍵：id_dsa.pub(DSA)

####★sshコマンド
- オプション
    - -L：「local port forwardinf」を使用する際に使う
    - -R：リモート（SSHサーバ）側に転送用ポートを用意するために使う

####★鍵の保管場所
- クライアントの公開鍵を登録するSSHサーバ側のファイル
    - ~/.ssh/authorized_key
- リモートホストの公開鍵はクライアントのファイル
    - ~/.ssh/known_hosts




###212.4◆セキュリティ業務
####★メールサーバとのメール送受信テストができるコマンド
- リモートホストへのテキストベースのコマンド送信や応答を受け取るコマンド（2種）
    - nc
    - telnet

####★セキュリティの情報源
- CERT：セキュリティインシデントの受付、発生状況の把握を行い、技術支援を行う組織
- JPCERT：日本国内のCERT
- CIAC：セキュリティインシデントの報告を行う期間、米エネルギー省運営
- Bugtraq：ソフトウェアのバグ情報を公開するためのメーリングリスト

####★nmapコマンド
- オプション
    - -F：ウェルノン（有名）ポートを対象にした高速スキャン
    - -O：相手ホストのOSを検出
    - -p ポート番号：スキャンするポート番号指定
- スキャンタイプ
    - -sS：TCP SYNスキャン：TCPのSYNでスキャン、コネクションを確立しない（デフォルト）
    - -sT：TCP connect()スキャン：システムコールを使いユーザ権限で動作する、TCPスキャン
    - -sU：UDPスキャン：UDPはコネクションレス、タイムアウト待ちで判断するために処理に時間がかかる

####★セキュリティーツール
- Nmap：ポートスキャンを実行し、ネットワーク調査を行う（TCP/IPスタック・フィンガープリンティングを利用する）
- Trapwire：ファイルの改ざんを検知する（検査項目：ファイルタイプ・サイズ、所有ユーザ・グループ、パーミッション、アクセス日時、リンク数、更新日時、ハッシュ値、iノード番号）
- Snort：ネットワーク上のパケットを監視し、不正なパケットを検出する（IDS：Intrusion Detection System侵入者検知ｼｽﾃﾑ）
- OpenVAS：セキュリティの脆弱性をネットワーク経由でチェック

###212.5◆OpenVPN
####★OpenVPNを利用する仮想ネットワークデバイス
- 仮想ネットワークデバイス
    - tap：仮想ネットワークEthernetネットワークデバイス
    - tun：仮想PPP（Point-To-Pointo Protocol）ネットワークデバイス

####★OpenVPN
- 設定ファイル
    - /etc/openvpn/server.conf
- デフォルトのポート番号
    - 1194

- VPN（Virtual Private Network）とは、
    - 通信におけるセキュリティ強度を高める
    - 専用線の代わりに通常回線を利用しつつ、仮想的に専用線のような機能を実現する技術
    - インターネットを経由する離れたホスト同士を仮想的なLAN内のホストとして扱うことができる。
- クライアント同士の接続について
    - サーバ側の設定ファイルにclien-to-clientディレクティブが設定されている必要有り
    - クライアントに利用可能なネットワークを伝達することができる

- 「status」項目の設定したファイルに書き込まれる情報
    - 接続中のクライアント
    - ルーティング情報
- クライアント側のポート番号を自動割り当てにする設定
    - クライアントファイルの項目：nobind

##投稿主メモ
Ping-Tの模擬試験で間違えた問題を折りたたみにて記録する

<details><summary>模擬試験間違えた問題一覧</summary>
１）委任先のDNSを使った名前解決を正常に行うため：GLUE（接着剤）レコードとして、委任先のAレコードをゾーン情報に登録する。
２）samba４のみに実装された機能：LDAPを内臓、DNSサーバ機能、ActiveDirectoryドメインのドメインコントローラ機能。
３）IPマスカレードを使用したい：NAPT、チェインは出ていくパケットなのでPOSTROUTINGを使う、IP変更するのでSNAT
４）rndcコマンドを使用したい：/etc/named.confのステートメントのcontrolsで使用できるホストを指定する
５）NFSv４（擬似ファイルシステム）の設定：rootのファイルシステムにfsid=0を設定、ツリー配下に見せたいファイルシステムに--bind（mount）使う
６）ネットワーク上のNFSサーバのエクスポート状況を調べる：showmountを使う（NFS指定するには-eをつける）
７）sambaサーバをActiveDirectoryに参加させたい：workgroup=短いADドメイン、realm=大文字でFQDN
８）DHCPサーバでホストに固定IPアドレスを割り当てたい：ficed-addressでIPを指定
９）apacheのRequireディレクティブでhttpメソッドに合致すれば許可するエンティティ：method
10）Postfixでメールスプールディレクトリをユーザ配下に設置したい：(/etc/postfix/main.cf)home_mailbox
11)postfixでリレーを許可するクライアントを指定したい：mynetworks
12)samba認証の際に空パスワードを禁止にする：（/etc/samba/smb.conf)[globe]null passwords = no
12)nginx.confディレクティブでHTMLを保存する最上位のディレクティブ（ドキュメントルート）：root
13)FTPサーバの使用を匿名ユーザのみに許可する時のpure-ftpdコマンドオプション：-e(許可）-E（禁止）-i(upload禁止）
14）LDIFファイルの説明：空行でエントリ区切る、属性：：属性値、バイナリデータを属性に使う時はBase64、LDAPディレクトリをUTF-8で記載したもの
15）/etc/named.confのoptionステートメントでBINDのバージョン問い合わせで出力される文字列設定：version

<details><summary>模擬試験間違えた問題一覧</summary>
１）NFSクライアントで起動時に自動的にマウントしたい：/etc/fstabに設定を記述する
２）deveadmのぷしょん：mailboxで管理、reloadで再読み込み（startはない）
３）VirtualHostを使用し、別名を指定したい：ServerAliasディレクティブで設定する
４）/etc/samba/samba.confでネットワーク上のWINSサーバを指定する項目：wins server
５)Squidでクライアント側IPアドレスを指定するACLタイプ：src
６)/etc/dhcp.confでWINSサーバを指定する項目：option netbios-name-servers
７)FTPを使用する際データ転送用ポートの接続要求をサーバから行うモード：アクティブモード
８）httpd.confの設定を反映させるapachectlのオプション：graceful（安全に再起動）、restart、stop/start
９)slaps.confでエントリや属性に対してACL（アクセス制御）を行うディレクティブ：access
10)nginx.confでバーチャルホストの設定を行うディレクティブ（コンテキスト）：server
11)DIT上にあるエントリを識別するための識別子：DN（DistinguishedName）RDN（Relative DN）
12）PAM設定でパスワードを使用してユーザ認証を行うモジュールタイプ：auth
13)LDAPの全エントリで必須属性：objectClass
14)slapdが検索要求の応答に使う最大秒数を指定するディレクティブ：timelimit
15)Windowsマシンのユーザ名をsambaサーバにマッピングさせたい：usename map
16)OpenLDAPの管理コマンドでデバックレベルを指定する共通オプション：-d（デバックレベル）
17)vsftpd.confで匿名ユーザによるアップロードを許可したい：anon_upload_enable=yes
18)winbinddの設定ファイルを再読み込みしたい：/etc/init.d/winbindd restart、smbcontrol winbindd reload-config
19)httpd.confディレクティブで認証の際に表示されるメッセージを指定する：AuthName
20)samba4サーバをマウントするコマンド：mount -t [cifs]（samba4はsmbmountに対応していない）
21)下位エントリを分類するためのエントリ：コンテナ

<details><summary>模擬試験間違えた問題一覧</summary>
1）apache設定ファイルの構文チェックをしたい：apachectl configtest
2)/etc/named.confで再起問い合わせを禁止したい：recursion no;
3)/etc/named.confのoptionsステートメントで再起問い合わせ失敗時の設定をしたい：forward
4)OpenDLAPの管理コマンドの共通オプションで使用するデータベースをDB番号で指定：-n
5)OpenVPNクライアント同士の通信：利用可能なネットワークを知れる、サーバ側にclient-to-clientディレクティブを設定
6)DHCPサーバの設定でNISドメイン名を指定したい：option nis-domains
7)Dovecot2.xでTLSを有効にしたい：SSL = yes
8)Squidのアクセス制御で特定のネットワーク・ポート、曜日・時間を一定の名前で定義：acl
9)Sieveで「allof」を使うと：全ての条件を含めたメールが処理条件になる
10)postfixでメールスプールディレクトリを各ユーザのホームディレクトリ配下に設置：home_mailbox
11)Apacheで公開するHTMLを保存する最上位のディレクトリを指定したい：DocumentRoot
12)Squidでキャッシュされるデータの最大サイズを指定したい：maximum_object_size
13)OpenLDAP(slap.conf)を管理者以外全アクセス拒否にしたい：access to * by * none
14)ApacheSSL：中間証明書とサーバ証明書と一緒にSSLcertificateFile、reqでCSR、genrsaで秘密鍵
15)LDAPやActiveDirectoryなどリモートに認証システムへのアクセスを提供する：SSSD
16)OpenLDAPで使うスキーマファイルでX.500で規定された属性を定義：cosine.schema
17)秘密鍵を使用してCSRを作成：openssl req -new -key server.key -out server.csr

<details><summary>模擬試験間違えた問題一覧★</summary>
1)外部からメールが届くようにする設定：mail IN A [IPアドレス]
2)ウェブサイトを構築し、httpでアクセスした時の表示するページ：DirectoryIndex
3)ApacheでCGIを利用する：LoadModuleでモジュールロード、ScriptAliasでCGIプログラム用のディレクトリ指定
4)httpd.confディレクティブでエラーメッセージのフッタ表示を有効、無効：ServerSignature
5)Apacheを終了：Apache[2]ctl stop(haltはない、再起動コマンドは２種）
6)Apacheで生成されるhttpd子プロセスの最大数：MaxRequestWorkers
7)DNS使ってホスト名をIPアドレスに変換コマンド：nslookup,dig,host
8)事故認証局でCSRに署名し、サーバ証明書を作成：openssl ca -out server.cst -infiles server.csr
9)/etc/nginx/nginx.confでファイルの構文チェック：nginx -t
10)httpd.confでダイジェスト認証を指定：AuthName
11)FastCGIの設定を行う、nginx.confのディレクtg秘部：fastcgi_param、fastcgi_pass
12)Squidでアクセスの定義：http_access
13)/etc/named.confのoptiuonステートメントで再起問い合わせを受けつけるホスト指定：allow-recursion
14)TSIGの説明：秘密鍵を用いてDNSメッセージ全体の署名、時刻が合っていないとダメ
15)秘密鍵を作成：openssl genrsa -out server.key [鍵長]
16)Squidでユーザ認証を行う方式やプログラムを指定：auth_param
17)METHODの使用をSSLPORT以外で禁止：http_access deny METHOD !SSLPORT
18)sambaサーバに接続しているWindowsクライアントを確認：smbstatus
19)samba4でWindowsや共有フォルダにアクセスしたい：mount -cifs,mount.cifs,smbclient
20)samba4でADドメインコントローラーを起動したい：systemctl start samba
21)NFSサーバ上でエクスポートされてるディレクトリを調べたい：exportfs -v[とデフォルト]
22)NFSサーバが応答しなくなったらタイムアウトとそれまでの試行回数を指定：sodt、retrans
23)slapd-configのBackendで指定できるtype：ldap,bdb.ldif,config,passwd
24)sambaで認証サーバを指定しユーザ認証したい：security=domain、　security=ads(password server)
25)Squidアクセス制御で宛先IPアドレスを指定：dst
26/etc/named.confのoptionsで問い合わせを受け付けないホストを指定：blackhole
27)sambaサーバをActiveDirectoryドメインに参加させたい：realm
28)postfixが扱うメールの送信者アドレスだけ書き換えたい：sender_canonical_maps、main.cf
29)TLSを使う際、CA証明書を指定：smtpd_tls_CAfile
30)/etc/hosts.allowの記述：portmap:[IPアドレス]
31)Apacheを起動：apache[2]ctl start
32)squidアクセス制御で宛先ドメイン名を指定；：dstdomain
33)nginx.confで条件にマッチするリクエストURIに対する設定：location
34)名前ベースのバーチャルホスト：一つのIPアドレスに複数のドメイン名、全インターフェイスの８０番ポートでサービス提供できる
35)DHCPv6：一時アドレスを割り当てられる
36)名前解決を簡潔に表示：host
37)iptablesでテーブル「filter」を指定した時にデフォルトのチェイン：OUTPUT、FORWARD、INPUT
※「nat」を指定した場合のデフォルトのチェイン：PRETOUTING、POSTROUTING

<details><summary>模擬試験間違えた問題一覧</summary>


</div>




#まとめ