【Linux】LPIC202試験用
DNS
ゾーン
自ら管理するドメインの範囲。ドメイン名に関する正当な情報を持ち、管理できる状態にあることを「権威を持つ」と呼ぶ。ゾーンの一部の管理を分割して、他の管理者に任せることができることを「委任」と呼ぶ。
マスターDNSサーバ
多重化する際に扱うゾーンデータのマスターを管理
スレープDNSサーバ
ゾーンデータをコピーして機能するサーバ。マスターからスレープへデータをコピーすることを転送という。
nslookup
DNSサーバに問い合わせて名前解決を行う。非対話モードは、nslookupコマンドのあとにホスト名などの引数やオプションの指定を直接指定
Aレコード:ホスト名に対するIPアドレスが登録されている。問い合わせるホスト名を入力
PTRレコード:IPアドレスに対応するホスト名の情報。
MXレコード:メールサーバの情報を登録している。ドメイン名を入力すると、入力したドメイン名のMXレコードの問い合わせを行う。
NSレコード:ドメインのDNSサーバの情報が登録されている。ドメイン名を入力すると、入力したドメイン名のNSレコードの問い合わせを行う。
host [オプション] ドメイン名またはIPアドレス [DNSサーバ]
DNSサーバに問い合わせて名前解決を行う。
a DNSに登録された全てのレコード情報を表示
-v 詳細な情報を表示
-d デバッグモード、詳しい情報が表示される
r 再帰的な問い合わせを行わない。
dig [@DNSサーバ] ドメイン名 [クエリタイプ] [クエリクラス] [クエリオプション]
クエリタイプ
a ネットワークアドレス(T_A)、デフォルト
any 指定されたドメインの全て/任意の情報(T_ANY)
hinfo ホスト情報(T_HINFO)
mx メール交換情報(T_MX)
ns ネームサーバ(T_NS)
soa ゾーンの権威者を表すレコード(T_SOA)
axfr ゾーン転送情報(T_AXFR)※1
BIND (Berkeley Internet Name Domain)
DNS 権威サーバー、もしくは キャッシュ DNS サーバーとして機能するソフトウェア。設定ファイルは/etc/named.conf。
<ステートメント> [<パラメータ>] {
<サブステートメント>
};
ステートメント
options named の基本的な設定
logging BIND のログ出力方法を設定
zone ゾーンデータベースの種類とゾーンファイルを設定
include 指定したファイルを追加の設定ファイルとして読み込む
acl アクセス制御リストを定義。特定のIPアドレスやホスト名、ネットワークなどを許可/拒否することができる。
options {
directory "/var/named"; #DNSサーバーが使用するワーキングディレクトリを指定
listen-on { 127.0.0.1; }; #DNSサーバーがクエリを受け付けるIPアドレスを指定
allow-query { any; }; #どのネットワークからの問い合わせも受ける
allow-recursion { 127.0.0.1; }; #再帰問い合わせを許可するIPアドレスやネットワークを指定
recursion yes; #再帰問い合わせの許可
forward first; #forwarder に問い合わせし、解決しなければローカルに問い合わせる
forward only; #forwarder のみに問い合わせしてローカルサーバで解決しない
forwarders {
8.8.8.8;
8.8.4.4; #DNSサーバーが持たないゾーンは、 (8.8.8.8、8.8.4.4) に転送
};
#スレーブサーバでの設定で、typeをslaveに設定し、mastersで転送元のDNSサーバーのIPアドレスを指定
zone "example.com" IN {
type slave;
file "example.com.zone";
masters { 192.0.2.1; };
(allow-transfer { 192.0.2.1; 192.0.3.0/24; }; #マスター側の設定)
};
acl "trusted" {
192.0.2.0/24;
192.0.3.0/24;
};
key "rndc-key" {
algorithm hmac-md5;
secret "SomeSecretKey";
};
logging {
channel default_debug {
file "named.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
};
rndc <options>
named の管理ができる.
halt namedサービスをただちに停止
querylog このネームサーバーに送られたクエリの すべてをログする
refresh ネームサーバーのデータベースをリフレッシュ
reload ゾーンファイルをリロードし、以前にキャッシュされた 他の回答を全て保存。変更が特定のゾーンのみに影響する場合、reloadコマンドの後に そのゾーン名を付加することでその特定ゾーンだけをリロード
stats 現在のnamed統計を /var/named/named.statsファイルにダンプ
stop サーバーを安全に停止し、終了前に動的な更新やIXFR (Incremental Zone ransfers)データを保存
ゾーンファイル
リソースレコード
SOA ゾーンの管理情報を記述
【ドメイン名】 【クラス名】 SOA 【DNSサーバのドメイン名】 【連絡先】 (
NS:ゾーンに対する権威を持つサーバーのドメイン名を指定
【ドメイン名】 IN NS 【DNSサーバ名】
MX:メールサーバを記述
【ドメイン名】 IN MX 【優先度】 【配達先メールサーバ】
A:ドメイン名に対するIPv4アドレスを指定
【ドメイン名】 IN A 【IPアドレス】
AAAA:ドメイン名に対するIPv6アドレスを指定
【ドメイン名】 IN AAAA 【IPアドレス】
CNAME:ドメイン名に付けた別名(あだ名)が書かれた行
【別名】 IN CNAME 【元のドメイン名】
PTR:IPアドレスに対するドメイン名を指定(逆引きDNSで使用)
【IPアドレスをとある書式に従って変換したもの】 IN PTR 【ドメイン名】
$TTL 86400 #DNSサーバーが返すレコードのTTL(Time To Live)を設定
@ IN SOA ns1.example.com. admin.example.com. (
2017022700 ; serial #【シリアル番号】
3600 ; refresh #更新チェックの間隔
1800 ; retry #リトライ間隔
604800 ; expire #問い合わせ諦める期間
86400 ; minimum #ネガティブキャッシュの有効期限(他サーバからのNXDOMAINの応答をキャッシュする時間)
)
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
@ IN MX 10 mx1.example.com.
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
1.0.0.192.in-addr.arpa. IN PTR example.com.
www IN CNAME example.com.
dig [@server] {OP} [domain] [quere] [class]
NSサーバーに対してクエリを発行するためのコマンド
-t:クエリの種類を指定。A、AAAA、MX、NSなどが指定できます。
-c:クエリのクラスを指定。IN(Internet)が指定できます。
-x:クエリをIPアドレスで行う。
-h:ヘルプを表示。
$ dig -t A example.com
$ dig -c IN example.com
$ dig -x 192.0.2.1
$ dig -h
named-checkconf [OP] [ ゾーン名 ] [ ゾーンファイル ]
ゾーンファイルの構文チェックを行う。
DNSSEC(Domain Name System Security Extensions)
DNSに対し、データ作成元の認証やデータの完全性を確認できるように仕様を拡張するもの。DNS応答に添付されたゾーンデータを秘密鍵で署名し受信側が公開鍵で検証することにより、正しい相手から届いた正しいデータであることを確認できる。
作成の流れ
TSIG(transaction Signature)
共通の秘密鍵を設定する事で、送信元のなりすましや更新データの改ざんを防止するための技術で、ゾーン転送でのDNSサーバの偽装防止、不正なクライアントからのrndcコマンドの操作防止などに使われる。
公開鍵と秘密鍵を作成するには dnssec-keygen コマンドを使用。
ゾーンファイルへの署名に dnssec-signzone コマンドを使用。
BIND以外のDNSサーバプログラム
PowerDNS:C++で書かれたオープンソースプログラム。MySQLやPostgreSQLなどのデータベースを使用して、ゾーンデータを管理する
dnsmasq:軽量で高速なプログラム。Linux、FreeBSD、OpenBSD、NetBSD、Mac OS X、Windowsで利用することができます。DHCPサーバやTFTPサーバとしても利用することができる。
djbdns:軽量でセキュリティに優れたプログラム。Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIX、Tru64、HPUX、IRIXで利用することができる。
WEBサーバ
Apache
指定したディレクトリをクライアントに公開し、ディレクトリに置かれた情報を、クライアントから参照できるように
設定ファイル(RED HAT)
/etc/httpd/conf/httpd.conf:主要設定ファイル。
/etc/httpd/conf.d/:主要設定ファイル内に含まれている設定ファイル用の補助ディレクトリー。
設定ファイル(Debian)
/etc/apache2/apache2.conf 主要な設定
httpd.confの設定例
ディレクティブ書式:ディレクティブ 引数
コンテナ実例:Listen 80
# クライアント数を100に制限する
MaxClients 100
# http://example.com/old を http://example.com/new にリダイレクトURLを別のURLにリダイレクトするRedirect
Redirect /old http://example.com/new
# /static を /var/www/html/static にマッピングURLを別のパスにマッピングするAlias
Alias /static /var/www/html/static
# 404エラーに対するカスタムエラーページを /var/www/html/error/404.html に設定する
ErrorDocument 404 /error/404.html
# ドキュメントルートを /var/www/html に設定Webサイトで使用するファイルが保存されている
DocumentRoot /var/www/html
# index.html をDirectoryIndexに設定特定のディレクトリ内のファイルの一覧を表示
DirectoryIndex index.html
その他ディレクティブ例
httpdコマンド
httpd.confを構文チェックする
httpd -t
apachetcl -t
apachetcl configtest
外部設定ファイル
AllowOverride ディレクティブ:.htaccess を使ってどのディレクティブに関する設定を変更することができるのかを指定
AuthConfig 認証に関するディレクティブ
FileInfo ドキュメントに関するディレクティブ
Indexes ディレクトリインデックスに関するディレクティブ
Limit (以前の)アクセス制御をに関するディレクティブ
Options[=Option,...] Options ディレクティブ
All:すべての.htaccessファイルで設定されるオプションを有効にする
# すべての.htaccessファイルで設定されるオプションを有効にする
<Directory "/var/www/html">
AllowOverride All
</Directory>
# すべての.htaccessファイルで設定されるオプションを無効にする
<Directory "/var/www/html">
AllowOverride None
</Directory>
# 認証に関する.htaccessファイルで設定されるオプションを有効にする
<Directory "/var/www/html">
AllowOverride AuthConfig <
/Directory>
# ファイルに関する.htaccessファイルで設定されるオプションを有効にする
<Directory "/var/www/html">
AllowOverride FileInfo
</Directory>
Apacheのモジュール
/use/lib/httpd/modules ディレクトリ以下にモジュールがインストールされる。インストール後にモジュールに組み込むために apxsコマンドを使う。その後、httpd.conf ファイルに LoadModule ディレクティブを追加
主なモジュール
mod_access ホストベースのアクセス制御の実現を提供
mod_actions 特定のファイルタイプが要求されたときに、必ずCGIスクリプトが実行される
mod_alias サーバーのファイルシステムを別の場所にマップしたり、URLをリダイレクトしたりすることを可能に
mod_asis ドキュメントにHTTPヘッダなどを付けずそのまま送信することを可能に
mod_auth テキストファイルを使ってのユーザー認証を可能に
mod_auth_anon * 匿名ユーザーにユーザー認証の必要な領域へのアクセスを許可
mod_auth_dbm * DBMファイルを使ったユーザー認証機能を提供
mod_autoindex index.html等のインデックスファイルがない場合にApacheによって表示される動的ディレクトリインデックスのタイプを制御できる。
mod_cern_meta * CERN HTTPDが使う追加のHTTPヘッダー形式でメタ情報を指定できるように
mod_cgi CGIスクリプトを実行可能に
mod_digest * MD5に基づくユーザー認証を有効に
mod_dir ディレクトリのインデックス表示を可能に
mod_env 環境変数をCGIスクリプトやSSI(サーバーサイドインクルード)に渡すことを可能に
mod_expires * ExpiresHTTPヘッダー情報を使うことを有効に
mod_headers * HTTP応答ヘッダーを追加、付加、削除できるように
mod_imap イメージマップを実現する機能を提供
mod_include サーバーによって解析されるHTMLドキュメントが使えるように設定
mod_isapi Apacheの機能を拡張するためにWindowsのISAPI拡張を利用できるようにWindows版のみの機能。
mod_log_config サーバーへのリクエストを共通ログ形式またはユーザー定義のログ形式で記録できるように設定
mod_mime 特定のドキュメントまたはファイルタイプに対応した処理方法を指定するハンドラを設定
mod_negotiation コンテンツに対して、ブラウザとサーバーが情報をやり取りできるように
mod_proxy Apacheをプロキシサーバーとして機能できるように設定
mod_rewrite * URLをリクエスト時にその場で書き換える処理を
mod_setenvif 独自の環境変数を作成できる
mod_speling * ユーザーがURLのスペルを間違って入力した際にそれを自動的に直す機能を提供
mod_status サーバーの現在の稼動状態をHTMLページとして表示
mod_userdir ユーザーディレクトリの作成
mod_unique_id * リクエストごとに一意のIDを生成する機能を提供UNIX固有の機能。
mod_vhost_alias *
mod_usertrack *
mod_so * Apacheの起動時に実行可能コードやモジュールをサーバーにロードできるようにいわゆるDSO(Dynamic Shared Object)モードを有効に(バージョン1.3以降の機能)
クライアントアクセス制御
BASIC認証
Apache認証方式の一つで、ユーザー名とパスワードを使う単純な認証方式。
<Directory "/var/www/html/protected">
AuthType Basic
AuthName "Protected Area"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Directory>
htpasswd [OP] [user-file] user
「.htpasswd」ファイルを生成するための。「.htpasswd」ファイルは、BASIC認証を使用する場合に、ユーザ名とパスワードを記録するためのファイル
-c:「.htpasswd」ファイルを新規作成する
-m:「.htpasswd」md5ハッシュを使用する
-d:「.htpasswd」cryptハッシュを使用する
-p:「.htpasswd」plaintextパスワードを使用する
-s:「.htpasswd」sha1ハッシュを使用する
-b:「.htpasswd」プロンプトでパスワードを入力
-D:「.htpasswd」ファイルからユーザを削除する
ダイジェスト認証
ユーザー名とパスワードを使う認証方式で、認証情報をハッシュ化して送受信することでセキュリティを高める。認証に用いられるユーザー名とパスワードを設定するコマンドは「htdigest」。 以下はhtdigestコマンドの主なオプション。
-c パスワードファイルを新規に作成
ディレクティブ 説明
AuthType 認証方式の指定。BASIC認証の場合はBasic、ダイジェスト認証の場合はDigest
AuthName 忍か領域名を指定。ここで指定した文字列は認証時に出力される。
AuthUserFile パスワードファイル名
AuthGroupFile グループファイル名
Require アクセス可能なユーザーを指定
<Directory "/var/www/html/protected">
AuthType Digest
AuthName "Protected Area"
AuthDigestDomain /
AuthDigestProvider file
AuthUserFile /etc/httpd/conf/.htdigest
Require valid-user
</Directory>
バーチャルホスト
1台のサーバーで複数のWebサイトを管理することが出来る。バーチャルホストには名前ベースとIPベースがある。
名前ベースのバーチャルホスト
1つのIPアドレスに複数のドメイン名を設定するバーチャルホストのこと。
IPベースのバーチャルホスト
NameVirtualHost 192.168.10.104:80 #ポート80番で処理する
<VirtualHost 192.168.10.104:80>
ServerName www.example.com
ServerAdmin admin@example.com
DocumentRoot d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>
<VirtualHost 192.168.10.105:80>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>
IPベースのバーチャルホスト
複数のIPアドレスにそれぞれ異なるドメイン名を設定します。受け付けるIPアドレスの設定はListenディレクティブを使用します。
<VirtualHost 192.168.10.104:80>
ServerName www.example.com
ServerAdmin admin@example.com
DocumentRoot d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>
<VirtualHost 192.168.10.105:80>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>
その他設定
<VirtualHost _default_:443>
SSLEngine on #SSLプロトコルを使用するための設定
SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" #証明書の指定
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" #秘密鍵の指定
SSLVerifyClient require #そのWebサイトでのみクライアント認証を行う
SSLVerifyDepth 1 #検証する証明書の階層の深さを1に設定
SSLCACertificateFile "/etc/pki/tls/certs/ca-bundle.crt" #信頼するCA(Certificate Authority)証明書が保存されたファイルを指定
</VirtualHost>
Server Name Indication (SNI)
Transport Layer Security (TLS) プロトコルにおいて、クライアントがアクセスしようとしているWebサイトを示す拡張機能。SSLによって暗号化されているHTTPプロトコルヘッダを平文で送ることで、接続するサーバを決定SSLStrictSNIVHostCheck on で有効化。
CustomLogディレクティブ
リクエストログを記録する
CustomLog log_file log_format
Dynamic Shared Object(DSO)
モジュールを動的にロード。LoadModule」ディレクティブを使用。
LoadModule module_name module_file
module_name:モジュールの名前を指定する、module_file:モジュールを実装したファイルのパスを指定
サーバ情報の取得
mod_status モジュール:有効にすることでブラウザから Apache のサーバの動作状況の確認を行うことができる
# httpd.conf
LoadModule info_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Require local
</Location>
mod_info モジュール:有効にすることでブラウザから Apache の設定内容な現在有効になっているモジュールの一覧などを確認することができる
# httpd.conf
LoadModule info_module modules/mod_info.so
<Location /server-info>
SetHandler server-info
Require local
</Location>
ログファイル
アクセスログ:Webサーバーにアクセスした内容が格納されたログで、アクセスしてきた時間やIPアドレス、アクセスされたページなどを知ることができる。
エラーログ:Webのエラー情報が格納
プロキシサーバ
アクセス制限やキャッシュを保存してアクセスを高速化させる。
Squid :「プロキシ」と「リバースプロキシ」のサーバー機能を持つソフトウェア。設定ファイルはetc/squid/squid.conf
プロキシサーバー:クライアントの代わりに外部サーバーにアクセスするサーバーです。
リバースプロキシサーバー:外部からのアクセスを内部サーバーに転送するサーバーです
etc/squid/squid.conf
acl ACL(Access Control List)を定義。書式は「acl <name> <type> <argument> 」
http_access ACL を許可 or 拒否
http_port listen ポートを指定
cache_mem:キャッシュメモリの最大使用量
cache_dir:キャッシュディレクトリを設定
maximum_object_size:キャッシュされるオブジェクトの最大サイズを設定
minimum_object_size:キャッシュされるオブジェクトの最小サイズを設定
cache_mem 64 MB #キャッシュメモリの最大使用量を64MB
cache_dir ufs /var/cache/squid 100 16 256 #数字はキャッシュサイズ、第一階層の個数、第二階層の個数の順
maximum_object_size 1 GB #キャッシュされるオブジェクトの最大サイズを1GB
minimum_object_size 0 #最小サイズを0バイト
アクセス制限
ACL:WebサイトやWebアプリケーションに対して、特定のユーザーやIPアドレスからのアクセスを許可または拒否するための仕組み。
書式は acl ACL名 ACLType ファイル名
IPアドレスでのアクセス制限
acl localnet src 10.0.0.0/8
HTTPメソッドでのアクセス制限
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
SSL証明書でのアクセス制限
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access:WebサイトやWebアプリケーションに対して、特定のユーザーやIPアドレスからのアクセスを許可または拒否するための仕組み。上から順番に評価される。書式は http_access allow | deny ACL名
IPアドレスでのアクセス制限
http_access allow localnet
http_access deny all
HTTPメソッドでのアクセス制限
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
SSL証明書でのアクセス制限
http_access allow localnet
http_access deny all
NGINX
高速でスケーラブルなWebサーバー。設定ファイルは /etc/nginx/nginx.conf になる。
マスタープロセス
NGINXを実行するプロセスで、設定ファイルを読み込み必要なワーカープロセスを起動また、ワーカープロセスを監視し、必要に応じて再起動や終了を行う。NGINXを起動するときに自動的に起動される。
ワーカープロセス
特定の接続数を処理し、リクエストを受信するとそれを読み込んで処理し、クライアントに応答を返す。これにより、NGINXは同時に多くのリクエストを処理でき、それぞれのワーカープロセスは複数の接続を同時に処理できる。
デフォルトでは単一のワーカープロセスを開始し、nginx.conf設定ファイルにworker_processesディレクティブを設定することで、複数のワーカープロセスを開始することができる。使用するワーカープロセスの数は、利用可能なCPUとメモリリソースの量、および予想される同時接続数によって異なる。
NGINXの設定例。この設定では、NGINXを複数のワーカープロセスで起動し、ポート80番でリクエストを受け付けるように設定。また、/var/www/htmlディレクトリをWebルートとして、index.htmlをデフォルトのインデックスファイルとして設定。
worker_processes 2;
events {
worker_connections 1024;
}
http {
server {
listen 80;
root /var/www/html;
index index.html;
}
}
主なディレクティブ
worker_processes:NGINXを起動するワーカープロセスの数
events:NGINXのイベント駆動型のアーキテクチャに関する設定を行います。
http:HTTPプロトコルに関する設定を行います。
server:Webサイトを定義します。
location:URLのパターンにマッチするリクエストを処理する設定を行います。
listen:Webサイトがリクエストを受け付けるポート番号やアドレス
root:WebサイトのWebルート
index:デフォルトのインデックスファイル名
proxy_pass:リクエストをプロキシする先のURL
リバースプロキシ
クライアントからのリクエストを他のサーバーやサービスに転送することができる。Webサーバーの背後にあるサーバーやサービスを、外部からは見えないようにするために使われ、Webサーバの負担が少なくなる。
この設定では、/のURLパターンにマッチするすべてのリクエストが、http://backendに転送されます。backendは、バックエンドのサーバーやサービスのアドレスを指定
location / {
proxy_pass http://backend;
}
キャッシュの有効
server {
# ...
location / {
proxy_cache my_cache;
proxy_cache_valid 200 30m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_pass http://backend;
}
proxy_cache_pathディレクティブでキャッシュのストレージを指定。また、locationセクションで、proxy_cacheディレクティブでキャッシュを有効にし、proxy_cache_validディレクティブでキャッシュの有効期間を指定。
ファイル共有
NTドメイン
クライアントコンピューターとサーバーを管理するための仕組み。ネットワーク上のWindowsホストをドメイン単位でグループ化し、ドメインコントローラーでアカウント情報を集中管理NTドメイン内のコンピューターは、同じリソースやサービスを認証なしで共有することができます。
ADドメイン
Microsoft Windows 2000以降で使用されるドメイン。NTドメインの機能を強化し、複数のドメインを階層構造で管理できるようになったため大規模なネットワークを管理することができるようになっている。
ドメインコントローラー(DC)
Windowsシステムでドメインを管理するサーバーの一種で、ドメイン内のクライアントのログオン認証を行う。
NetBIOS
ソフトウェアがコンピュータのネットワーク機能を利用するための標準的な規約(API)を定めた規格。ネットワーク上の機器はNetBIOS名と呼ばれる16バイトの固有の識別符号で認識される。NetBIOS over TCP/IPはTCP/IPを使うための仕組み。
WINS(Windows Internet Name Service)
Windowsネットワークにおいて、ネットワーク上の機器のIPアドレスとコンピュータ名(NetBIOS名)を対応付け、相互に変換することができるようにするサービス。
SMB(Server Message Block)
LAN上の複数のWindowsコンピュータの間でファイル共有やプリンタ共有などを行うためのプロトコル(通信規約)および通信サービス。
CIFS(Common Internet File System)
Windowsのファイル共有サービスで利用されているプロトコル。「SMB」を拡張し、Windows以外のシステムでも利用できるよう仕様を公開したもの。
Samba
Windows以外のOSでWindowsネットワークの諸機能を利用できるようにするソフトウェア。主にUNIX系OSで動作するコンピュータをWindowsネットワーク上のサーバやクライアントとして利用するために用いられる。SMB/CIFSなどのプロトコルや仕様に対応し、ファイルサーバ、プリントサーバ、WINSサーバ、ドメインコントローラなどとして機能
smbd:Sambaのファイルサーバーを実行するデーモン。クライアントコンピューターからのリクエストを受け付け、サーバー上のファイルやプリンターを共有することができる。
nmbd:Sambaのネームサーバーを実行するデーモン。ブラウズ機能やNetBIOSによる名前解決を行う。
TDB:軽量でスマートなデータベースであるため、SMBで使用されることが多く、サーバの負荷を軽減する
[global]
security = user
passdb backend = tdbsam
Sambaの主なポート
445番ポート:ファイル共有を行う
139番ポート:ネットワーク名を管理
137番ポート:NetBIOS名を管理
138番ポート:NetBIOSデータグラムを管理する
主な設定ファイル
/etc/samba/smb.conf 。
[global]セクション:全体の設定。
[homes]セクション:ユーザホームディレクトリに関する設定。
[Printer]セクション:プリンタの設定
globalセクション
Sambaサーバー全体に適用される設定を定義するセクション。変更を反映するには再起動が必要。
主な設定項目
workgroup = ドメイン名:サーバーが所属するWindowsワークグループを指定する
server string = 動作モード:サーバー名などの説明文を指定WindowsクライアントコンピューターからSambaサーバーを検索したときに表示されます。
security = :サーバーのセキュリティモデルを指定USER、SHARE、SERVER、DOMAINの4つのセキュリティモデルがサポートされています。
hosts allow = ホスト:サーバーに接続を許可するホストのIPアドレスを指定deny は拒否。
log file:ログを出力するファイルを指定する
max log size:ログの最大サイズを指定する
socket options:使用するソケットのオプションを指定する
encrypt passwords:使用するパスワードを暗号化するかを指定する
printing:使用するプリンターを指定する
printcap name:使用するプリンター情報を保存するファイルを指定する
printing:使用するプリンターを指定する
load printers:プリンターを使用するかを指定する
map to guest:接続しているユーザーがゲストユーザーであるかを指定
[global]
workgroup = MYGROUP #所属するWindowsワークグループを"MYGROUP
server string = Samba Server #Sambaサーバーの説明文を"Samba Server"に指定
security = user #セキュリティモデルをUSER
encrypt passwords = yes #パスワードを暗号化する
interfaces = eth0 #使用するインターフェース
local master = yes #マスターブラウザとして動作
log file = /var/log/samba/log.%m #ログを/var/log/samba/log.%mに出力
max log size = 50 #ログの最大サイズを50
unix password sync = yes #Sambaが管理するユーザアカウントのパスワードを、UNIXのアカウントのパスワードと同期させる
username map = /etc/samba/smbusers #Linuxのユーザ名をWindowsクライアントで共有する
root = Administrator #LinuxのrootユーザをWindowsクライアントでのAdministratorユーザ
user1 = John #Linuxのuser1ユーザをWindowsクライアントでのJohnユーザ
user2 = Mary #Linuxのuser2ユーザをWindowsクライアントでのMaryユーザ
veto files = /*.txt/ #特定のファイルを非表示かつアクセス禁止になる
hide files = /*.txt/ #特定のファイルを非表示
read only = yes #Sambaで共有されているリソースに対して、読み取り専用としてアクセス
writeable = no #Sambaで共有されているリソースに対して、読み取り専用としてアクセス
read only = no #Sambaで共有されているリソースに対して、読み書き両用としてアクセス
writeable = yes #Sambaで共有されているリソースに対して、読み書き両用としてアクセス
[secsion$] #セクション名を非表示にする
[print$] #Sambaで共有されるプリンタを管理する
#SambaサーバをADのメンバサーバとして設定
workgroup」= example
realm = EXAMPLE.COM
security = ads
netbios name = linux0
server role = member server
共有設定
netbios name:SambaサーバーのNetBIOS名を指定する
interfaces:使用するインターフェースを指定する
bind interfaces only:特定のインターフェースのみを使用するかを指定する
local master:マスターブラウザとして動作するかを指定する
domain master:ドメインマスターブラウザとして動作するかを指定する
preferred master:マスターブラウザの選択を優先するかを指定する
os level:マスターブラウザの選択に参加するためのOSレベルを指定する
wins support:WINSサーバーとして動作するかを指定する
[homes]セクション
ユーザーのホームディレクトリを共有するためのセクション。
[homes]
comment = Home
Directories browseable = no
writable = yes
valid users = %S
ユーザーのホームディレクトリを"Home Directories"という名前で共有し、そのディレクトリをブラウズできないように設定。また、ユーザーは、このディレクトリに対して書き込みができるように設定。
[Printer]セクション
Sambaサーバーで共有するプリンターを設定するためのセクション。
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
writable = no
printable = yes
guest ok = yes
共有するプリンターを"All Printers"という名前で共有し、そのプリンターをブラウズできないように設定。また、プリンターに対して書き込みやプリントを実行することができるように設定
隠し共有
特定のリソースを特定のユーザーだけに共有する
[hidden] comment = Hidden Share
path = /path/to/hidden/directory valid
users = user1, user2
browseable = no
"hidden"という名前で隠し共有を行い、共有するパスを"/path/to/hidden/directory"に指定。また、共有を許可するユーザーをuser1とuser2に限定。また、この共有はブラウズできないように設定
testparmコマンド
Sambaの設定ファイルのsmb.confを検証するためのコマンド
testparm [オプション] [smb.conf]
オプション
-s:smb.confに記述された設定を簡略化して表示
-v:smb.confに記述された設定を詳細に表示
-h:testparmコマンドの使い方を表示する
認証の設定
security = オプションでは、次の値を指定することができる。
user:ユーザーアカウントとパスワードを使用
share:共有アカウントとパスワードを使用
server:Windows のサーバーセキュリティを使用
Winbind
Windowsのドメインやアクセス制御リストをLinuxやUNIX系のオペレーティングシステムで扱うことができるようにする
Kerberos
パスワードを暗号化して送信することで、クライアントとサーバ間でセキュリティを提供する。管理される領域をレルムという。
ユーザー管理
ユーザー情報が格納されるバックエンドデータベースを指定
tdbsam:Samba 内蔵の TDB データベースを使用
ldapsam:LDAP サーバを使用
smbpasswd:Samba 独自のパスワードファイルを使用
pdb_tdbsam:TDB データベースを使用したプラグイン式のDBを使用
pdbedit [OP] Sambaユーザー名
Samba パスワードデータベースを管理するためのコマンド
-a:新しいユーザーを追加
-m:ユーザーのアカウントを有効化
-d:ユーザーのアカウントを無効化
-t:ユーザーのアカウントを削除
新しいユーザーを追加する場合:
$ pdbedit -a -u user1
New password:
Retype new password:
$ pdbedit -m -u user1 #ユーザーのアカウントを有効化
$ pdbedit -d -u user1 #ユーザーのアカウントを無効化
smbpasswd [オプション] [ユーザー名]
Samba サーバのパスワードデータベースを管理するためのコマンド。パスワードデータベースに新しいユーザーを追加したり、既存のユーザーのパスワードを変更したり
-a:新しいユーザーを追加
-d:ユーザーのアカウントを削除
-e:ユーザーのアカウントを有効化
-s:ユーザーのアカウントを無効化
新しいユーザーを追加する場合:
$ smbpasswd -a user1
New SMB password:
Retype new SMB password:
ユーザーのアカウントを削除する場合:
$ smbpasswd -d user1
smbstatus [オプション]
Samba サーバが接続されているクライアントや、現在のロックされているファイルやフォルダの情報を確認することができる
-b:ロックされているファイルやフォルダの詳細情報を表示
-L:Samba サーバのログを表示
-S:Samba サーバのステータスを表示
Samba サーバの状態を表示する場合:
$ smbstatus
ロックされているファイルやフォルダの詳細情報を表示する場合:
$ smbstatus -b
nmblookup [オプション] [NetBIOS 名]
Samba サーバ上で使用されている NetBIOS 名と対応する IP アドレスを確認することができる。
-A:IP アドレスを表示
-B:ブロードキャストアドレスを使用して NetBIOS 名を検索
-M:マルチキャストアドレスを使用して NetBIOS 名を検索
NetBIOS 名と対応する IP アドレスを表示する場合:
$ nmblookup -A NetBIOS_name
ブロードキャストアドレスを使用して NetBIOS 名を検索する
$ nmblookup -B NetBIOS_name
マルチキャストアドレスを使用して NetBIOS 名を検索する
$ nmblookup -M NetBIOS_name
指定したサーバ上で使用されている NetBIOS 名をすべて表示する場合:
$ nmblookup -M '*'
クライアント
smbclient [オプション] [Samba サーバの URL]
Samba サーバへの接続や、Samba サーバ上のファイルやフォルダの転送や操作を行うことができる。
-U:ユーザー名を指定
-N:パスワードを指定
-D:ディレクトリを指定
-T:テンプレートを指定
-c:コマンドを指定
Samba サーバへの接続を行う場合:
$ smbclient //samba_server_url
Samba サーバへのログインを行う場合:
$ smbclient //samba_server_url -U username
Samba サーバへのログインを行い、特定のディレクトリに移動する場合:
$ smbclient //samba_server_url -U username -D directory
Samba サーバへのログインを行い、コマンドを実行する場合:
$ smbclient //
サブコマンド
ls:Samba サーバ上のディレクトリ内のファイルやフォルダの一覧を表示
cd:Samba サーバ上のディレクトリを移動
pwd:Samba サーバ上の現在のディレクトリを表示
get:Samba サーバ上のファイルをローカルに転送
put:ローカルのファイルを Samba サーバに転送
rm:Samba サーバ上のファイルを削除
mkdir:Samba サーバ上に新しいディレクトリを作成
Samba サーバ上のディレクトリ内のファイルやフォルダの一覧を表示する
smb:\> ls
NFS【Network File System】
主にUNIX系OSで利用される分散ファイルシステム、および、そのためのプロトコル。
NFSサーバ:ストレージを他のコンピュータに提供するコンピュータ。
NFSクライアント:サーバの持つストレージにアクセスして利用するコンピュータ。
必要なサービス
portmap : NFS サーバーで使用される各種サービスのポート番号を管理NFS クライアントは、portmap サービスを使用して、NFS サーバー上で実行されている各種サービスのポート番号を取得
nfsd :NFS クライアントからのリクエストを処理するサービス。NFS クライアントからのリクエストを受け取り、リモートのファイルシステム上のファイルやディレクトリを読み書きするために必要な情報を提供。
mountd :NFS クライアントからのマウントリクエストを処理するサービス。NFS クライアントは、mountd サービスを使用して、NFS サーバー上のファイルシステムをマウントすることができます。また、mountd サービスは、NFS クライアントからのマウント解除リクエストも処理します。
RPC (Remote Procedure Call)
リモートのコンピューター上で実行されるプログラムを、ローカルコンピューターから呼び出すことができるプロトコル。RPC サービスを使用することで、異なるコンピューター間でのプログラムの実行が可能。
/etc/rpc ファイル
RPC を管理するための設定ファイル。RPC サービスを使用するアプリケーションを示す番号が記載される。
rstatd 100001 1 udp 463 rstatd
rstatd 100001 2 udp 463 rstatd
rusersd 100002 1 udp 463 rusersd
rusersd 100002 2 udp 463 rusersd
nfs 100003 2 udp 2049 nfs
nfs 100003 3 udp 2049 nfs
サービス名:RPC サービスを使用するアプリケーションの名前
サービス番号:RPC サービスを使用するアプリケーションを識別する番号
プロトコル番号:RPC サービスを使用するアプリケーションが使用するプロトコルの種類。
ポート番号:RPC サービスを使用するアプリケーションが使用するポート番号
プログラム名:RPC サービスを使用するアプリケーションが実行されるプログラムの名前
rcpinfo [OP]
RPC サービスを管理するためのコマンド。
-s:RPC サービスのステータスを表示します。
-t:RPC サービスを停止します。
-p program:指定したプログラム番号の RPC サービスを表示します。
-n:名前ではなく、プログラム番号を表示します。
-h:ヘルプを表示します。
# rcpinfo -s
program vers proto port
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100005 1 udp 888 mountd
100005 1 tcp 888 mountd
NFSサーバの設定
/etc/exports
NFS サーバーで共有するファイルシステムを設定するためのファイルです。NFS クライアントからマウントされるファイルシステムの情報が記載。
ro:読み取り専用で共有すること
rw:読み書き両用で共有すること
sync:ファイルの変更を即度に反映すること
async:ファイルの変更を反映するタイミングを非同期にすること
no_subtree_check:サブツリーのマウントを許可
no_root_squash::NFSクライアント上でrootユーザーが、NFSサーバ上のファイルを操作する
root_squash::NFSサーバは、NFSクライアント上でrootユーザーが行った操作を、一般ユーザーのアクセスと同じであるように制限
# /etc/exports /home/nfs
192.168.1.0/24(rw,sync,no_subtree_check)
/data 192.168.1.0/24(ro,async)
/tmp 192.168.1.0/24(rw,sync)
/home/nfs ディレクトリは読み書き両用で共有され、サブツリーのマウントを許可。/data ディレクトリは読み取り専用で共有され、/tmp ディレクトリは読み書き両用で共有。また、/home/nfs と /tmp ディレクトリは、ファイルの変更を即度に反映させるように設定。
exportfs [options] [client :path]
エクスポート状況を表示したり、/etc/exports ファイルの変更を反映させたり
-a:全てのエクスポートを表示する
-f:エクスポートを削除する
-i:エクスポートを追加する
-r:エクスポートを再起動する (/etc/rc.d/init.d/nfs reload)
-u:エクスポートを更新する
exportfs -i 192.168.1.1:/home
NFSクライアントのIPアドレスが192.168.1.1のマシンが、ローカルマシンの/homeディレクトリをマウントできるようになる。
showmount [options] [host]
NFSサーバのmountdに問い合わせてNFSの共有の情報を表示する。
-a:全てのエクスポートを表示する
-e:指定したホストのエクスポートを表示する
-d:エクスポートを削除する
-r:エクスポートを再起動する
-u:エクスポートを更新する
showmount -a 192.168.1.1
NFSサーバーのIPアドレスが192.168.1.1のマシンでエクスポートされている全てのディレクトリが表示される。
nfsstat [options]
NFSの統計情報を表示
-c:NFSクライアントの統計情報を表示する
-s:NFSサーバーの統計情報を表示する
-m:NFSマウントの統計情報を表示する
-n:NFSネットワークの統計情報を表示する
-o net:ネットワーク層の統計情報を表示
nfsstat -c
NFSクライアントの統計情報が表示されます。
NFSクライアントの設定
mount コマンドで nfs ファイルシステムをマウント
-o rw:ファイルシステムを読み書き可能に
-o ro:ファイルシステムを読み取り専用に
-o hard:NFSサーバーが停止した場合に、マウントされたファイルシステムがアンマウントされるまで、アクセス要求をブロック
-o soft:NFSサーバーが停止した場合に、アクセス要求がエラーとして返される。
-o intr:NFSサーバーが停止した場合に、アクセス要求が中断される。
-o bg:NFSサーバーが停止した場合に、アクセス要求をバックグラウンドで実行
# NFSを読み書き可能にマウントする
mount -t nfs -o rw <NFSサーバーのIPアドレス>:<NFS共有のパス> <マウント先のパス>
# NFSを読み取り専用にマウントする
mount -t nfs -o ro <NFSサーバーのIPアドレス>:<NFS共有のパス> <マウント先のパス>
ソフトマウント
NFSクライアントがNFSサーバーにアクセスするときに、接続がタイムアウトした場合や、サーバーが停止した場合に、アクセス要求をエラーとして返すこと。
mount -t nfs -o soft <NFSサーバーのIPアドレス>:<NFS共有のパス> <マウント先のパス>
ハードマウント
NFSサーバーが停止しても、アクセス要求をブロックし続けるようにすること。-o hardオプションを指定することで、ハードマウントを行うことができる。
ハードマウントやソフトマウントの使い分けは、アプリケーションや環境によって異なります。例えば、データを保存するアプリケーションでは、ハードマウントを使用することで、サーバーが停止してもデータの書き込みを行えるようにすることができます。一方、データの読み込み専用のアプリケーションでは、ソフトマウントを使用することで、サーバーが停止してもデータの読み込みを行えるようにすることができます。
NFSv3デーモン
rpc.nfsd:FSサーバを構成
rpc.mountd::NFSクライアントからのマウントリクエストを受け付ける
rpc.statd:NFSクライアントがNFSサーバに対して、ロックやアンロックを行う
NFSv4のデーモン
rpc.nfsd:FSサーバを構成
rpc.idmapd:IDマッピングを行う
DHCPの設定
DHCP (Dynamic Host Configuration Protocol)
IP アドレスを自動的に割り当てるプロトコル。ネットワーク上のコンピューターやデバイスが自動的に IP アドレスを取得できる。クライアントがネットワーク接続時に255.255.255.255 のUDPパケットを送付し、サーバが受け取るとプールしているIPアドレスを提案クライアントはそのアドレスの申請をすることでサーバが付与する形となる。dhcpd.lease は、DHCP サーバーが IP アドレスを割り当てたことを記録するためのファイルでDHCP サーバーが起動するたびに更新される。
dhcpd.conf
DHCP サーバーを構成するための設定ファイル
パラメータ
subnet:割り当て可能な IP アドレスの範囲を設定
range:割り当て可能な IP アドレスの範囲を設定
default-lease-time:割り当てられた IP アドレスが有効である期間を設定
max-lease-time:割り当てられた IP アドレスが有効である最大期間を設定
option routers:デフォルトゲートウェイの IP アドレスを設定
option domain-name-servers:DNS サーバーの IP アドレスを設定
host:特定の MAC アドレスに対応する IP アドレスを固定で割り当てる
# サブネットの設定
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.50; #IP アドレスの範囲を 192.168.0.10 〜 192.168.0.50
option routers 192.168.0.1; #デフォルトゲートウェイ
option domain-name-servers 192.168.0.1; #DNS サーバーを 192.168.0.1
default-lease-time 600; #デフォルトのリース期間を 600 秒
max-lease-time 7200; }#最大リース期間を 7200 秒
#クライアントのMACアドレスを使用して、IPアドレスを割り振る
host hostname {
hardware ethernet MAC_ADDRESS;
fixed-address IP_ADDRESS;
} #DHCPサーバを再起動する
DHCP クライアント
設定を行うには、 /etc/sysconfig/network-scripts/ifcfg-* ファイルを編集。
ターミナルを開き、次のコマンドを入力
sudo vi /etc/sysconfig/network-scripts/ifcfg-*
ifcfg-* ファイルを編集します。
BOOTPROTO=dhcp
ifcfg-* ファイルを保存し、DHCP クライアントを再起動。
sudo systemctl restart network
DHCP リレーエージェント
DHCP クライアントからの DHCP リクエストを転送するためのプログラム。DHCP リレーエージェントを使用することで、DHCP クライアントが直接 DHCP サーバーにリクエストを送信できない異なるネットワーク間で同一のサーバを使用したい場合でも、DHCP リクエストを転送することで、DHCP クライアントが IP アドレスを取得することができる。デーモンは dhcrelay 。
DHCP リレーエージェントをインストール。
sudo apt-get install isc-dhcp-relay
DHCP リレーエージェントを起動。
sudo dhcrelay -i ens3 -i ens4 192.168.0.1
PAM (Pluggable Authentication Modules)
システムの認証機能を一元管理して拡張するためのフレームワーク。システムの認証方法や、認証に使用するデータベースを変更することができる。/etc/pam.d/と/etc/pam.conf/ があるときはpam.dが優先される。
PAMモジュールは、/lib(64)/security/ ディレクトリに置かれる
type control module
type:PAM のタイプを指定。
auth:認証処理を定義
account:ユーザーの認証状態を検証する(PW期限切れなど)。
password:パスワードの設定と更新を
session:ログイン記録など、認証前後の処理を指定
control:モジュールが実行される条件を指定。
required:モジュールの実行に失敗してもすぐには拒否せず、同じタイプのモジュールの実行が終了した時点で認証を拒否。どの段階で失敗たのかユーザー側ではわからない。
requisite:モジュールの実行に失敗すると認証処理は失敗し、ユーザーに通知される。失敗したモジュール処理に関する情報も記載されるため、攻撃者へもどのモジュールで認証をしているかを知らせることになる。
sufficient:モジュールの実行に成功した時、上位の require行が全て成功していれば認証を成功と失敗の時は処理を継続
optional:他のモジュール処理がないような処理のときに、認証成功のために便宜的に必要となるフラグ。
module:実行するモジュール
pam_unix:/etc/passwd や /etc/shadow ファイルを使用して、ユーザー名とパスワードを検証。
pam_ldap:LDAP サーバーを使用して、ユーザー名とパスワードを検証する
pam_pkcs11:PKCS#11 スマートカードを使用して、ユーザー名とパスワードを検証する
pam_deny:常に認証を失敗させる
pam_warn:認証を警告して処理を継続する
pam_permit:常に認証を成功させる
pam_group:ユーザーが所属するグループを検証する
pam_time:日時や日付によって認証を制限する
pam_tally2:ログイン失敗を記録し、一定回数以上失敗するとロックする
pam_motd:ログイン時に、/etc/motd (message of the day) を表示する
以下に、/etc/pam.d の設定例を示します。
# /etc/pam.d/login
auth required pam_securetty.so #TTY (TeleTYpewriter) のアクセスを制限する
auth required pam_env.so #環境変数を設定する
auth required pam_tally2.so deny=5 unlock_time=900 #ログイン失敗を記録し、5 回以上失敗すると 15 分ロックする
auth required pam_unix.so nullok #Unix 系 OS の認証方法を提供する/etc/passwd や /etc/shadow ファイルを使用して、ユーザー名とパスワードを検証します。nullok オプションを指定することで、空のパスワードを許可する
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
LDAP (Lightweight Directory Access Protocol)
ディレクトリサービスを提供するためのプロトコル。
スキーマ
LDAP サーバーで使用されるエントリのデータ構造を定義し、各エントリが持つべき属性と、その属性の型を定義
オブジェクト識別子 (Object Identifier, OID)
LDAP サーバーで使用されるエントリや属性を一意に識別するための識別子。
ホワイトページ
LDAP サーバーを利用するアプリケーションやサービスで使用され、アドレス帳や人事情報の管理システムなどでエントリを検索する
サーバーの設定ファイル
/etc/openldap/slapd.conf:サーバーの動作や振る舞いを定義する
index objectClass eq
index cn,sn,uid pres,sub
index member,memberUid eq,pres
database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw secret
LDIF (LDAP Data Interchange Format)
LDAP のための、テキスト形式のデータ交換フォーマット。LDIFを使用することで、LDAPエントリを追加、更新、削除する
dn:cn=John Smith,ou=People,dc=example,dc=com #識別名 (Distinguished Name:DN)
objectClass:inetOrgPerson
cn:John Smith
sn:Smith
mail:john.smith@example.com
属性 objectClass の値が "inetOrgPerson"、属性 cn の値が "John Smith"、属性 sn の値が "Smith"、属性 mail の値が "john.smith@example.com" となるエントリ
アクセス制御 (Access Control, AC)
特定のユーザーやグループが LDAP サーバーのデータを参照、更新、削除できるように制限するできる。LDAP サーバーの設定ファイルである slapd.conf に記述される access コマンドで行う。
書式:
access to <what>
by <who> <access> <control> <auth_type>
<what>:アクセス制御を適用するオブジェクトを指定。属性名、オブジェクトクラス、DN、などを指定。
<who>:アクセスを許可するユーザーやグループを指定。DN、IP アドレス、その他の識別子を指定。
<access>:許可するアクセスの種類read、write、search、compare、などが指定。
<control>:アクセス制御を適用する条件self、dn.base、dn.children、dn.exact、などが指定。
<auth_type>:認証の種類simple、kerberos、sasl、などが指定できます。
# Allow Manager to read everything
access to *
by dn.exact=cn=Manager,dc=example,dc=com read
# Allow users to read their own entries
access to dn.children=ou=Users,dc=example,dc=com
by self read
# Allow group members to read group entries
access to dn.children=ou=Groups,dc=example,dc=com
by group.exact=cn=$1,ou=Groups,dc=example,dc=com read
クライアントコマンド
slapadd::LDIF 形式のデータを LDAP サーバーにインポートする
書式:ldapadd [options]
-H <URI>:LDAP サーバーの URI
-D <binddn>:バインドする DN
-w <password>:バインドする際に使用するパスワード
-f <filename>:LDIF 形式のデータを含むファイル
ldapadd コマンドの使用例。LDAP サーバーの URI を ldap://ldap.example.com、バインドする DN を cn=Manager,dc=example,dc=com、バインドするパスワードを secret、LDIF 形式のデータを含むファイルを data.ldif として、LDAP サーバーにデータを追加。
ldapadd -H ldap://ldap.example.com -D cn=Manager,dc=example,dc=com -w secret -f data.ldif
ldapsearch :LDAP サーバーからデータを検索するためのコマンド。
ldapsearch [options] [filter] [attributes]
-H <URI>:LDAP サーバーの URI
-D <binddn>:バインドする DN
-w <password>:バインドする際に使用するパスワード
-b <basedn>:検索を開始する DN
-s <scope>:検索範囲
-L:LDIF 形式で検索結果を出力するように指定します。
ldapsearch コマンドの使用例。LDAP サーバーの URI を ldap://ldap.example.com、バインドする DN を cn=Manager,dc=example,dc=com、バインドするパスワードを secret、検索を開始する DN を dc=example,dc=com、検索範囲をサブツリーとして検索するように指定し、LDIF 形式で検索結果を出力するように指定して、すべてのエントリを検索。
ldapsearch -H ldap://ldap.example.com -D cn=Manager,dc=example,dc=com -w secret -b dc=example,dc=com -s sub -L "(objectClass=*)"
OpenLDAP
LDAPサーバを構築し、クライアントからの情報検索や参照のリクエストを受け付け、必要な情報を返す。/etc/openldap/slapd.conf は設定ファイル。
# LDAPサーバのポート番号を設定する
port 389
# LDAPサーバが保持するデータベースを設定する
database bdb
# データベースのファイル名を設定する
suffix "dc=example,dc=com"
# データベースのルートDNを設定する
rootdn "cn=Manager,dc=example,dc=com"
# データベースのルートパスワードを設定する
rootpw secret
# セキュリティの設定を行う
security ssf=128
# LDAPサーバが保持するデータを保存するディレクトリを設定
directory /var/lib/ldap
# スキーマを設定する
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
# スキーマに追加する属性を設定する
attributetype ( 1.3.6.1.4.1.42.2.27.1.1.3 NAME 'employeeNumber'
DESC 'An identifier for an employee'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-VALUE )
# ACI (Access Control Instruction) を設定する
access to dn.base=""
by * read #DNが空文字列のエントリに対して、誰でも読み取り操作を行える
access to dn.base="cn=Subschema"
by * read #DNが cn=Subschema のエントリに対して、誰でも読み取り操作を行える
access to *
by self write #その他のエントリに対して、自分自身が書き込み操作を行える
by users read #ユーザが読み取り操作を行える
by anonymous auth #匿名認証を行える
OID (Object Identifier)
オブジェクト識別子 (Object Identifier) の略であり、情報やデータを識別するための文字列表現を表す。LDAPサーバ公開時に取得する必要がある
DBバックエンド
OpenLDAPによって管理されるデータを保存するための仕組み
bdb (Berkeley DB):Berkeley DBを使用。フラットファイルやB+ツリーを使用してデータを保存し、高速かつスケーラブルであるため、大規模なデータを扱う
hdb (Hierarchical DB):bdbを拡張。bdbと同様に、フラットファイルやB+ツリーを使用してデータを保存し、bdbよりも、LDAPのエントリを追加することがよりスムーズ
mdb (Memory-Mapped DB):メモリマップを使用。データをメモリ上に保存するため、高速。持続的なデータを保存することができないため、テストや開発用途などに適している。
System Security Services Daemon (SSSD)
多くの外部サービス (LDAP、Kerberos、Active Directory など) からユーザー認証やグループ情報などをやり取りする通信を管理し、また、データをローカルのキャッシュに保存して次回のアクセス時にキャッシュからデータを取得することで、外部サービスへのアクセスを最小限に抑えることができる。設定ファイルは、/etc/sssd/sssd.conf
SSSD を使用して、LDAP サーバーからユーザー認証やグループ情報を取得する設定例。設定後システムを起動させる。
[sssd]
config_file_version = 2
services = nss, pam
[domain/example.com]
auth_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/ca.crt
ldap_id_use_start_tls = True
ldap_default_bind_dn = cn=Manager,dc=example,dc=com
ldap_default_authtok_type = password
ldap_default_authtok = secret
[nss] memcache_timeout = 3600
[pam]
[sudo]
[autofs]
[ssh]
[pac]
[ifp]
SMTPサーバ
SMTP(Simple Mail Transfer Protocol)
インターネット上で電子メールをやり取りするために使われるプロトコル。
MTA(Mail Transfer Agent)
SMTPプロトコルを使って、電子メールをやり取りするためのサーバのこと。送信側のコンピュータからの電子メールを受信し、それを受信側のコンピュータに転送SMTPサーバとも呼ばれる。
MDA(Mail Delivery Agent)
MTAが受信した電子メールを、受信側のコンピュータに配送するためのプログラムのこと。MTAが受信した電子メールを、受信側のコンピュータのアカウントに保存する役割を果たす。
MUA(Mail User Agent)
電子メールを送受信するためのプログラムのこと。電子メールを送信するためにMTAに接続し、MTAが転送してきた電子メールを受信する役割も果たす。
Postfix
電子メールをやり取りするためのサーバ(MTA)。Sendmail との互換性を持ち、高速に作動して設定も比較的容易。
MTAとしての基本設定ファイルは、/etc/postfix/main.cf。
# Postfix main.cf configuration file
# SMTPサーバのホスト名
myhostname = smtp.example.com
# 複数のメールドメインを管理
mydestination = example.com, example.net, localhost.localdomain
# メールドメイン名
mydomain = example.com
# メールアカウント名
myorigin = /etc/mailname
# リレーサーバのアドレスを指定する
relayhost = [smtp.example.com] # メールアカウントを設定する
# ユーザ名:パスワード
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# TLSを有効にする
smtp_use_tls = yes
# TLSの証明書を指定する
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# スパムフィルタを有効にする場合は、spamassassinを設定
smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = inet:127.0.0.1:8891 milter_default_action = accept
postconf [OP]
Postfixで使用される設定を表示する
-a:すべての設定を表示
-d:デフォルト値を表示
-n:設定値を表示
-s:セキュリティ設定を表示
Postfixを構成するデーモンの設定ファイルは/etc/postfix/master.cf。
# Postfix master.cf configuration file
# SMTPサービスを設定する
smtp inet n - y - - smtpd
# SMTP-TLSサービスを設定する
smtps inet n - y - - smtpd
# SMTP-AUTHサービスを設定する
smtp inet n - y - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# Submissionサービスを設定する
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=reject_unauth_destination
# メール転送を行うサービスを設定する
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - n 300 1 qmgr
postfix サブコマンド
start:Postfixサービスを開始します。
stop:Postfixサービスを停止します。
reload:Postfixの設定ファイルを再読み込み
status:Postfixサービスの状態を表示します。
check:設定ファイルを構文エラーをチェック
リレー
/etc/postfix/main.cf でメールリレーのパラメータを設定。
パラメータ
myhostname:メールサーバーのホスト名。
mydomain:メールサーバーのドメイン名。
myorigin:送信元として使用されるエンベロープ from のドメイン名。
inet_interfaces:メールサーバーがリッスンするインターフェース。
mydestination:メールサーバーが受け入れる対象のドメイン名。
relay_domains:メールサーバーがリレーする対象のドメイン名。
mynetworks:メールサーバーが受け入れる対象のネットワーク。
mail_name:送信元として使用されるエンベロープ from のローカルパート。
alias_maps:アドレスのエイリアスを設定するためのマップ。
virtual_alias_maps:仮想アドレスを設定するためのマップ。
エイリアス
/etc/aliases で設定を行い、 newaliases を使用して再読み込み
# This is an example of an aliases file.
#
# Each line consists of an alias name, followed by a colon (:), followed
# by the target of the alias, which can be one or more addresses.
#
# The alias name must be at the beginning of the line and cannot contain
# any spaces. The target of the alias can be any valid email address, or
# a list of email addresses separated by commas.
#
# Comments (like this one) begin with a hash symbol (#) and continue to # the end of the line.
# Alias for the root user root:user1@example.com, user2@example.com
# Alias for the sales department sales:user3@example.com, user4@example.com
# Alias for the support department support:user5@example.com, user6@example.com
# 登録されているすべてのユーザーにメールを転送
members:include:/path/to/members
rootエイリアスはuser1@example.comおよびuser2@example.comに転送されるようになっています。また、salesエイリアスはuser3@example.comおよびuser4@example.comに転送され、supportエイリアスはuser5@example.comおよびuser6@example.comに転送されるようになっています。
メールキュー
処理待ちのメールが一時的に保管される場所。キューは /var/spool/postfix ディレクトリまたは、sendmail では/var/spool/queue に保存
postqueue [OP]
-p:メールキューを人間が読める形式で表示
-i:メールキューのすべてのメッセージを表示
-f:メールキューをフラッシュ
-d <queue-id>:メールキューから特定のメッセージを削除
-H <queue-id>:メールキューから特定のメッセージを保留状態に
メールボックス
メールボックスは、Postfix では home_mailboxパラメータで指定される。
home_mailbox = Maildir/
sendmail では /var/spool/mail ディレクトリに保存される。
mbox
メールを1つのファイルに平文で格納する形式。
maildir
メールを個別のファイルに格納する形式。
Sieve
SMTP サーバで使用されるメールフィルタリングを行うためのプログラミング言語
Sieve フィルタを作成例
# 受信したメールを、指定されたアドレスに転送
if header :contains "subject" "test" {
redirect "recipient@example.com";
}
Sieveのアクションコマンド
fileinto:指定されたフォルダーに保存する。
redirect:指定されたアドレスに転送する。
reject:差出人にエラーメールを返信して拒否する。
keep:そのまま保存する
Sieveのテストコマンド
allof:全てのテストが真であることをテストする
anyof: 少なくとも1つのテストが真であることをテストする
if allof(header :contains "subject" "test", header :is "from" "sender@example.com") {
# do something
}
POPとIMAP
Dovecot
UNIX 系オペレーティングシステムで使用される、IMAP と POP3 メールサーバー。メールクライアントを使用して、サーバー上のメールボックスからメールを受信することができる。設定ファイルは/etc/dovecot/dovecot.conf。
# IMAP、POP3、および LMTP プロトコルをサポートするように設定
protocols = imap pop3 lmtp
# ユーザー認証方式の設定
auth_mechanisms = plain login
# ps axコマンドに接続しているユーザーとIPアドレスを表示
verbose_proctitle = yes
doveconf [OPTION] [SETTING]
Dovecot の設定を行うためのコマンド。
-h:ヘルプメッセージを表示
-a:全ての設定を表示
-n:設定名のみを表示
-d:設定の値を表示
-f:設定を指定したファイルから読み込む。
-o:設定を指定したオプションで上書き
# Dovecot の設定を表示する
doveconf -a
# Dovecot の設定を指定したファイルから読み込む
doveconf -f /etc/dovecot/dovecot.conf
# Dovecot の設定を指定したオプションで上書きする
doveconf -o protocols=imap,pop3
doveadm [OPTION] COMMAND [ARGUMENT]
Dovecot を管理するためのコマンド。
-D:詳細な出力を表示
-f:出力の形式を指定
-u:対象となるユーザーを指定
サブコマンド
reload:再読み込み
stop:Dovecot を停止
pw:パスワードのハッシュ値を設定
log find:ログファイルを検索
log test:ログのテストを実行
# 削除済みのメールを実際に削除する
doveadm expunge -A
# メールを検索する
doveadm search -A mailbox INBOX from foo@example.com
# メールボックスのアクセス制御リストを表示する
doveadm acl list -u user@example.com INBOX
# メールボックスをバックアップする
doveadm backup -u user@example.com -f /backup/user.mbox
# Dovecot の設定を表示する
doveadm config get -u user@example.com protocols
# メールを検索する
doveadm search -u user@example.com mailbox INBOX from foo@example.com
telnetコマンド
ターミナルで使用するコマンドで、指定されたホストに対して、テキストベースでのネットワーク接続を行う。
telnet:ホストに接続するための。
HELO:メールサーバに接続したことを通知する。
MAIL FROM:<送信元アドレス>:送信元アドレスを指定する。
RCPT TO:<宛先アドレス>:宛先アドレスを指定する。
DATA:メールの本文を入力する。
# メールサーバのテストを行う
telnet example.com 25
HELO example.com
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject:Test mail
This is a test mail.
.
QUIT
セキュリティ
パケットフィルタリング
特定のデータを特定のパスを通してのみ送信することを許可するもので、不要なデータや攻撃的なデータを拒否することで、ネットワークを保護することができ
フィルタリングチェイン
複数のフィルタリングルールを組み合わせること。チェインのセットをテーブルという。
INPUT チェイン:自身のコンピュータから受信されるパケットに対してフィルタリングを行う。
OUTPUT チェイン:自身のコンピュータから送信されるパケットに対してフィルタリングを行う。
FORWARD チェイン:自身のコンピュータを経由して他のコンピュータに転送されるパケットに対してフィルタリングを行う
iptables [オプション] コマンド チェイン [マッチング条件] [ターゲット]
/etc/sysconfig/iptables に保存され、iptables-save コマンドを使用することで、現在のフィルタリングルールを設定ファイルに保存することができる。IP6は6をつけるだけ。
オプション
-A:チェインに新しいフィルタリングルールを追加
-D:チェインからフィルタリングルールを削除
-L:チェイン内のフィルタリングルールを表示
-F:チェイン内のフィルタリングルールをすべて削除
-s:送信元 IP アドレスを指定
-d:宛先 IP アドレスを指定
-p:プロトコルを指定
--dport:宛先ポート番号を指定
--sport:送信元ポート番号を指定
チェイン
INPUT:パケットが受信されるときに適用される
OUTPUT:パケットが送信されるときに適用される
FORWARD:パケットが転送されるときに適用
iptables コマンドでは、次のようなマッチング条件を使用することができます。
ターゲット
ACCEPT:パケットを許可
DROP:パケットを拒否
REJECT:パケットを拒否し、エラーメッセージを返す。
# INPUT チェインに、192.168.1.1 のパケットを許可する
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
# INPUT チェインから、192.168.1.1 のパケットを拒否する
iptables -D INPUT -s 192.168.1.1 -j DROP
# NPUT チェイン内のフィルタリングルールをすべて削除する:
iptables -F INPUT
# INPUT チェイン内のフィルタリングルールを表示する:
iptables -L INPUT
# INPUT チェインに、192.168.1.1 のパケットをログに記録
iptables -A INPUT -s 192.168.1.1 -j LOG
# 現在のフィルタリングルールを設定ファイルに保存
iptables-save > /etc/sysconfig/iptables
# 保存されたフィルタリングルールを復元
iptables-restore < /etc/sysconfig/iptables
ポート転送
INPUT チェインに、TCP プロトコルの 80 番ポートから 8080 番ポートへのパケット転送を行うフィルタリングルールを追加する
iptables -A INPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
ルーター
転送許可
恒久設定ファイルは、/etc/sysconfig/iptables で、FORWARD_IPv4=yes と記述/proc/sys/net/ipv4/ip_forward ファイルは暫定設定でrebootすると元に戻る。
IP マスカレード
NAT (Network Address Translation) が使用され、通信を行う際に送信元の IP アドレスやポート番号を変更することで、IP マスカレードを実現する
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
FTP
File Transfer Protocol
インターネットを使用してコンピューター間でファイルを転送するためのプロトコル
ProFTPD
FTPサーバーのためのオープンソースのソフトウェア。設定ファイルは、proftpd.conf
ServerName "ProFTPD Server"
ServerType standalone
Port 21
DefaultServer on
UseReverseDNS off
FTPサーバーのホスト名を "ProFTPD Server"、FTPサーバーの種類を "standalone"、使用するポート番号を 21 番、デフォルトのFTPサーバーとして使用するように指定されており、クライアントのIPアドレスからホスト名を取得しないように指定
Limitディレクティブ:FTPサーバーでのユーザーアクセスを制限される
<Limit [リクエストの種類] [アクセス許可するユーザーやグループ]>
設定値
</Limit>
<Limit RETR>
AllowUser user1
DenyAll
</Limit>
リクエストの種類
DELE:ファイルを削除する
RNFR:ファイル名の変更を行うRNFR が送信されると、そのあと必ず RNTO も送信されます。
MKD:ディレクトリを作成する
RMD:ディレクトリを削除する
RETR はファイルをダウンロードする
STOR はファイルをアップロードする
VSFTPD(Very Secure FTP Daemon)
設定の容易さと安全性と兼ね備えたソフトウェア。VSFTPDの設定ファイルは、vsftpd.conf。
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
# 匿名FTPを有効にする
anonymous_enable=YES
# 匿名ユーザーのルートディレクトリを設定する
anon_root=/var/ftp
# 匿名ユーザーの chroot を有効にする
anon_chroot_enable=YES
VSFTPDが待ち受けるIPアドレスを "YES"、IPv6アドレスで待ち受けるかを "NO"、匿名ログインを許可するかを "NO"、ローカルアカウントでのログインを許可するかを "YES" としている。
Pure-FTPd
軽量で高速なFTPサーバ。pure-ftpd が設定ファイル。
Daemonize no
MaxClientsNumber 50
MaxClientsPerIP 10
MaxIdleTime 15
VerboseLog yes
AnonymousOnly no
FTPサーバをデーモンとして実行しないように指定。また、同時に接続できるクライアントの最大数を50に、同じIPアドレスからの同時接続数の最大値を10に、クライアントがアイドル状態であると見なされる最大時間を15秒に、ログ出力の詳細度を「yes」に、匿名ログインのみを許可しないように指定。
chroot
FTPクライアントからFTPサーバに接続した際のルートディレクトリを制限することができる。
chroot_local_user yes
chroot_list_enable yes
chroot_list_file /etc/proftpd/chroot_list
ProFTPDでは、ローカルユーザに対してchrootを使用するように指定されています。また、chrootリストの使用を有効にし、chrootリストを「/etc/proftpd/chroot_list」というファイルに指定
パッシブモード
FTPクライアントからFTPサーバに接続した際に、FTPサーバからのデータ転送に使用するポート番号を動的に決定することができる。FTPクライアントからFTPサーバへのアクセスを制限するファイアウォールやNATを使用する環境でも、FTPサーバを使用することができるようになる。
匿名FTPサーバ
ユーザ名やパスワードを要求せずにログインすることができるようになっているFTPサーバのこと。一般的に、公開されているデータを共有される。
ProFTPDでの匿名FTPサーバの設定例
anonymous_enable on anon_root /srv/ftp
ProFTPDでは、匿名ログインを有効にし、匿名ユーザがアクセスできるディレクトリを「/srv/ftp」と指定
/etc/ssh/sshd_configの主な設定項目
Port:SSHサーバが待ち受けるポート番号
Protocol:SSHプロトコルのバージョン
HostKey:SSHサーバが使用する公開鍵
PermitRootLogin:rootユーザのSSHログインを許可
PasswordAuthentication:パスワード認証を許可する
PermitRootLogin:rootユーザのSSHログインを許可
PasswordAuthentication:パスワード認証を許可する
PubkeyAuthentication:公開鍵認証を許可するか
PermitEmptyPasswords:空のパスワードを許可する
UsePAM:Pluggable Authentication Modules (PAM)を使用する
AllowUsers:SSHログインを許可するユーザ
/etc/sysctl.conf
# ブロードキャストを無視する(Smurf攻撃対策)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# SYN flood攻撃対策の設定
net.ipv4.tcp_syncookies = 1
IPv6
GUA(Global Unicast Address:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx)
グローバルスコープで使用される一意なIPv6アドレスを表します。
・第3レベルのユニキャストルーティングをサポートする
・グローバルスコープで使用される
・グローバルユニークなアドレスである
ULA(Unique Local Address:fc00::/7)
ローカルスコープで使用される一意なIPv6アドレスを表します。
・ローカルスコープで使用される
・グローバルユニークなアドレスである
・インターネット上で使用されない
LLA(Link-Local Address:fe80::/10)
リンクローカルスコープで使用される一意なIPv6アドレスを表します。
・リンクローカルスコープで使用される
・同一リンク内でのみ使用される
・グローバルユニークではない
sshコマンドのポート転送
-L ローカルポート:リモートホスト:リモートポート:ローカルのポートをリモートのサーバーのポートに転送。
-R リモートポート:ローカルホスト:ローカルポート:リモートのサーバーのポートをローカルのポートに転送。
-N ポート転送を行うだけで、リモートのサーバーでコマンドを実行しない
$ ssh -L ローカルポート:リモートホスト:リモートポート <ユーザー名>@<サーバーのIPアドレス>
$ ssh -R リモートポート:ローカルホスト:ローカルポート <ユーザー名>@<サーバーのIPアドレス>
$ ssh -L ローカルポート:リモートホスト:リモートポート -N <ユーザー名>@<サーバーのIPアドレス>
OpensshでX11のポートフォワーディングを許可する
サーバー側では、sshd_config ファイルを編集して、X11Forwardingを"yes"に設定。
X11Forwarding yes
# systemctl restart ssh
# クライアント側の設定
$ ssh -X <ユーザー名>@<サーバーのIPアドレス>
fail2ban
SSHやFTP、Webサーバーなどのサービスを保護するためのツール。あるサービスに対して、連続して失敗したログイン試行を検出し、一定期間アクセスをブロックすることで、ブルーフォレスト攻撃などから保護する。アクセスの禁止はiptableで行う。
nmap <IPアドレスやホスト名>
-sS: SYNスキャンを行います。
-sT: TCP Connectスキャンを行います。
-sU: UDPスキャンを行います。
-O: オペレーティングシステムを推定します。
-A: オペレーティングシステムを推定し、サービスを推定します。
-p <ポート番号やポート番号の範囲>: 指定したポートをスキャンします。
-sV: サービスバージョンを推定します。
OpenVPNサーバのserver.confの一般的な設定例
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
OpenVPNサーバをUDPプロトコルを使用して、1194番ポートで起動し、TUNデバイスを使用して、クライアントからの接続を受け付ける
OpenVAS (Open Vulnerability Assessment System)
セキュリティスキャンツールで、コンピューターやネットワークに存在する脆弱性を検出しその脆弱性を修正する
よろしければサポートお願いします!よりいい情報を発信します。