2006年4月アーカイブ

syslog-ngコマンド

|

■syslog-ngコマンドの引数

# syslog-ng --help

Usage: syslog-ng [options] Accept and manage system log messages

Options: -s, --syntax-only 設定ファイルの文法チェックができる -d, --debug  デバッグメッセージを出力させる -v, --verbose  詳細な出力 -F, --foreground Don't fork into background -f < fname >, --cfgfile=< fname > Set config file name, default=/etc/syslog-ng/syslog-ng.conf -V, --version Display version number (syslog-ng 1.6.10) -p < fname >, --pidfile=< fname > Set pid file name, default=/var/run/syslog-ng.pid -C < dir >, --chroot=< dir > Chroot to directory -u < user >, --user=< user > Switch to user -g < group >, --group=< group > Switch to group

■設定ファイルの文法チェック
# syslog-ng -s syslog-ng.conf
syntax error at 24
Parse error reading configuration file, exiting. (line 24)

SVIとは

|

■SVIとは
Switch Virtual Interface (SVI) のこと。
要するにVLANにIPアドレスを付与してL3スイッチとして使えること(だと思う)。

■SVIの状態を見る
Router#show int vlan 1
Vlan1 is up, line protocol is up
  Hardware is EtherSVI, address is 0017.5a2c.0eb0 (bia 0017.5a2c.0eb0)
  Description: $ETH-SW-LAUNCH$$INTF-INFO-FE 2$
  Internet address is 192.168.0.254/24
  MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:04, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     191181 packets input, 27300871 bytes, 0 no buffer
     Received 11227 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     246977 packets output, 142980129 bytes, 0 underruns
     0 output errors, 1 interface resets
     0 output buffer failures, 0 output buffers swapped out

VLANの作成、削除

|
■VLANの作成、削除
Router #vlan database
Router(vlan) #vlan vlan_id
Router(vlan) #exit
Router #
削除するときは、
Router(vlan) #no vlan vlan_id
でよい。 ■SVIの設定
Router #conf t
Router(config) #interface vlan vlan_num
Router(config-if) #ip address ip_address subnet_mask
Router(config-if) #end
Router #
設定の削除は
Router(config-if) #no interface vlan vlan_id
Router(config-if) #end
Router #
■ポートをVLANに割り当てる
Router #conf t
Router(config) #interface fastethernet port
Router(config-if) #shutdown
Router(config-if) #switchport mode access
Router(config-if) #switchport access vlan vlan_num
Router(config-if) #no shutdown
Router(config-if) #end

VLANの設定、状態を見るには

|

■vlan database コマンドでvlan設定モードにはいる。  その後、showコマンド

Router#vlan database
Router(vlan)#show
  VLAN ISL Id: 1
    Name: default
    Media Type: Ethernet
    VLAN 802.10 Id: 100001
    State: Operational
    MTU: 1500
    Translational Bridged VLAN: 1002
    Translational Bridged VLAN: 1003

VLAN ISL Id: 1002 Name: fddi-default Media Type: FDDI VLAN 802.10 Id: 101002 State: Operational MTU: 1500 Bridge Type: SRB Translational Bridged VLAN: 1 Translational Bridged VLAN: 1003

VLAN ISL Id: 1003 Name: token-ring-default Media Type: Token Ring VLAN 802.10 Id: 101003 State: Operational MTU: 1500 Bridge Type: SRB Ring Number: 0 Bridge Number: 1 Parent VLAN: 1005 Maximum ARE Hop Count: 7 Maximum STE Hop Count: 7 Backup CRF Mode: Disabled Translational Bridged VLAN: 1 Translational Bridged VLAN: 1002

VLAN ISL Id: 1004 Name: fddinet-default Media Type: FDDI Net VLAN 802.10 Id: 101004 State: Operational MTU: 1500 Bridge Type: SRB Bridge Number: 1 STP Type: IBM

VLAN ISL Id: 1005 Name: trnet-default Media Type: Token Ring Net VLAN 802.10 Id: 101005 State: Operational MTU: 1500 Bridge Type: SRB Bridge Number: 1 STP Type: IBM

■通常の状態からshow vlan-switchでもよい  show vlan-switch brief だと、簡易な表示になる

Router#show vlan-switch

VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 1 default active Fa2, Fa3, Fa4, Fa5, Fa6, Fa7, Fa8, Fa9 1002 fddi-default active 1003 token-ring-default active 1004 fddinet-default active 1005 trnet-default active

VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ 1 enet 100001 1500 - - - - - 1002 1003 1002 fddi 101002 1500 - - - - - 1 1003 1003 tr 101003 1500 1005 0 - - srb 1 1002 1004 fdnet 101004 1500 - - 1 ibm - 0 0 1005 trnet 101005 1500 - - 1 ibm - 0 0

■なにも変更しないでvlan設定モードを抜けるには
Router(vlan)#abort
Aborting....
Router#

syslogの設定

|
# enable syslog
# config syslog add 172.18.130.192 local1 debug

DHCPサーバーの設定

|
# config vlan [name] dhcp-address-range xx.xx.xx.xx - xx.xx.xx.xx
# config vlan [name] dhcp-lease-timer [lease-timer] 
# config vlan [name] dhcp-options default-gateway [ipaddr] 
# config vlan [name] dhcp-options dns-server [ipaddr] 
# config vlan [name] dhcp-options wins-server [ipaddr]
# enable dhcp ports [portlist] vlan cyg-d
で有効となるはずらしい。

設定を解除するには
disble / unconfig を使う

IP-Routing設定

|
■IPの設定を有効にする ※DefaultではIP Routingは無効になっているので有効にする。  また、VLANにIPアドレスを設定した直後は無効になっているので各々有効にする。
# enable ipforwarding [vlanname]
# show ipconfig [vlanname]
■デフォルトルートの設定
# config iproute add default 10.0.0.254

VLAN設定

|

■初期状態

Summit200-24:2 # show vlan
Name VID Protocol Addr Flags Proto Super Ports Default 0001 0.0.0.0 /BP ----------- ANY 0/ 26 MacVlanDis 4094 ------------------ ----- ANY 0/ 0

Flags : L=Loopback Enabled, r=RIP Enabled, o=OSPF Enabled f=IP Forwarding Enabled, m=IPmc Forwarding Enabled

Total number of Vlan(s) : 2

■VLANの名前を変える
Summit200-24:4 # config vlan Default name Office
※DefaultのVLANは名前を変えたら、再び名乗ることはできない ※MacVlanDiscoverは名前を変えることができない ■VLANを作成、削除する
# create vlan [vlanname]
# delete vlan [vlanname]
■ポートをVLANに加える、削除する
# config vlan [vlanname] add port [portlist] {tagged | untaggid} {nobroadcast} 
# config vlan [vlanname] delete port [portlist]
■VLANにIPアドレスを設定する、削除する
# config vlan [vlanname] ipaddress [ipaddr] [mask] 
# unconfig vlan [vlanname] ipaddress
タグを設定するには
# config vlan [vlanname] tag [vlanid]

Load Sharing

|

複数のポートをグループ化し、仮想的に一つのポートとして使う。

■設定を見る
Summit200-24:5 # show sharing address-based Sharing address-based = MAC-source-dest
■baseを決定する
* Summit200-24:35 # config sharing address-based ip-destination

ip-destination
ip-source
ip-source-dest
mac-destination
mac-source
mac-source-dest
がある。

■ポートをグループ化する

Summit200-24:9 # enable sharing 1 grouping 1-3

Port Port Link Auto Speed Duplex Flow Ld Share Media State Status Neg Cfg Actual Cfg Actual Ctrl Master Pri Red ================================================================================ 1 ENABLED R ON AUTO AUTO 1 UTP 2 ENABLED R ON AUTO AUTO 1 UTP

こんな感じでみえるようになる

■グループを解除する
Summit200-24:10 # disable sharing 1

PORTを設定する

|
■portの設定を見るには
# show ports info [detail] Port Diag Flags Link Link_UPs Num Num Jumbo QOS Load State VLANs Proto Size Profile Master
1 P e--m---o-- ready 0 1 0 N/A
2 P e--m---o-- ready 0 1 0 N/A
リアルタイムで見るなら
# show ports config
などがよい ■portを有効、無効にする
# disable ports [port number]
# enable ports [port number | all]
■portのauto nego
# config ports [portlist] auto off {speed [10 | 100 | 1000] duplex [half | full]} 
# config ports [portlist] auto on
auto negoをリセットする
# restart ports [portlist]
■auto porality (etherのクロス/ストレートの判別)を設定する
# config ports 3-5 auto-polarity off
# config ports all auto-polarity on

■ポートミラーリング

Summit200-24:5 # config mirroring add ports 2
* Summit200-24:6 # enable mirroring to port 1 tagged

* Summit200-24:7 # show mirroring Mirror port: 1 is down tagged port number 2 in all vlans

resolverを設定する

|
■DNSサーバーアドレスの設定
Summit200-24:14 # config dns-client add 10.0.0.4
Summit200-24:15 # config dns-client add 10.0.0.5
■ドメインの設定
Summit200-24:16 # config dns-client default-domain example.local
■DNSの設定を見る
Summit200-24:19 # show dns-client
Default domain: example.local
Number of name servers: 2
Name Server 1: 10.0.0.4
Name Server 2: 10.0.0.5
■DNSの設定を消す
Summit200-24:23 # config dns-client delete 10.0.0.5
Summit200-24:33 # config dns-client default-domain ""

アカウントを設定する

| | コメント(1)

■アカウントの種類
UserとAdministratorの2種類のレベルがある。
プロンプトが > と # の違いでわかる。
プロンプトの頭に*があるときは、設定が保存されていないことを示す。
初期状態では、adminとuserがいて、パスワードは両方ともブランク

とくにuserのパスワードがブランクなのは忘れやすいので、削除しておく方が賢い
# delete account user
* # create account user hoge1
password:
Reenter password:
* # create account user hoge2
password:
Reenter password:
* # show account
   User Name     Access LoginOK Failed Session
---------------- ------ ------- ------ -------
           admin   R/W     13      0
            hoge1   RO       0      0
            hoge2   RO       0      0
■設定の保存
* Summit200-24:10 # save
Do you want to save to the primary configuration database? y
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!.
Saved to primary configuration database.

※saveコマンドにはprimary / secondary があり、記憶領域が2箇所ある。
 use configuration [primary / secondary] のあとrebootすればよい。

■再起動

Summit200-24:13 # reboot
Are you sure you want to reboot the switch (y/n)? y

Herb said "Where is everybody?"

■設定を消去する(アカウントと時刻はリセットされない)
Summit200-24:15 # unconfig switch
Restore factory defaults (except user accounts) and reboot? (yes or no) y 
Saving factory default configuration !.
Rebooting...
■工場出荷時に戻す
# unconfig switch all
■設定ファイルの保存
# upload config [TFTPサーバー] [ファイル名]
■設定ファイルのダウンロード
# download config [TFTPサーバー] [ファイル名]
※このあとsaveコマンドを忘れないように。

とりあえず設定の方法

|
■日付と時間を設定する
# config time [date] [time]
# config timezone [gmt_offset] {autodst | noautodst}
■WEBインターフェース
# disable web
# enable web
■Default VLAN からポートを全部はずす。
# config vlan default delete port 1-24


【手っ取り早く設定するには】

■Default VLANの名前を変え、ポートをはずす
# config vlan Default name room
# config room delete port 9-24
■VLANをつくる
# create vlan hoge
# create vlan office
■vlanにポートを割り当てる
# config hoge add port 9-16
# config office add port 17-24
■vlanにIPaddressを設定する
# config room ipaddress 192.168.0.254 
# config hoge ipaddress 192.168.10.254 
# config office ipaddress 192.168.100.254
■IP Routingの設定をする
# enable ipforwarding
# config ip route add default [gateway]
# config ip route add [ipaddr]
■設定を保存する
# save

syslogdの設定

|

■外部からのsyslogを受け取るようにするには?

syslogdに -r オプションをつけて起動する。 RedHatの場合、/etc/sysconfig/syslog ファイルが
SYSLOGD_OPTIONS="-x -r -m 0"
KLOGD_OPTIONS="-2"
となっていればよい。 (-x は、名前引きをしないでアドレスのみ記録するオプション) debianなら、/etc/init.d/syslog内に-rオプションを記述する。

■/etc/syslog.confの設定

基本は  
[facility].[level]  [出力ファイル]
   と記述する。

左の部分を「セレクタ」、右の部分を「アクション」という。
アクションには「ユーザー」や「@loghost」や「|(パイプ)」も指定可能である。
例えば、/dev/console とやる方法などもある。

# /var/log/messageへの出力
# 全てのfacilityについて、infoを出力するが、
# mail,authpriv,cron についてはここには出力しない、という意味

*.info;mail.none;authpriv.none;cron.none   /var/log/messages

# /var/log/maillogへの出力 # mailについての全てのlevelをmaillogに出力させている

mail.*  /var/log/maillog

# emerg(一番危険度が高いレベル)はログインしている全ユーザーの端末に出力する

*.emerg  *

■level
none        (除外)
emerg(panic)     (少)
alert
crit
err(error)
warning(warn)
notice
info
debug        (多)
■facility
auth(security)
authpriv       /var/log/secure
cron         /var/log/cron
daemon
kern
local0~local7    local7は、/var/log/boot.log
lpr
mail         /var/log/mail
news         news.critは、/var/log/spooler
syslog
user
uucp         /var/log/spooler

logrotateの設定

|
■/etc/logrotate.conf
# 週一のローテーションの意味
weekly
# 4世代残す。
rotate 4
# 新しくファイルをつくる
create
# 別の設定ファイルを取り込む
# ここに含まないで下のように書いてもよい
include /etc/logrotate.d
# それぞれ固有の設定
# 上の設定を全てオーバーライドする
/var/log/wtmp {
   monthly
   create 0664 root utmp
   rotate 1
}

nagiosの設定

|

■とりあえずRPMでインストールすると・・・
/etc/nagios/ 設定ファイル類
/usr/lib/nagios/ cgi、plugin
/usr/share/nagios/ HTMLのディレクトリ

■pluginは/usr/lib/nagios/plugin/の下に全部置くこと
 RedHat9ではpluginのRPMはインストールに失敗するので、
 tarballを使う方がよい。
 pluginとnagiosのバージョンは別物。

■httpd.confに下記の設定をして、http://servername/nagios/を開く

Alias /nagios/ /usr/share/nagios/

	Options None
	AllowOverride AuthConfig
	Order allow,deny
	Allow from all

ScriptAlias /nagios/cgi-bin/ /usr/lib/nagios/cgi/ Options ExecCGI AllowOverride AuthConfig Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users require valid-user

■設定
/etc/nagios の下に設定ファイル類がある

contacts.cfg
hosts.cfg
services.cfg
の順に編集する。

cgi.cfgで、authなどを有効にしたりする。

設定を確認するには
# nagios -v nagios.cfg
とする。 OKであれば、
# /etc/init.d/nagios reload
とする。

■contacts.cfg の例

define contact{
	contact_name	admin	; htpasswdで登録したユーザーと同じにする
	alias	admin	; 日本語euc可能
	service_notification_period	24x7	; サービス異常時の通知時間帯
	host_notification_period	24x7	; ホスト異常時の通知時間帯
	service_notification_options	w,u,c,r	; warning,unknown,critical,recover,none
	host_notification_options	d,u,r	; のステータスの略文字である。
	service_notification_commands	notify-by-email,notify-by-epager
	host_notification_commands	host-notify-by-email,host-notify-by-epager
	email	webmaster@example.local	; 通知先
	pager	hoge@xxx.ne.jp	; 携帯など
        }

define contactgroup{ ; 一応、グループも登録する必要がある contactgroup_name admins alias admins members admin }

■hosts.cfg の例

#
# まずテンプレートを定義する。
# これは[register 0]によりテンプレとみなされる。
#
define host{
	name	generic-host
	notifications_enabled	1	; 通知の有無 0で無効、1で通知
	event_handler_enabled	1	; イベントハンドラの有無
	flap_detection_enabled	1	; 状態反転の検出
	process_perf_data	1	; パフォーマンスデータの統計
	retain_status_information	1	; nagiosの再起動時にも状態を保存する
	retain_nonstatus_information	1	; 状態以外の情報も保存する

check_command check-host-alive; これで1回pingを打つ max_check_attempts 10 ; 10回pingが帰ってこなかったらエラー notification_interval 120 ; 通知間隔 notification_period 24x7 ; 通知時間帯 notification_options d,u,r ; 通知レベル

register 0 ; 0でテンプレとなる }

define host{ use generic-host host_name www.example.local alias www.example.local addresss 192.168.0.5 parents PPPoE_Router ; hostからnagiosをみて1metric前のルータ }

■services.cfg の例

define service{
	name			    generic-service
	active_checks_enabled		1
	passive_checks_enabled		1
	parallelize_check			1
	obsess_over_service			1
	check_freshness				0
	notifications_enabled		1
	event_handler_enabled		1
	flap_detection_enabled		1
	process_perf_data			1
	retain_status_information	1
	retain_nonstatus_information	1

is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 3 retry_check_interval 1

notification_interval 120 notification_period 24x7 notification_options w,u,c,r

contact_groups admins

register 0 }

# # www.example.local # define service{ use generic-service host_name www.example.local service_description PING check_command check_ping!20.0,20%!50.0,60% }

 

MRTG

|

■RPMでは
/var/www/html/mrtg/
/usr/lib/mrtg2/
/etc/mrtg/
/usr/bin/mrtg, indexmaker, cfgmaker, rateup

■mrtg.cfgをつくる
# cfgmaker --output=mrtg.cfg public@www.example.local --
global="WorkDir:/var/www/mrtg" --global="Language:eucjp" --global="Op
tions[_]: growright,bits"
--base: Get Device Info on public@www.example.local:
--base: Vendor Id:
--base: Populating confcache
--snpo: confcache public@www.example.local: Descr MS TCP Loopback interface --> 1
--snpo: confcache public@www.example.local: Descr Intel 8255x-based PCI Ethernet Adapter (10/100) --> 65539
--snpo: confcache public@www.example.local: Descr WAN (PPP/SLIP) Interface --> 1703940
--snpo: confcache public@www.example.local: Type 24 --> 1
--snpo: confcache public@www.example.local: Type 6 --> 65539
--snpo: confcache public@www.example.local: Type 23 --> 1703940
--snpo: confcache public@www.example.local: Ip 10.0.18.166 --> 1703940
--snpo: confcache public@www.example.local: Ip 127.0.0.1 --> 1
--snpo: confcache public@www.example.local: Ip 192.168.101.254 --> 65539
--snpo: confcache public@www.example.local: Eth  --> 1
--snpo: confcache public@www.example.local: Eth 00-c0-9f-06-1d-70 --> 65539
--snpo: confcache public@www.example.local: Eth 00-53-45-00-00-00 --> 1703940
--base: Get Interface Info
--base: Walking ifIndex
--base: Walking ifType
--base: Walking ifAdminStatus
--base: Walking ifOperStatus
--base: Walking ifSpeed
--base: Writing ./mrtg.cfg
■mrtgコマンド
# mrtg mrtg.cfg
でよい。 cfgファイルの中のWorkDirの中にいろんなファイルが出来上がる。
[ホスト名]_[インターフェース名].html
[ホスト名]_[インターフェース名]-[期間].png
[ホスト名]_[インターフェース名].log
[ホスト名]_[インターフェース名].old
となっている。 最初の2回は必ずえらーが出ます。
【1回目】
pc-hoge:/etc/mrtg# mrtg mrtg.cfg
Rateup WARNING: /usr/bin/rateup could not read the primary log file for www.example.local_65539
Rateup WARNING: /usr/bin/rateup The backup log file for www.example.local_65539 was invalid as well
Rateup WARNING: /usr/bin/rateup Can't remove www.example.local_65539.old updating log file
Rateup WARNING: /usr/bin/rateup Can't rename www.example.local_65539.log to www.example.local_65539.old updating log file
Rateup WARNING: /usr/bin/rateup could not read the primary log file for www.example.local_1703940
Rateup WARNING: /usr/bin/rateup The backup log file for www.example.local_1703940 was invalid as well
Rateup WARNING: /usr/bin/rateup Can't remove www.example.local_1703940.old updating log file
Rateup WARNING: /usr/bin/rateup Can't rename www.example.local_1703940.log to www.example.local_1703940.old updating log file

【2回目】
pc-hoge:/etc/mrtg# mrtg mrtg.cfg
Rateup WARNING: /usr/bin/rateup Can't remove www.example.local_65539.old updating log file
Rateup WARNING: /usr/bin/rateup Can't remove www.example.local_1703940.old updating log file
pc-hoge:/etc/mrtg# mrtg mrtg.cfg

【3回目】
pc-hoge:/etc/mrtg#

■indexmaker
# indexmaker \
 --output="/var/www/mrtg/index.html" \
 --columns=1 \
 --title="Cisco 2514 cc-gw.example.local" \
 /etc/mrtg/mrtg.cfg

SNMPの概要

|

基本的にUDPを使う

■マネージャ(ネットワーク管理ステーション、NMS)
 管理アプリケーションのこと。MRTGなど。

■エージェント
 管理対象のこと。ルーターとかスイッチなどに実装されているモジュール
 MIBを検索したり、情報を更新したりして機器の設定を変更したりする。

■管理情報
 管理情報の集合体はMIB(Management Information Base)と呼ばれる
 ベンダ独自のMIBもある。

■コミュニティ

【管理情報の構造】
a.オブジェクト識別子(OID)
 これらは階層の木構造になっている

b.オブジェクトシンタックス
c.オブジェクトの符号化ルール

【SNMP】
NMSとエージェントの通信はメッセージの交換によって行われる。

dmesgの内容からpolicyを更新する

|

# cd /etc/selinux/targeted/src/policy/domains/program
# audit2allow -d >> apache.te

# cd /etc/selinux/targeted/src/policy # make # make reload

# setenforse 1

{}    アクセス・ベクター
exe=   プロセスの名前
name=   アクセスしたファイル(ディレクトリ)名
scontext= プロセスのドメイン
tcontext= ファイルのタイプ
tclass=  オブジェクトクラス

■例:

Feb 23 12:11:46 sv001 kernel: audit(1109128306.119:0): avc: denied { search } for pid=5453 exe=/usr/sbin/suexec name=hoge dev=dm-0 ino=294936 scontext=user_u:system_r:httpd_suexec_t
tcontext=system_u:object_r:user_home_dir_t
tclass=dir

Feb 23 12:11:46 sv001 kernel: audit(1109128306.129:0): avc: denied { search } for pid=5453 exe=/usr/bin/perl scontext=user_u:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_kernel_t tclass=dir

Feb 23 12:11:46 sv001 kernel: audit(1109128306.129:0): avc: denied { read } for pid=5453 exe=/usr/bin/perl scontext=user_u:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_kernel_t tclass=file

タイプラベルの初期化

|
■全部
# fixfiles relabel
■ユーザーディレクトリのpublic_htmlを初期化する
# restorecon -R /home
■タイプの変更
# chcon system_u:object_r:httpd_sys_content_t <ディレクトリ> -R

SELinuxの切り替え

|
■現在のモードをみる
# getenforce
■モードを切り替える
# setenforce 0  // Permissiveモードになる
# setenforce 1  // enforcingモードになる
■設定ファイル
#cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

LDAPで aliasを使う方法

|
LDIF:
dn: cn=aliasedPerson, o=hogehoge
objectClass: top
objectClass: alias
objectClass: extensibleObject
cn: aliasedPerson
aliasedObjectName: cn=Person,o=hogehoge
こんな感じ。 aliasオブジェクトには aliasedObjectName属性しかないので、dn を付けるときに困る。 なので、extensibleObject で任意の属性を付加してやればよい。 cn でも o でも ou でもなんでもOKだ

  

日本語をつかう

|
sn: hoge だけではなく、日本語も使いたかったら
sn;lang-ja:: 44G744GS 
のようにしてあげればいい。

;lang-ja は、言語タグ(オプション?)
「ほげ」 は base64でencode するべし。
属性名と値の区切りは、base64の場合は :: と、コロンが二つになるので注意。

面倒だったら、
sn;lang-ja: ほげ
としたやつを、UTF-8 にすれば良い。 当然、base64 encode されているわけではないので、区切りのコロンはひとつ。

で、だ。
ローマ字、漢字、読み を付けたい時がある
そういう時は

# UTF-8とする。
sn: yamada
sn;lang-ja: 山田
sn;lang-ja;phonetic: やまだ
のように、 phonetic オプションを使う。

たーだーし。
phonetic は ./configure --enable-phonetic しておかないと使えないので注意だ。

  

○DiskSuiteのインストール 1.Solaris 8 Software CDの2枚目をいれる。
#cd /cdrom/sol_8_1001_sparc_2/Solaris_8/EA/products/DiskSuite_4.2.1/

2.DiskSuite_4.2.1/sparc/Packages/ に進み、

# pkgadd -d .

次のパッケージを利用できます: 1 SUNWlvma Solaris Volume Management API's (sparc) 1.0,REV=2001.07.25.13.05 2 SUNWlvmg Solaris Volume Management Application (sparc) 1.0,REV=2001.07.25.13.05 3 SUNWlvmr Solaris Volume Management (root) (sparc) 1.0,REV=2001.07.25.13.05 4 SUNWmdg Solstice DiskSuite Tool (sparc) 4.2.1,REV=1999.11.04.18.29 5 SUNWmdja Solstice DiskSuite Japanese localization (sparc) 4.2.1,REV=1999.12.09.15.37 6 SUNWmdnr Solstice DiskSuite Log Daemon Configuration Files (sparc) 4.2.1,REV=1999.11.04.18.29 7 SUNWmdnu Solstice DiskSuite Log Daemon (sparc) 4.2.1,REV=1999.11.04.18.29 8 SUNWmdr Solstice DiskSuite Drivers (sparc) 4.2.1,REV=1999.12.03.10.00 9 SUNWmdu Solstice DiskSuite Commands (sparc) 4.2.1,REV=1999.11.04.18.29 10 SUNWmdx Solstice DiskSuite Drivers(64-bit) (sparc) 4.2.1,REV=1999.11.04.18.29

全部インストールする。
このインストールは永遠にループして行われるので、
変なエラーがわらわらと出るようになったら一周した証拠なのでやめてよい

3.確認する
[root@unknown Packages]#pkginfo | grep DiskSuite
system SUNWmdg Solstice DiskSuite Tool
system SUNWmdja Solstice DiskSuite Japanese localization
system SUNWmdnr Solstice DiskSuite Log Daemon Configuration Files
system SUNWmdnu Solstice DiskSuite Log Daemon
system SUNWmdr Solstice DiskSuite Drivers
system SUNWmdu Solstice DiskSuite Commands
system SUNWmdx Solstice DiskSuite Drivers(64-bit)
4.パスの設定をする
# PATH=$PATH:/usr/sbin:/usr/lib/lvm:/etc/lvm
# MANPATH=$MANPATH:/usr/share/man
# export PATH
# export MANPATH

※ログインshellを /bin/bash にして ~/.bash_profile などに書き込むのも楽

PATH=$PATH:/usr/sbin:/usr/lib/lvm:/etc/lvm
MANPATH=$MANPATH:/usr/share/man
TERM=vt100
PS1='[\u@\h \W]\$ '
export PATH MANPATH TERM PS1
5.CD-ROMを取り出す。
[root@unknown /]#eject cdrom

○DiskSuiteの構成ファイル
※あまり手動で書き換えることはない

/etc/lvm/mddb.cf
metadbの複製位置が記録されている

/etc/lvm/md.tab
/etc/lvm/md.cf
ディスクセット構成のバックアップファイル

/kernel/drv/md.conf
DiskSuiteの起動時の設定ファイル
nmdで最大メタデバイス数、md_nsetsで最大ディスクセット数

/etc/lvm/mdlogd.cf
DiskSuiteのSNMPトラップ作成デーモンの設定ファイル

/etc/rcS.d/S35lvm.init
/etc/rc2.d/S95lvm.sync
ブート時に使用する

○Diskの情報を見る
「fdisk」ではなく「format」コマンドをつかう

format> プロンプトから
partition		スライスの分割などをする
verify			Diskラベルを表示する
format			Diskをformatする
label			Diskラベルを書き込む
save			/format.dat にDisk情報をsaveする

[root@unknown /]#format

AVAILABLE DISK SELECTIONS: 0. c0t0d0 /pci@1f,0/pci@1,1/scsi@2/sd@0,0 1. c0t1d0 /pci@1f,0/pci@1,1/scsi@2/sd@1,0

Specify disk (enter its number):0 // ここで0か1を選んでDiskを選択する

selecting c0t0d0 [disk formatted] // Diskがformatされていることがわかる

※[c# t# d# s#] でDiskを表す  c・・・論理コントローラ番号  t・・・SCSI-ID番号  d・・・ドライブ番号  s・・・スライス番号

format> verify

Primary label contents:

Volume name = < > ascii name = pcyl = 7508 ncyl = 7506 acyl = 2 nhead = 19 nsect = 248 Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 966 2.17GB (967/0/0) 4556504 1 swap wu 968 - 1190 513.07MB (223/0/0) 1050776 2 backup wm 0 - 7505 16.86GB (7506/0/0) 35368272 3 usr wm 1191 - 2190 2.25GB (1000/0/0) 4712000 4 var wm 2191 - 3190 2.25GB (1000/0/0) 4712000 5 home wm 3191 - 7490 9.66GB (4300/0/0) 20261600 6 unassigned wm 7491 - 7505 34.51MB (15/0/0) 70680 7 unassigned wm 0 0 (0/0/0) 0

※6がmetadb用のスライス

○スライス(パーティション)の情報を見る #format > partition > print と進む

partition> print
Current partition table (original):
Total disk cylinders available: 7506 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 966 2.17GB (967/0/0) 4556504 1 swap wu 968 - 1190 513.07MB (223/0/0) 1050776 2 backup wm 0 - 7505 16.86GB (7506/0/0) 35368272 3 usr wm 1191 - 2190 2.25GB (1000/0/0) 4712000 4 var wm 2191 - 3190 2.25GB (1000/0/0) 4712000 5 home wm 3191 - 7490 9.66GB (4300/0/0) 20261600 6 unassigned wm 7491 - 7505 34.51MB (15/0/0) 70680 7 unassigned wm 0 0 (0/0/0) 0

※ 0が/ 1がswap 2 はDisk全体 というのは固定
※ 6がmetadb用のスライス

Flagの意味は
wm	パーティションは書き込み可能でmount可能
wu	書き込み可能でmount不可。swapだとこれがいい
rm	パーティションは読み取り専用でmount可能

○スライスを分割する
※Disk全体をいっぺんに分割するならmodify
 一部分を変更するなら
 0 - change `0' partition
 などでいじくる

partition> modify

Select partitioning base: 0. Current partition table (original) 1. All Free Hog Choose base (enter number) [0]? 1

Part Tag Flag Cylinders Size Blocks 0 root wm 0 0 (0/0/0) 0 1 swap wu 0 0 (0/0/0) 0 2 backup wu 0 - 7505 16.86GB (7506/0/0) 35368272 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 usr wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0

Do you wish to continue creating a new partition table based on above table[yes]? yes Free Hog partition[6]? 7 Enter size of partition '0' [0b, 0c, 0.00mb, 0.00gb]: 968c Enter size of partition '1' [0b, 0c, 0.00mb, 0.00gb]: 223c Enter size of partition '3' [0b, 0c, 0.00mb, 0.00gb]: 1000c Enter size of partition '4' [0b, 0c, 0.00mb, 0.00gb]: 1000c Enter size of partition '5' [0b, 0c, 0.00mb, 0.00gb]: 4300c Enter size of partition '6' [0b, 0c, 0.00mb, 0.00gb]: 15c

Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 967 2.17GB (968/0/0) 4561216 1 swap wu 968 - 1190 513.07MB (223/0/0) 1050776 2 backup wu 0 - 7505 16.86GB (7506/0/0) 35368272 3 unassigned wm 1191 - 2190 2.25GB (1000/0/0) 4712000 4 unassigned wm 2191 - 3190 2.25GB (1000/0/0) 4712000 5 unassigned wm 3191 - 7490 9.66GB (4300/0/0) 20261600 6 usr wm 7491 - 7505 34.51MB (15/0/0) 70680 7 unassigned wm 0 0 (0/0/0) 0

Okay to make this the current partition table[yes]? yes Enter table name (remember quotes): mirror

Ready to label disk, continue? yes

partition> q format> q

※/etc/vfstab をいじくる

# reboot

format > partition > print で確認する。

Flag を変えたければ partition > 0 などで変更する
wm	パーティションは書き込み可能でmount可能
wu	書き込み可能でmount不可。swapだとこれがいい
rm	パーティションは読み取り専用でmount可能

○【metadb用スライスがない場合】
swap領域を削って新スライスを作成する

1.システムを停止し、シングルユーザーモードで起動する

[root@unknown /]#halt
...
ok boot -s
...
2.swap -l コマンドでスワップ領域を確認する
#swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 32,1 16 1050752 1050752
3.スワップをOFFにして、確認する
#swap -d /dev/dsk/c0t0d0s1
#swap -l
No swap devices configured

4.format > partition > 1 を使い、swap領域を再構成する

5.システムを再起動させて、新しいスライスができたのを確認する

○ミラー化するための手順
s0t0d0 が空きスライスを1個含めた構成にする
ただし、最初のスライスは / にmountさせること
また、復旧時のためにこの結果は必ず保存しておくこと

Part Tag Flag Cylinders Size Blocks
0 root wm 0 - 966 2.17GB (967/0/0) 4556504
1 swap wu 968 - 1190 513.07MB (223/0/0) 1050776
2 backup wm 0 - 7505 16.86GB (7506/0/0) 35368272
3 usr wm 1191 - 2190 2.25GB (1000/0/0) 4712000
4 var wm 2191 - 3190 2.25GB (1000/0/0) 4712000
5 home wm 3191 - 7490 9.66GB (4300/0/0) 20261600
6 unassigned wm 7491 - 7505 34.51MB (15/0/0) 70680

s0t1d0 を s0t0d0 とまったく同じ構成にする(mountはしない)
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 - 967 2.17GB (968/0/0) 4561216
1 unassigned wm 968 - 1190 513.07MB (223/0/0) 1050776
2 unassigned wm 0 - 7505 16.86GB (7506/0/0) 35368272
3 unassigned wm 1191 - 2190 2.25GB (1000/0/0) 4712000
4 unassigned wm 2191 - 3190 2.25GB (1000/0/0) 4712000
5 unassigned wm 3191 - 7490 9.66GB (4300/0/0) 20261600
6 unassigned wm 7491 - 7505 34.51MB (15/0/0) 70680

metadbを両ディスクの空きスライスに作成する
# /usr/sbin/metadb -a -f -c 2 c0t0d0s6 c0t1d0s6
# metadb -i // DBの出来具合が確認できる

/ のメタデバイスをつくり、ミラー化する
# metainit -f d11 1 1 c0t0d0s0 // サブミラーd11を作成
# metainit d12 1 1 c0t1d0s0 // サブミラーd12を作成
# metainit d10 -m d11 // ミラーd10をサブミラーd11から作成
# metaroot d10 // 「/」の場合はこれが必要
# lockfs -fa
# reboot // 再起動する
...
# metattach d10 d12 // ミラーd10にサブミラーd12を参加させる
# metastat // ミラーの様子が確認できる

swapも同様にミラー化する
# metainit -f d21 1 1 c0t0d0s3
# metainit d22 1 1 c0t1d0s3
# metainit d20 -m d21
※ここで/etc/vfstab を書き換える
/dev/md/dsk/d20 - - swap - no -
# reboot
...
# metattach d20 d22

以下、/usr /opt を同様にミラー化して、/etc/vfstabを編集
# metainit -f d31 1 1 c0t0d0s3
# metainit d32 1 1 c0t1d0s3
# metainit d30 -m d31
/dev/md/dsk/d30 /dev/md/rdsk/d30 /usr ufs 1 no -
# reboot
...
# metattache d30 d32

以下、マウント解除可能なものを上と同様に処理するが
rebootの必要はなく、umount -> mount でよい

※/etc/vfstabの書き換え
/dev/md/dsk/d40 /dev/md/rdsk/d40 /var ufs 1 no -
/dev/md/dsk/d50 /dev/md/rdsk/d50 /home ufs 2 yes -

○ミラーDiskの交換
スライスにエラーが出たときはこんな表示になる

# metastat
d30: ミラー
サブミラー 0: d31
状態: 正常
サブミラー 1: d32
状態: 保守が必要
パス: 1
読み込みオプション: ラウンドロビン (巡回的) (デフォルト)
書き込みオプション: 並列処理的 (デフォルト)
サイズ: 4712000 ブロック

状態データベースに障害が出てるときはこのようになる

# metadb
flags first blk block count
a m p lu 16 1034 /dev/dsk/c0t0d0s6
a p l 1050 1034 /dev/dsk/c0t0d0s6
M p unknown unknown /dev/dsk/c0t1d0s6
M p unknown unknown /dev/dsk/c0t1d0s6

障害の発生したDisk上の状態データベースを削除する ※実は検証時、「Read-only file system 」とか出て削除できず  大変困ったのだが、その後rebootさせたらしっかり削除されていた  
# metadb -d /dev/dsk/c0t1d0s6
metadb: unknown: /etc/lvm/mddb.cf.new: Read-only file system
# reboot 
...
# metadb
フラグ 最初のブロック ブロック数
a m p luo 16 1034 /dev/dsk/c0t0d0s6
a p luo 1050 1034 /dev/dsk/c0t0d0s6

障害の発生したDisk上のスライスを利用するサブミラーの切断
# metadetach d50 d52
metadetach: unknown: d50: エラーコンポーネントがあるサブミラーに対して操作しよう
としています

困った。。。ので「-f」をつけて切断してみる

# metadetach -f d50 d52
d50: サブミラー d52 は切断中

なんとか切断できたようである

# metastat d50
d50: ミラー
サブミラー 0: d51
状態: 正常
パス: 1
読み込みオプション: ラウンドロビン (巡回的) (デフォルト)
書き込みオプション: 並列処理的 (デフォルト)
サイズ: 20261600 ブロック

以下、同様にして障害Disk上の全てのサブミラーを切断

# metadetach -f d40 d42
d40: サブミラー d42 は切断中
# metadetach -f d30 d32
d30: サブミラー d32 は切断中
# metadetach -f d20 d22
d20: サブミラー d22 は切断中
# metadetach -f d10 d12
d10: サブミラー d12 は切断中

すると、こんな感じで表示される

# metastat
d10: ミラー
サブミラー 0: d11
状態: 正常
パス: 1
読み込みオプション: ラウンドロビン (巡回的) (デフォルト)
書き込みオプション: 並列処理的 (デフォルト)
サイズ: 4556504 ブロック

d11: d10 のサブミラー 状態: 正常 サイズ: 4556504 ブロック ストライプ 0: デバイス 開始ブロック MetaDB 状態 ホットスペア c0t0d0s0 0 いいえ 正常

d20: ミラー サブミラー 0: d21 状態: 正常 パス: 1 読み込みオプション: ラウンドロビン (巡回的) (デフォルト) 書き込みオプション: 並列処理的 (デフォルト) サイズ: 1050776 ブロック

d21: d20 のサブミラー 状態: 正常 サイズ: 1050776 ブロック ストライプ 0: デバイス 開始ブロック MetaDB 状態 ホットスペア c0t0d0s1 0 いいえ 正常

d30: ミラー サブミラー 0: d31 状態: 正常 パス: 1 読み込みオプション: ラウンドロビン (巡回的) (デフォルト) 書き込みオプション: 並列処理的 (デフォルト) サイズ: 4712000 ブロック

d31: d30 のサブミラー 状態: 正常 サイズ: 4712000 ブロック ストライプ 0: デバイス 開始ブロック MetaDB 状態 ホットスペア c0t0d0s3 0 いいえ 正常

d40: ミラー サブミラー 0: d41 状態: 正常 パス: 1 読み込みオプション: ラウンドロビン (巡回的) (デフォルト) 書き込みオプション: 並列処理的 (デフォルト) サイズ: 4712000 ブロック

d41: d40 のサブミラー 状態: 正常 サイズ: 4712000 ブロック ストライプ 0: デバイス 開始ブロック MetaDB 状態 ホットスペア c0t0d0s4 0 いいえ 正常

d50: ミラー サブミラー 0: d51 状態: 正常 パス: 1 読み込みオプション: ラウンドロビン (巡回的) (デフォルト) 書き込みオプション: 並列処理的 (デフォルト) サイズ: 20261600 ブロック

d51: d50 のサブミラー 状態: 正常 サイズ: 20261600 ブロック ストライプ 0: デバイス 開始ブロック MetaDB 状態 ホットスペア c0t0d0s5 0 いいえ 正常

d12: Concat/Stripe サイズ: 4561216 ブロック ストライプ 0: デバイス 開始ブロック MetaDB c0t1d0s0 0 いいえ

d22: Concat/Stripe サイズ: 1050776 ブロック ストライプ 0: デバイス 開始ブロック MetaDB c0t1d0s1 0 いいえ

d32: Concat/Stripe サイズ: 4712000 ブロック ストライプ 0: デバイス 開始ブロック MetaDB c0t1d0s3 0 いいえ

d42: Concat/Stripe サイズ: 4712000 ブロック ストライプ 0: デバイス 開始ブロック MetaDB c0t1d0s4 0 いいえ

d52: Concat/Stripe サイズ: 20261600 ブロック ストライプ 0: デバイス 開始ブロック MetaDB c0t1d0s5 0 いいえ

シングルユーザーモードでブートする

# halt
..
ok boot -s
..

Diskを交換し、スライス分割

# format
AVAILABLE DISK SELECTIONS:
0. c0t0d0 
/pci@1f,0/pci@1,1/scsi@2/sd@0,0
1. c0t1d0 
/pci@1f,0/pci@1,1/scsi@2/sd@1,0

Specify disk (enter its number): 1 // 1が新Disk selecting c0t1d0 [disk formatted]

format> partition

partition> modify

Select partitioning base: 0. Current partition table (original) 1. All Free Hog Choose base (enter number) [0]? 1

Part Tag Flag Cylinders Size Blocks 0 root wm 0 0 (0/0/0) 0 1 swap wu 0 0 (0/0/0) 0 2 backup wu 0 - 7505 16.86GB (7506/0/0) 35368272 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 usr wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0

Do you wish to continue creating a new partition table based on above table[yes]? yes Free Hog partition[6]? 7 Enter size of partition '0' [0b, 0c, 0.00mb, 0.00gb]: 968c Enter size of partition '1' [0b, 0c, 0.00mb, 0.00gb]: 223c Enter size of partition '3' [0b, 0c, 0.00mb, 0.00gb]: 1000c Enter size of partition '4' [0b, 0c, 0.00mb, 0.00gb]: 1000c Enter size of partition '5' [0b, 0c, 0.00mb, 0.00gb]: 4300c Enter size of partition '6' [0b, 0c, 0.00mb, 0.00gb]: 15c

Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 967 2.17GB (968/0/0) 4561216 1 swap wu 968 - 1190 513.07MB (223/0/0) 1050776 2 backup wu 0 - 7505 16.86GB (7506/0/0) 35368272 3 unassigned wm 1191 - 2190 2.25GB (1000/0/0) 4712000 4 unassigned wm 2191 - 3190 2.25GB (1000/0/0) 4712000 5 unassigned wm 3191 - 7490 9.66GB (4300/0/0) 20261600 6 usr wm 7491 - 7505 34.51MB (15/0/0) 70680 7 unassigned wm 0 0 (0/0/0) 0

Okay to make this the current partition table[yes]? yes Enter table name (remember quotes): mirror

Ready to label disk, continue? yes

partition> q format> q # reboot ..

このようになっていればOKです

partition> print
Current partition table (original):
Total disk cylinders available: 7506 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 - 967 2.17GB (968/0/0) 4561216 1 unassigned wm 968 - 1190 513.07MB (223/0/0) 1050776 2 unassigned wm 0 - 7505 16.86GB (7506/0/0) 35368272 3 unassigned wm 1191 - 2190 2.25GB (1000/0/0) 4712000 4 unassigned wm 2191 - 3190 2.25GB (1000/0/0) 4712000 5 unassigned wm 3191 - 7490 9.66GB (4300/0/0) 20261600 6 unassigned wm 7491 - 7505 34.51MB (15/0/0) 70680 7 unassigned wm 0 0 (0/0/0) 0

新Diskに状態データベースを追加

# metadb -a -c 2 c0t1d0s6
# metadb
フラグ 最初のブロック ブロック数
a m p luo 16 1034 /dev/dsk/c0t0d0s6
a p luo 1050 1034 /dev/dsk/c0t0d0s6
a u 16 1034 /dev/dsk/c0t1d0s6
a u 1050 1034 /dev/dsk/c0t1d0s6

切断されたミラーを再接続

# metattach d10 d12
d10: サブミラー d12 は接続中
# metattach d20 d22
d20: サブミラー d22 は接続中
# metattach d30 d32
d30: サブミラー d32 は接続中
# metattach d40 d42
d40: サブミラー d42 は接続中
# metattach d50 d52
d50: サブミラー d52 は接続中
# metastat
でミラーを再同期しているのが確認できる

すべて再同期が終わったら
# fsck などでファイルシステムをチェックするのもいいかもしれない

○metadb       状態データベースを作成、保守する

# metadb [-i]
# metadb [option] slice...

-a 新しいデータベースデバイスの追加 -c num 各デバイスにおくDB複製の数(2つ以上がいい) -f 新規で新しい状態DBを作成する -d 指定したスライス上の状態DBをすべて削除 -i 状態の詳細な表示

□状態データベースのチェック

# metadb -i
フラグ 最初のブロック ブロック数
a m p luo 16 1034 /dev/dsk/c0t0d0s6
a p luo 1050 1034 /dev/dsk/c0t0d0s6
a p luo 16 1034 /dev/dsk/c0t1d0s6
a p luo 1050 1034 /dev/dsk/c0t1d0s6
【正常系のフラグ】
a - 複製はアクティブです。確定操作はこの複製に対して行われます
m - 複製はマスターです。この複製は入力として選択されています
p - 複製の場所はカーネルにパッチされました
l - この複製のロケータは無事読み込まれました
u - 複製は最新です
o - 複製は最後の mddb 構成変更の前までアクティブでした
c - 複製の場所は /etc/lvm/mddb.cf です
【異常系のフラグ】
W - 複製にはデバイス書き込みエラーがあります
M - 複製はマスターブロックで問題を起こしました
D - 複製はデータブロックで問題を起こしました
F - 複製はフォーマット問題を起こしました
S - 複製は現在のデータベースを入れるには小さすぎます
R - 複製はデバイス読み込みエラーを起こしました

□状態データベースの新規作成

# metadb -a -f -c 2 c0t0d0s6 c0t1d0s6

□状態データベースの除去

# metadb -d c0t0d0s6

○metastat         メタデバイスをチェックする

# metastat [option] [メタデバイス]

option -h help -t 最後に状態変化した時刻を表示する -p md.tabの形式で表示する

【状態】

正常	--
再同期中	再同期している最中

要保守 このスライスでの読み書きはこれ以降発生しない スライスを有効にするか交換すること これでなおらなければDisk交換

LastErred DiskSuiteが異常を感知した後も読み書きがされて いるのでデータが失われている可能性が高い 最初に「要保守」のスライスを「交換」し、 データの再同期処理と妥当性検査を行ってから LastErredのスライスを交換する

# metastat -t d10
d10: ミラー
サブミラー 0: d11
状態: 正常 2003年07月15日 (火) 16時26分07秒
サブミラー 1: d12
状態: 正常 2003年07月15日 (火) 18時10分37秒
パス: 1
読み込みオプション: ラウンドロビン (巡回的) (デフォルト)
書き込みオプション: 並列処理的 (デフォルト)
サイズ: 4556504 ブロック

○metainit        メタデバイスを作成する

# metainit [option] メタデバイス名 numstripes width スライス名
# metainit [option] mirror -m submirror

-f アンマウント不可能なファイルシステムから メタデバイスを構成するときに使用する numstripes メタデバイス内のストライプの数、ミラーでは1 width ストライプを構成するスライスの数、ミラーでは1 mirror -m submirror ミラーを構成する

○metaclear        メタデバイスを削除する

# metaclear [option] メタデバイス名
# metaclear [option]

-a メタデバイスをすべて除去する -f エラー状態が含まれているメタデバイスを強制的に除去する

○metattach,metadetach  ミラーにメタデバイスを追加、除外する

# metaclear [option] メタデバイス名
# metaclear [option]

-a メタデバイスをすべて除去する -f エラー状態が含まれているメタデバイスを強制的に除去する

○metattach,metadetach  ミラーにメタデバイスを追加、除外する

# metattach ミラー サブミラー
# metadetach [-f] ミラー サブミラー

-f 保守の必要があるサブミラーを強制的に除外する

○metaoffline,metaonline  サブミラーの状態をオンライン、オフラインにする

# metaofflene [-f] ミラー サブミラー
# metaonline ミラー サブミラー

-f 保守の必要があるサブミラーを強制的にオフラインにする

○metarename        メタデバイスの名前を変更する

# metarename 旧メタデバイス 新メタデバイス
# metarename [-f] -x メタデバイス1 メタデバイス2

-f 強制的に切り替える -x メタデバイス名を交換する

○metareplace        サブミラーのスライスを交換または有効にする

# metareplace -e mirror スライス
# metareplace mirror [旧スライス] [新スライス]

-e スライスを使用可能にし、再同期処理を行う

○metaroot        「/」ファイルシステムののメタデバイスを構成する
# metaroot メタデバイス

○用語集

【スライス】

Intelマシンで言うところの、パーティション
ただし、SUNのspark系のマシンでは「fdisk」はつかえず、
「format」コマンドを使うことになる。

# df -k
# mount
# format > verify
などで確認できる。

【DiskSuite】
メタデバイス、メタデバイス状態DB、ホットスペア集合
という3種類のDiskSuite オブジェクトによって、
複数の物理的なHDDをひとつの論理的なHDDとして扱う。

目的は、
ディスク容量を増やす
データの可用度を高める

・単純連結方式   ひとつのスライスが埋まるまで次のスライスには書き込まない
・ストライプ方式   複数のスライスに交互にデータを書きこんでいく

【メタデバイス】
物理スライスの集まりで、システムからは1 つの論理デバイスとして認識される。
※Windows2000Serverのボリュームに近い
/dev/md/(r)dsk/ の中に格納されている
名前もこのなかにあるものをつけること

【metadb(メタデバイス状態データベース)】
DiskSuiteの構成や状態に関する情報を格納するデータベース。
3つ以上を異なるDISKに分散させておく

【ホットスペア集合】
メタデバイスを構成しているスライスの予備にあたる未使用のスライスのこと
障害時は自動的にメタデバイスの構成に参加する

Static route を起動時に設定する。

|
○/etc/rc2.d/S69inet
# Static routing table
if [ -f /etc/local.route ]; then
/etc/local.route && echo " set local routing table."
fi
○/etc/local.route
#!/bin/sh
route add -net 172.16.0.0/16 172.16.0.254
※744にすること

Solaris OSパラメータ一覧

|

http://homepage2.nifty.com/BASH/sol/ndd.html

これらのパラメータ値を変更する場合には「ndd」コマンドを使用して変更することが可能

/dev/ip
/dev/tcp
/dev/udp
/dev/icmp
/dev/hme
/dev/ge

システム情報を見る

|
■デバイス情報を表示します。
% sysdef 
■システム設定やドライバ情報を表示します。
% prtconf 
■CPU 情報を表示します。
% psrinfo

パケットフィルタリング設定例

|

参考
■ポート445(ダイレクト・ホスティングSMBサービス)に注意
http://www.atmarkit.co.jp/fwin2k/win2ktips/088directhostedsmb/088directhostedsmb.html

■9-3.IPフィルタリング
http://www.cool-r32.com/myserver/9-3.html

■プライベートアドレスを遮断する
1 in 10.0.0.0/8 * * * * Reject
2 in 172.16.0.0/12 * * * * Reject
3 in 192.168.0.0/16 * * * * Reject
4 in * 10.0.0.0/8 * * * Reject
5 in * 172.16.0.0/12 * * * Reject
6 in * 192.168.0.0/16 * * * Reject
■WindowsポートとSNMPポートを遮断する
7 in * * * 135-139 * Reject
8 in * * * * 135-139 Reject
9 in * * * 445 * Reject
10 in * * * * 445 Reject
11 in * * * 161 * Reject
12 in * * * * 161 Reject
13 out * * * 135-139 * Reject
14 out * * * * 135-139 Reject
15 out * * * 445 * Reject
16 out * * * * 445 Reject
17 out * * * 161 * Reject
18 out * * * * 161 Reject

■DNS
問い合わせでは任意のポートからUDP53に要求する
ゾーン転送ではTCP53を使用する

■HTTP
19 in * * TCP * www(80)&https(443) Pass 
■FTP
20 in * * * * 20-21(ftp,ftpdata) Reject
アクティブモード・・・TCP21で制御、TCP20でデータ転送 パッシブモード・・・TCP21で制御、1025以上のTCPポートでデータ転送 ■Telnet
21 in * * * * telnet(23) Reject 
■メール
22 in * * TCP * smtp(25)&ident(113) Pass
23 in * * TCP-SYN * pop3(110) Reject
24 in * * TCP * pop3(110) Pass

IMAPはTCP143

■全ての外部開始セッションのTCPを全て遮断
25 in * * TCP-SYN * * Reject

パケットフィルタリングポリシー

|

1.外部からはルーターの設定をさせない

2.外部からは内部のクライアントにアクセスさせない

3.内部ネットワークのIPを詐称したアクセスを拒否
  (外部からのFromプライベートアドレスを拒否する)

4.特権ポート(1~1024)同士のパケットを通過させない

5.ブロードキャストアドレスへのパケットを通過させない

6.内部ネットワークからのクライアントからは外部に接続できる

7.Windowsネットワークやr系サービスのパケットを通過させない

NetBIOS名前サービス UDP 137
NetBIOS名前サービス TCP 137
NetBIOSデータグラム・サービス UDP 138
NetBIOSセッション・サービス TCP 139
ダイレクト・ホスティングSMBサービス TCP/UDP 445 

8.Windowsファイル共有など、内部のみで使用するサービスは外部からアクセスできない

9.サーバーに対して、公開しているサービスのパケットのみを通過させる

■環境変数にPATHとLD_LIBRARY_PATHを追加する
PATH=/usr/bin:/usr/sbin:/usr/lib/lvm:/etc/lvm
	:/usr/local/sbin:/usr/local/bin
	:/usr/ccs/bin
	:/usr/local/ssl/bin
	:/usr/local/ssl/lib
	:/usr/local/apache/bin
LD_LIBRARY_PATH=/usr/local/ssl/lib
export PATH LD_LIBRARY_PATH
[root@www Source]# source /.bash_profile
■open_ssl mod_ssl apache を /usr/local/src/下に展開
[root@www src]# gunzip apache-1.3.27.tar.gz ;gunzip mod_ssl-2.8.12-1.3.27.tar.gz ;gunzip openssl-0.9.6i.tar.gz
[root@www src]# tar xvf apache-1.3.27.tar ;tar xvf mod_ssl-2.8.12-1.3.27.tar;tar xvf openssl-0.9.6i.tar

■gccとmakeのインストール

[root@www Binary]# gunzip gcc-2.95.3-sol8-sparc-local.gz
[root@www Binary]# gunzip make-3.80-sol9-sparc-local.gz
[root@www Binary]# pkgadd -d gcc-2.95.3-sol8-sparc-local

The following packages are available: 1 SMCgcc gcc (sparc) 2.95.3

Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: all

Processing package instance from -sparc-local>

gcc (sparc) 2.95.3 Free Software Foundation Using as the package base directory. ## Processing package information. ## Processing system information. 6 package pathnames are already properly installed. ## Verifying disk space requirements. ## Checking for conflicts with packages already installed. ## Checking for setuid/setgid programs.

Installing gcc as

Installation of was successful.

[root@www Binary]# pkgadd -d make-3.80-sol9-sparc-local

The following packages are available: 1 SMCmake make (sparc) 3.80

Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: all

Processing package instance from -sparc-local>

make (sparc) 3.80 Free Software Foundation Using as the package base directory. ## Processing package information. ## Processing system information. 5 package pathnames are already properly installed. ## Verifying disk space requirements. ## Checking for conflicts with packages already installed. ## Checking for setuid/setgid programs.

Installing make as

Installation of was successful.

■OpenSSLのインストール
[root@www openssl-0.9.6i]# ./config
[root@www openssl-0.9.6i]# make
[root@www openssl-0.9.6i]# make test
[root@www openssl-0.9.6i]# make install
■テストキーを試す
[root@www ssl]# openssl md5 * > rand.dat
[root@www ssl]# openssl genrsa -des3 -rand rand.dat -out server.key 1024
363 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
......++++++
..........................................++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
[root@www ssl]# openssl rsa -in server.key -out server.key
read RSA key
Enter PEM pass phrase:
writing RSA key
[root@www ssl]# openssl req -new -key server.key -x509 -out server.crt
Using configuration from /usr/local/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

Apacheのインストール

|

■インストールファイルはここ

Apache
http://www.apache.org/dist/httpd/
日本語解説サイト
http://www.apache.jp/docs/

OpenSSL / mod_ssl
ftp://ftp.infoscience.co.jp/pub/Crypto/SSL/
日本語解説サイト
http://japache.infoscience.co.jp/Apache-SSL/

PHP
http://www.php.net/downloads.php

■tar xvzf apache.tar.gz で解凍する

こんな感じのファイルが出来上がる。
ABOUT_APACHE  LICENSE        README-WIN.TXT    cgi-bin        configure  logs
Announcement  Makefile.tmpl  README.configure  conf           htdocs     src
INSTALL       README         WARNING-WIN.TXT   config.layout  icons 


■./configure

・どこにインストールされるのか心配だったらこのように試してみるとよい。  ちなみにlayoutファイルはconfig.layout
# ./configure --with-layout=RedHat --show-layout

・su_execをサポートする
http://www.apache.jp/docs/suexec.html
これも上記の方法でインストールディレクトリを確認できる

# ./configure --with-layout=RedHat --show-layout \ "--enable-suexec" \ "--suexec-caller=apache" \ "--suexec-docroot=/var/www/html" \ "--suexec-logfile=/var/log/httpd/suexec_log" \ "--suexec-uidmin=500" \ "--suexec-gidmin=500"

・DSOモジュールなどを組み込む http://www.apache.jp/docs/mod/index-bytype.html
"--enable-module=so" \      // これは必ず入れておく
"--enable-rule=SHARED_CORE" \  // ちょっとこれが意味不明だけど必要
"--enable-module=info" \     // サーバの設定情報 
"--enable-module=status" \    // サーバーのステータス
"--enable-module=rewrite" \   // 正規表現のURIからファイル名のマッピング機能
■ ./configure のオプション
--quiet   画面上にメッセージを表示しない   
--silent   quietと同じ   
--verbose   画面上に詳細なメッセージを表示   
--shadow[=DIR]   コンパイルに必要なファイルを指定したディレクトリ以下に作成   
--help   画面上にヘルプを表示   
--show-layout   画面上にApacheがインストールされるディレクトリを表示   
--with-layout=[F:]ID   指定したファイルの内容のとおりにApacheのファイルを配置する   
--target=TARGET   設定ファイルなどの名前を変更(httpd.conf→ichishi.confなど)   
--prefix=PREFIX   Apacheがインストールされるディレクトリを変更する   
--exec-prefix=EPREFIX   ファイルの種類別にディレクトリを指定する。変更後、どこにインストールされるかはshow-layoutで確認   
--bindir=DIR   
--sbindir=DIR   
--libexecdir=DIR   
--mandir=DIR   
--sysconfdir=DIR   
--datadir=DIR   
--iconsdir=DIR   
--htdocsdir=DIR   
--cgidir=DIR   
--includedir=DIR   
--localstatedir=DIR   
--runtimedir=DIR   
--logfiledir=DIR   
--proxycachedir=DIR   
--add-module=FILE   Apacheの標準以外のモジュールファイルを追加する   
--activate-module=FILE   
--permute-module=N1:N2   モジュールを組み込む順序を指定する   
--enable-module=NAME   指定したApacheの標準付属モジュールを組み込む   
--disable-module=NAME   指定したApacheの標準付属モジュールを組み込まない   
--enable-shared=NAME   指定したApacheの標準付属モジュールをDSO(補足3)で組み込む   
--disable-shared=NAME   指定したApacheの標準付属モジュールをDSOで組み込まない
    ■
モジュール   機能   デフォルト   
mod_access   ホストに基づいたアクセス制御   Yes   
mod_actions   ファイル種別/メソッドに基づいたスクリプトの実行   Yes   
mod_alias   Aliases   and   redirects.      Yes   
mod_asis   .asis   ファイルハンドラー      Yes   
mod_auth   テキストファイルを用いたユーザ認証      Yes   
mod_auth_anon   FTPスタイルの匿名(Anonymous)ユーザー認証      No   
mod_auth_db   バークレイDBファイルを用いたユーザー認証   No   
mod_auth_dbm   DBMファイルを用いたユーザー認証   No   
mod_autoindex   自動ディレクトリリスト表示      Yes   
mod_cern_meta   HTTPハンドラメタファイルのサポート   No   
mod_cgi   CGIスクリプトの実行      Yes   
mod_digest   MD5ユーザー認証   No   
mod_dir   基本的なディレクトリハンドリング      Yes   
mod_env   CGIスクリプトへの環境変数の継承      Yes   
mod_example   Apache   APIの実証   No   
mod_expires   割り当ての終了:リソースへのヘッダ      No   
mod_headers   リソースに任意のHTTPヘッダを加える   No   
mod_imap   イメージマップファイルのハンドラ   Yes   
mod_include   サーバで解析するドキュメント      Yes   
mod_info   サーバの設定情報      No   
mod_log_agent   ユーザーエージェントのログ蓄積      No   
mod_log_config   ユーザー定義ログ      Yes   
mod_log_referer   ドキュメントリファレンスのログ蓄積      No   
mod_mime   ファイル拡張子を使ったドキュメントタイプの決定      Yes   
mod_mime-magic   magic   numbers   を使ったドキュメントタイプの決定      No   
mod_negotiation   コンテンツのネゴシエーション      Yes   
mod_proxy   キャッシングプロキシ機能      No   
mod_rewrite   通常表記を使った強力なURI-to-filenameマッピング      No   
mod_setenvif   クライアント情報を基にした環境変数の設定      Yes   
mod_spelling   URLでのminor   typosの自動訂正      No   
mod_status   サーバステータスを表示      Yes   
mod_unique-id   あらゆるリクエストのためのユニークなリクエスト識別の生成      No   
mod_userdir   ユーザーのホーム・ディレクトリ      Yes   
mod_usertrack   cookieを用いたユーザー追跡(mod_cookies.cと置き換え)      No
■結果、これでconfigureをやってみる
# ./configure --with-layout=RedHat \
"--enable-suexec" \
"--suexec-caller=apache" \
"--suexec-docroot=/var/www/html" \
"--suexec-logfile=/var/log/httpd/suexec_log" \
"--suexec-uidmin=500" \
"--suexec-gidmin=500" \
"--enable-module=so" \
"--enable-rule=SHARED_CORE" \
"--enable-module=info" \
"--enable-module=status" \
"--enable-module=rewrite"
config.statusファイルとMakefile が出来上がるので
# make
# make install
+--------------------------------------------------------+
| You now have successfully built and installed the | Apache 1.3 HTTP 
| server. To verify that Apache actually | works correctly you now 
| should first check the | (initially created or preserved) 
| configuration files |
| |
| /etc/httpd/conf/httpd.conf
| |
| and then you should be able to immediately fire up | Apache the first 
| time by running: |
| |
| /usr/sbin/apachectl start
| |
| Thanks for using Apache. The Apache Group | http://www.apache.org/ |
+--------------------------------------------------------+
これでインストールが完了する。

■起動スクリプトの作成

通常、rpmでインストールすると、/etc/rc.d/init.d/にhttpdという
スクリプトが出来るので同様に作ってやればよい。

これを /etc/rc.d/rc3.d/S85httpd にシンボリックリンクを作る。
# ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S85httpd
chkconfig --add httpd でもいいのか?

#!/bin/bash
#
# Startup script for the Apache Web Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd
# pidfile: /var/run/httpd.pid
# config: /etc/httpd/conf/access.conf
# config: /etc/httpd/conf/httpd.conf
# config: /etc/httpd/conf/srm.conf

# Source function library. . /etc/rc.d/init.d/functions

# This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS=""

# Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/sbin/apachectl httpd=/usr/sbin/httpd prog=httpd RETVAL=0

# Find the installed modules and convert their names into arguments httpd # can use. moduleargs() { moduledir=/usr/lib/apache moduleargs=` /usr/bin/find ${moduledir} -type f -perm -0100 -name "*.so" | env -i tr '[:lower:]' '[:upper:]' | awk '{\ gsub(/.*\//,"");\ gsub(/^MOD_/,"");\ gsub(/^LIB/,"");\ gsub(/\.SO$/,"");\ print "-DHAVE_" $0}'` echo ${moduleargs} }

# The semantics of these two functions differ from the way apachectl does # things -- attempting to start while running is a failure, and shutdown # when not running is also a failure. So we just do it the way init scripts # are expected to behave here. start() { echo -n $"Starting $prog: " daemon $httpd `moduleargs` $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid } reload() { echo -n $"Reloading $prog: " killproc $httpd -HUP RETVAL=$? echo }

# See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f /var/run/httpd.pid ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" exit 1 esac

exit $RETVAL

POP3プロトコル

|

ポート番号110
行単位での通信を基本とし、行末はCRLF

■状態遷移

Authorization   クライアントとの接続が完了した直後の状態

Transaction    認証完了後

Update       クライアントの通信終了後のメールボックスの更新処理

■認証コマンド

user   ユーザー名を後に入力する。基本的に平文テキストである。

pass   パスワード。上と同様。

apop   MD5の認証を要求するコマンド。

quit   コネクションの切断。

■トランザクションコマンド

STAT   メールドロップに保存されているメッセージの数と総サイズを返す。

LIST   有効なメッセージの番号とサイズを返す。引数に番号を取れる

RETR   指定されたメッセージ番号に対応するメッセージ内容が返される。

DELE   指定されたメッセージ番号の削除をする。実際の削除はUPDATE状態に移ってから。

NOOP   何もならない肯定応答をもらう。

RSET   DELE、LAST コマンドを全てキャンセルさせる。

TOP   RETRと同様の使い方をするが、2番目の引数にメッセージ本文の行数を指定できる。

UIDL   メッセージのidリストを返す。IDはPOPサーバーが付与している。

LAST   クライアントがアクセスしたことがあるメッセージの中で、一番大きい番号を返す。
     最近はないらしい。

■接続例

> telnet

Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です

Microsoft Telnet> set localecho ローカル エコー: オン Microsoft Telnet> set codeset Japanese EUC エミュレーションの種類: VT100/漢字コードセット: Japanese EUC Microsoft Telnet> set CRLF ニューライン モード - リターン キーで CR および LF を送信します Microsoft Telnet> open 192.168.0.4 110 接続中: 192.168.0.4...

+OK dovecot ready. USER hogehoge +OK PASS xxxxxxxxx +OK Logged in. STAT +OK 119 1547303 LIST +OK 119 messages: 1 5629 2 2353 ...

118 8791 119 2487 . TOP 119 +OK ・・・で119のメールの上から100行くらいが表示される . RETR 119 +OK 2487 octets ・・・で、119のメールの全文が表示される . UIDL 119 +OK 119 1143711833.3526 ・・・で、メッセージのIDリストが表示される

QUIT +OK Logging out.

ホストとの接続が切断されました。

SMTPプロトコル

|

ポート番号25
行単位での通信を基本とし、行末はCRLF
改行する場合は行の最後に(-)を入れる。

■SMTPのやり取りの様子
220 dns1.hogehoge.local Microsoft ESMTP MAIL Service, Version: 5.0.2195.5329 ready at Wed, 16 Apr 2003 15:30:41 +0900
helo hogehoge.local               // 受信側に伝えるためのホスト名
250 dns1.hogehoge.local Hello [192.168.0.4]
mail from:<user01@hogehoge.local>        // 差出人
250 2.1.0 user01@hogehoge.local....Sender OK
rcpt to:<hogeo@example.local>         // あて先
250 2.1.5 hogeo@example.local
data                    // メッセージ本文
354 Start mail input; end with <CRLF>.<CRLF>
hogehoge
ugougo
.                      // 「.」で終了
250 2.6.0 <DNS1Fut2aRzhPhN1z1r00000003@dns1.hogehoge.local> Queued mail for delivery
quit                    // コネクション切断
221 hogehoge.local closing connection
■その他のコマンド
・NOOP   肯定応答をもとめるコマンド
・RSET   DATAコマンドを発行するまえなら、これでリセットできる。
・SEND   ユーザーにローカル配信するときに使用する。

■ESMTP

ehlo hogehoge.local           // EHLO で挨拶すると拡張コマンドが表示される
250-dns1.hogehoge.local Hello [192.168.0.4]

250-AUTH GSSAPI NTLM LOGIN 250-AUTH=LOGIN 250-TURN 250-ATRN 250-SIZE 2097152         // メッセージの最大サイズを教えてくれてる 250-ETRN 250-PIPELINING          // レシーバからの応答を待たずに連続してコマンドを発行できる 250-DSN             // DSNが宣言あるとMAILとRCPTで拡張が使える 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250 OK

■リプライコードの例
250 コマンド完了
220 コネクション確立成功
221 コネクション正常切断
354 DATAコマンド受理、メッセージ待ち
※特に55xのエラーはメールシステムに関するエラーなので要注意
500 コマンド構文エラー
550 アドレスエラー。メールボックスが利用できない。
551 ユーザーがローカルではない;<順パス>を試せ
552 記憶領域の割り当てを超えたため、要求された動作を中止した。
553 メールボックス名が不正なものであるため、要求された動作を中止した。
554 トランザクションが失敗した。

sendmail コマンドヘルプ

|
■Sendmail 起動オプション
-b		動作モードを設定
-v		冗長メッセージ出力モードで実行
-d		デバッグモードで実行
-q		直ちにキューを処理する
-f $from	メール送信時にエンベロープFromを指定する
-t		メール送信時にメール本体のFromやToを参照する
-i		メッセージの終了を表す「.」を無効にする

■-bスイッチ

-bd		デーモンとして動作する
-q1h	1時間おきにキューにたまったメールを処理する
-bi		newaliaseに等しい
-bp		mailqに等しい
-bh		hoststatに等しい
-bH		purgestatに等しい

-bv べりファイモード あるアドレスに送られたメールが最終的にどこに送られるか確認できる # sendmail -bv hogehoge@hogehoge.local hogehoge@hogehoge.local... deliverable: mailer local, user hogehoge hogehoge@xxx.ne.jp... deliverable: mailer relay, host smtp.xxx.jp, user hogehoge@xxx.ne.jp

■-vスイッチ メールを配信した際の全手順をコンソールに出力できる。
# sendmail -v hogeo@hogehoge.local < mail.txt
hogeo@hogehoge.local... Connecting to [127.0.0.1] via relay...
220 example.local ESMTP Sendmail 8.12.8/8.12.8; Fri, 5 Dec 2003 12:19:36 +0900
>>> EHLO mail.example.local
250-example.local Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 10485760 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-DELIVERBY 250 HELP
>>> MAIL From: SIZE=9 AUTH=hoge@mail.example.local
250 2.1.0 ... Sender ok
>>> RCPT To:
>>> DATA
250 2.1.5 ... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 hB53JZKn006587 Message accepted for delivery hogeo@hogehoge.local... Sent (hB53JZKn006587 Message accepted for delivery) Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 example.local closing connection
■-dスイッチ
-d[カテゴリ].[レベル],[カテゴリ].[レベル],.... 宛先 < メール本文
例えば、下のようにすると、sendmailの基本設定を確認できる
# sendmail -d0.1 -bv hoge
Version 8.12.8
 Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
                MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
                NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS
                USERDB USE_LDAP_INIT

============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = mail1
(canonical domain name) $j = example.local
(subdomain name) $m = example.local
(node name) $k = mail1
========================================================

hoge... deliverable: mailer local, user hoge

■キュー
すぐに配信ができないメールはキューにいったん格納される
sendmail -bd -q1h とすると1時間おきにキューの処理がされる。
sendmail -q とするとキューの直ちに処理がされる。
キューの状態を見るにはmailq -v もしくは sendmail -bp -v
別のディレクトリに格納してあるキューを処理するには
# sendmail -QueueDirectory=/var/spool/newqueue -OTimeout.queuereturn=10d -q -v
などとする。

   

m4の使用方法

|

■cfディレクトリ
RedHat /usr/share/sendmail-cf/
Solaris8 /usr/lib/mail/

cf ここに基本的なmcファイルがある。
m4 ここは変更しない
ostype 各OS用の設定がある
domain DOMAINマクロで読み込まれる
feature マクロで読み込まれる
hack マクロで読み込まれる
mailer マクロで読み込まれる
sh mcファイルからcfファイルを作るためのスクリプトがある


   

sendmail.mc

|

最近のRedHat系のsendmailなんかの場合、
動かすだけならpostfixなんかよりもよっぽど設定は簡単で、

○/etc/mail/sendmail.mcを編集して
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
にdnlをつけて、
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
にして、必要に応じスマートホストを設定し、
define(`SMART_HOST',`mx.hogehoge.local')
○/etc/mail/accessファイルを
localhost.localdomain           RELAY
localhost                       RELAY
127.0.0.1                       RELAY
192.168.0                       RELAY   # LANのセグメント
hogehoge.local                  RELAY   # LANのドメイン
とかして、 ○/etc/mail/local-host-names
mail.hogehoge.local  #自ホスト
hogehoge.local  # 自ドメイン
とか書いて、あとは、
# make
# make restart
service sendmail restart
sendmail を停止中:                                         [  OK  ]
sm-client を停止中:                                        [  OK  ]
sendmail を起動中:                                         [  OK  ]
sm-client を起動中:                                        [  OK  ]
#
で、動いちゃうんですが、 一応、sendmail.mcの意味を掘り下げてみようかと思います。

○/etc/mail/sendmail.mc

divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl

#m4の必須項目と推奨項目 # mcファイルはOSTYPE()を最初に宣言し、MAILERを最後に宣言します。 # # OSTYPE()  必須  使用するOSの指定 # DOMAIN()  推奨  ドメイン全体に共通の情報 # FEATURE()  推奨  特殊な必要性の解決 # MAILER()  必須  必要な配信エージェント # OSTYPE(`linux')dnl

####################### # DEFINE #######################

# ちなみにsendmail.mcのコメント行は「dnl」で始まる行であって、 # 「#」で始まる行ではありません。 # このページは見やすいから「#」を使ってるだけです。 # また、末尾のdnlはm4でsendmail.cfを作成する際、 # 改行のような役割をするので、つけておいてください。

# 出力ログレベルの設定 # 9はだいたいsyslogのinfoに相当します。これくらいでちょうどでしょう。 # 0(少ない)~98(多い)まで設定できるが、 # 16以上はdebugレベルです。 # 15ですべてのSMTPコマンドが見れます。 dnl define(`confLOG_LEVEL', `9')dnl

# スマートホストの設定 # # このサーバーが、インターネット側から見て、 # 「DNS名の正引き結果とIPアドレスの逆引き結果が一致」 # しているならスマートホストの設定をしなくても送信は可能です。 # (厳密にはその必要はないのですが、 #  そうでないサーバーからのSMTP接続が拒否されてしまう設定が最近非常に増えてます。) # # スマートホストを設定する必要性としては、 # # ・固定IP1個のプロバイダ契約で、正引きは設定できるが、逆引きの設定はできず、 #  そのIPアドレスを逆引きするとプロバイダの名前が引ける。 # # ・メールサーバーがNAPTの内側(つまりLAN内)にあり、 # WAN側からLAN内のメールサーバーの名前引きはまったくできないが、 # DMZセグメントにメールゲートウェイ(メールリレー)サーバーがある # # ・キャンペーンサイトのメール送信などで、一度にたくさんのメールを送信するため、 # メール送信専用サーバーがある(名前引きなどで負荷がかかりますからね。) # # などの場合はスマートホスト、DMZなどにあるメールリレーサーバーを設定します。 # (IPアドレスじゃだめです。) # プロバイダのメールサーバーなんかを指定してもいいのかもしれません。 define(`SMART_HOST',`mx.hogehoge.local')

define(`confDEF_USER_ID',``8:12'')dnl

# trusted-userを設定する define(`confTRUSTED_USER', `smmsp')dnl

# trusted-usersファイルを設定する dnl define(`confCT_FILE', `/etc/mail/trusted-users')

dnl define(`confAUTO_REBUILD')dnl define(`confTO_CONNECT', `1m')dnl define(`confTRY_NULL_MX_LIST',true)dnl define(`confDONT_PROBE_INTERFACES',true)dnl define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl define(`ALIAS_FILE', `/etc/aliases')dnl dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl define(`UUCP_MAILER_MAX', `2000000')dnl define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl

# VRFY・EXPNコマンドの禁止 # このSMTPコマンドを打たれると # メールアドレスやエイリアスの情報を盗まれてしまうのです。

define(`confPRIVACY_FLAGS', `goaway')dnl

# メッセージサイズ上限の設定 # これで約10MBです。(本文と添付ファイルの合計サイズ) define(`confMAX_MESSAGE_SIZE', `10485760')dnl

# あて先数上限の設定 # たくさんばら撒かれるのも困るので。 define(`confMAX_RCPTS_PER_MESSAGE', `128')dnl

# 通過MTA数上限を24HOPまでにする # これはメールピンポン(ループ)を防止するための措置です。 define(`confMAX_HOP', `24')dnl

# 送信保留メールの再送信間隔を5分に define(`confMIN_QUEUE_AGE', `300m')dnl

# 送信保留メールを保持するのを5日(これは長い) define(`confTO_QUEUERETURN', `5d')dnl

# 送信失敗の通知タイミングを4時間に define(`confTO_QUEUEWARN', `4h')dnl

# SMTP-AUTHの設定 必要なければdnlをつけたままにする define(`confAUTH_OPTIONS', `A')dnl # これは必要ないです。 dnl define(`confAUTH_OPTIONS', `A p')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

# STARTTLSを使うときの証明書置き場の設定 # 使うときはdnlをはずす dnl define(`confCACERT_PATH',`/usr/share/ssl/certs') dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt') dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem') dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem') dnl define(`confDONT_BLAME_SENDMAIL',`groupreadablekeyfile')dnl

# Load Averageが値まで上昇したとき、 # Sendmailの送信をいったんキューにためます dnl define(`confQUEUE_LA', `12')dnl

# Load Averageが値まで上昇したとき、 # Sendmailは接続受付を拒否する dnl define(`confREFUSE_LA', `18')dnl

IDENTのクエリの待ち時間を設定。0がよい。 define(`confTO_IDENT', `0')dnl

dnl define(`confMAX_DAEMON_CHILDREN', 12)dnl dnl define(`confCONNECTION_RATE_THROTTLE', 3)dnl

####################### # FEATURE ####################### dnl FEATURE(delay_checks)dnl FEATURE(`no_default_msa',`dnl')dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

# mailertableとvirtusertableのファイルを設定する FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl

FEATURE(redirect)dnl

# すべての発信者アドレスにサーバーのホスト名が追加されます。 # ホスト名というのはFQDNです。 #「xxx@mail.hogehoge.local」みたいな感じになります。 # ※そうじゃなくて「xxx@hogehoge.local」にしたいというひとは #  下のほうのマスカレードを設定してください。 # /etc/hostsか、hostnameコマンドの文字列のどちらかで、 # FQDNとなっているものが@の後ろにくっつきます。 # # むしろ、/etc/hostsかhostnameのどちらにもFQDNが設定されていないと # (というか、自分の名前解決が正常にできなくなってしまうと) # Sendmailの動作がおかしくなってしまうことに問題がありますので、 # サーバーにFQDNと、このalways_add_domainは必ず設定しておきます。 FEATURE(always_add_domain)dnl

# /etc/mail/local-host_namesを使用するために必要です。 FEATURE(use_cw_file)dnl

# /etc/mail/trusted-usersから信頼するユーザーを読み込みます。 FEATURE(use_ct_file)dnl

FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl

# /etc/mail/access を使用する FEATURE(`access_db',`hash -T -o /etc/mail/access.db')dnl

FEATURE(`blacklist_recipients')dnl

# なにはともあれ、Sendmailの設定はここから始まります。 # # 初期状態では、 # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl # と、なっており、SMTP接続を受け付けるアドレスを127.0.0.1からに限定してます。 # # このままでは外部からのSMTP接続を受け付けられないので、 # dnl を先頭につけて、無効化するか、 # DAEMON_OPTIONS(`Port=smtp,Addr=192.168.0.1, Name=MTA')dnl # などと、接続をListenするインターフェースを指定します。 # # ただし、そのままではオープンリレー(誰でもかまわずリレーしてしまう)サーバーとなって # spamメール送信のための踏み台となってしまうので、 # /etc/mail/accessで適切にリレー制限を行う必要があります。 dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl dnl DAEMON_OPTIONS(`Name=MTA-v4, Family=inet, Name=MTA-v6, Family=inet6')

# 名前解決できないドメインからのメールも受け付けます FEATURE(`accept_unresolvable_domains')dnl

# このサーバーをMXレコードにしているドメインからの中継を許可します。 # あまりよいものではないので、dnlにしておくほうがよいでしょう。 dnl FEATURE(`relay_based_on_MX')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

# ここに書かれたドメインが送信メールに必ずつくようになります。 # 「マスカレード」といいます。 # 自分の好きなドメインがつけられるか、 # いやおうなしにサーバーのFQDNがつくかが、 # 上のalways_add_domainとの違いです。 MASQUERADE_AS(`hogehoge.local')dnl

# エンベロープアドレス # (SMTPコマンド中で「MAIL FROM:」で入力するとこです)で # マスカレードするらしいです。普通は必要ないです。 dnl FEATURE(masquerade_envelope)dnl dnl FEATURE(`.hogehoge.local')dnl

# rootからのメールの場合だけはマスカレードしないようにします。 EXPOSED_USER(`root')dnl

dnl MASQUERADE_DOMAIN(localhost)dnl dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

# # MAILER()マクロ # # 配信エージェントにsmtpとprocmailを使っているという宣言です。 # 必ず一番最後に書かなくてはなりません。 # Cyrus-IMAPを使う場合などは # MAILER(`cyrusv2')dnl # MAILER(smtp)dnl # などとしますが、普段は特別変更する必要もないでしょう。 # MAILER(smtp)dnl MAILER(procmail)dnl

   

■IPセキュリティポリシーの構成

①IPフィルタを設定する

【既定のIPフィルタ】
              from IP  to IP  protocol  from port  to port
-------------------------------------------------------------------------------
すべてのICMPトラフィック  自分    任意   ICMP    --      --  ミラー
-------------------------------------------------------------------------------
全てのIP          自分    任意   任意    --      --  ミラー
-------------------------------------------------------------------------------

②フィルタ操作を設定する

上記のフィルタに該当するパケットに対してのセキュリティの条件を設定する。

・許可(パススルー)
・ブロック
・セキュリティのネゴシエート
  この場合は次の3つのチェックボックスが選べる
    1.non-IPSec を受け付けるが、常にIPSecを使って応答する
    2.IPSecに対応していない相手と、non-IPSecでの通信を許可
    3.セッションキーのPFS (Perfect Forward Secrecy)

セキュリティメソッドを設定する。
  3つのパターンから選べる
    1.高(ESP) データの暗号化、認証、改竄防止
    2.中(AH)  データの認証と改竄防止のみ、非暗号化
    3.カスタム

  ※カスタムについて

【既定のフィルタ操作】
        セキュリティメソッド  AH整合性  ESP機密性  ESP整合性  キーの有効期限
-------------------------------------------------------------------------------
許可      許可
-------------------------------------------------------------------------------
セキュリティ  カスタム        <なし>   3DES    SHA1    100000kB/900sec
を要求     カスタム        <なし>   DES     SHA1    100000kB/900sec
(省略可能)  カスタム        SHA1   <なし>    <なし>    100000kB/300sec
        カスタム        MD5    <なし>    <なし>    100000kB/300sec
      ・通常通信を受け付けるが、常にIPSecで応答する
      ・IPSecに対応していないクライアントと通常通信を許可する
-------------------------------------------------------------------------------
セキュリティ  カスタム        <なし>   3DES    SHA1    100000kB/900sec
が必要     カスタム        <なし>   3DES    MD5     100000kB/900sec
        カスタム        <なし>   DES     SHA1    100000kB/900sec
        カスタム        <なし>   DES     MD5     100000kB/900sec
      ・通常通信を受け付けるが、常にIPSecで応答する
-------------------------------------------------------------------------------


③認証方法を設定する

【認証方法】
・Kerberos V5 プロトコル
・証明機関(CA)からの証明書を使う
・文字列を仮共有キーの保護に使う


④トンネルの設定をする

【トンネルの設定】
・IPsecトンネルなし
・エンドポイントのIPアドレスを指定


⑤ネットワークインターフェースを指定する

【接続の種類】
・全てのネットワーク接続
・ローカルエリアネットワーク(LAN)
・リモートアクセス

■既定のIPsecポリシー

・クライアント(応答のみ)
通常は保護なしで通信します。
セキュリティを要求しているサーバーとネゴシエートするには、既定の応答の規則を使用します。
そのサーバーとの間で要求されたプロトコルとポートのトラフィックだけが保護されます。

・サーバー(セキュリティが必要)
すべての IP トラフィックで、Kerberos 信頼を使ったセキュリティを常に要求します。
要求に応答しないクライアントとの、セキュリティで保護されていない通信を許可します。

・セキュリティで保護されたサーバー(セキュリティが必要)
すべての IP トラフィックで、Kerberos 信頼を使ったセキュリティが常に必要です。
信頼されていないクライアントとの、セキュリティで保護されていない通信を許可しません。

IPSec のセキュリティ プロトコル

|

■ESP (Encapsulating Security Payload)

・ESP は、認証、整合性、および不正再実行対策のほかに、機密性を提供します。

・通常、ESP はパケット全体がトンネルされない限り、パケット全体に署名することはありません。

・通常は、データのみが保護され、IP ヘッダーは保護されません。

たとえば、コンピュータ A のアリスがコンピュータ B のボブにデータを送信したとします。
ESP では機密性が提供されるので、データは暗号化されます。
受信時に、検査処理が完了すると、パケットのデータ部分が解読されます。
アリスは、現実にデータを送信したのがボブであり、そのデータは修正されていないこと、
およびほかの人がそのデータを読んでいないことを確信できます。

セキュリティは、IP ヘッダーとトランスポート プロトコル ヘッダー (TCP または UDP) の間に
ESP ヘッダーを置くことで提供されます。

詳しい知識がある場合は、IPSec ポリシーでセキュリティ メソッドを構成することで
通信に使うプロトコルを選択できます。


■AH (Authentication Header)
これは暗号化通信が使えない(例えば、フランスのように市民の暗号化通信が許可されていないといった場合)
というケースのために、最低限「完全性の保証」と「認証」を行うために提供されている。


・AH は、パケット全体 (パケットで運ばれる IP ヘッダーとデータの両方) に対して、
 認証、整合性、および不正再実行対策を提供します。

・AH はパケット全体に署名します。

・AH ではデータが暗号化されないので、機密性は提供されません。

・データの読み取りは可能になりますが、変更からは保護されています。

・パケットの署名には HMAC アルゴリズムが使われます。

たとえば、コンピュータ A のアリスが、コンピュータ B のボブにデータを送信するとします。
IP ヘッダー、AH ヘッダー、およびデータは署名によって変更から保護されます。
これは、アリスが、現実にデータを送信したのがボブであり、
そのデータが変更されていないと確信できることを意味します。

整合性と認証は、IP ヘッダーとトランスポート プロトコル ヘッダー (TCP または UDP) の間に
AH ヘッダーを置くことで提供されます。

IPSec のしくみ

|

①コンピュータAのアプリケーションが、コンピュータBに送信するパケットを生成する。

②IPSecドライバが送信パケットとIPSecフィルタを照合し、
 パケットをセキュリティで保護する必要があるかどうか、判断する。

【Security Association の確立】
 IPSecでは自動でSAの合意をとることが可能な鍵交換プロトコルとして、
 「IKE(Internet Key Exchange)」を規定している。
 
 一致したフィルタが、ネゴシエーションを必要とする場合は、
 AのほうからIKEプロトコルにより、Bとセキュリティネゴシエーションを開始する。
 これにより、2台のコンピュータはある認証方式に従って、身元資格情報を交換する。

  
フェーズ1.IKE SA
    後半の段階で利用する暗号化アルゴリズムを決定するとともに、暗号鍵を生成する。
    
    【ポリシーのネゴシエーション】
     ・暗号化アルゴリズム(DESまたは3DES)
     ・ハッシュアルゴリズム(MD5またはSHA)
     ・認証方法   Kerberos / 公開キー証明書 / 仮共有キー値
     ・基本キー素材に対して使用される Diffie-Hellman(DH)グループ
    
    【DH交換(公開値)】
     このセッションに固有の情報とその暗号を交換する
    
    【認証】
        
フェーズ2.IPSec SA
    IPSec 暗号化通信のネゴシエーションをする。
    これらの通信はフェーズ1で作られたIKE限定の暗号化通信によって行われる
    
    【ポリシーのネゴシエーション】
     ・IPSecプロトコル (AH / ESP)
     ・ハッシュアルゴリズム (MD5 / SHA)
     ・暗号化アルゴリズム (3DES / DES)
    
    【セッションキー素材の更新または交換】
     2度目のDH交換を行い、元のDHを更新してキーの再生成を行う。
     パケットの認証と暗号化のために新しいキーを作成する。
    
    【SAとキーの引渡し】
     IPSecドライバにSAとキーを引き渡す。このときにSPIも引き渡す。

④AのIPSecドライバは、発信パケットの整合性をチェック。
 必要であれば、暗号化して、Bに送信する。

⑤Bは、受け取ったパケットの整合性をチェック。
 暗号も解読する。

viewステートメントの使い方

|

どうも、上からアドレスマッピングをしていくらしく、 一番上のviewに "any" をやってしまうと、それがすべて有効になってしまう。

view "internal" {
        match-clients { 192.168.0.0/24; 127.0.0.1; };

zone "localhost" IN { type master; file "localhost.zone"; };

zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; };

zone "." IN { type hint; file "named.ca"; };

zone "example.local" IN { type master; file "data/db.example.local.internal"; }; };

view "external" { match-clients { any; }; recursion no;

zone "example.local" IN { type master; file "data/db.example.local"; }; };

DynamicDNS

|

■ダイナミックゾーン

・動的にメンテナンスするゾーンは他の方法でメンテナンス出来ない。
 ファイルを手作業で更新するのではない。

①named.conf で allow-update と notify をゾーンに設定する
zone "dyn.example.local" {
   type master;
   file "data/db.dyn.example.local";
   allow-update {
         192.168.100.1;  // DHCPサーバも兼ねる場合、自分自身のアドレスを設定
       };
   notify;               // 更新をすぐにセカンダリに通知する
};
②zoneファイルの設定
TTL    1m
serial   1
refresh  5m
retry   2m
expire   6h
minimum  1m

■クライアント

DNS更新クライアントとなり得るのは、DHCPサーバ、
またはPPPやDHCPサーバから動的にIPアドレスを割り当てられたコンピューターである。

■nsupdateツールを使用する

【ゾーンデータベースへの追加】

※TTLが必須である

> nsupdate
> update add new.dyn.example.local. 600 IN A 172.16.1.2
> (空行が必要)

【ゾーンデータベースからの削除】

> nsupdate
> update delete new.dyn.example.local. IN A
> (空行が必要)

BINDのログを設定するには

|
■bind9のデフォルトロギング
logging {
  category default { default_syslog; default_debug; }; 
};
が設定されている(見えないけど) このため、特に設定をしなくても、syslogにinfoが出力され、 また、traceコマンドをnamedに送れば、named.runにdebugが出力される。 ■全てのログを出力したい
logging {
	channel my_file {
		file "named.log";
		severity debug;
		print-category yes;
		print-severity yes;
		print-time yes;
	};
	
	category debug { my_file; };
	category queries { my_file; };
	category general { my_file; };
};

■channel
ログの出力先を設定する。
その際、メッセージの重要度にフィルタをかけられる(severity)
severityのレベルは、critical/error/warning/notice/info/debug[level]/dynamic

デフォルトのchannelは4種類定義されている(見えないけど)
channel default_syslog { syslog daemon; severity info; }; 
channel default_debug { file "named.run"; severity dynamic; }; 
channel default_stderr { stderr; severity info; }; 
channel null { null; };
■category ログデータの種類を指定する
default  分類可能なカテゴリについて全てを含む   
general  分類不可能なものもを含む
database/security/config/resolver/xfer-in/xfer-out/notify/client/network
update/queries/dispatch/dnssec/lame-servers

  

ラウンドロビンDNS

|

■ラウンドロビンDNSは、DNSサーバの正引き用のゾーン設定ファイルに、
1つのホスト名に対して、複数のAレコードを設定するだけです。
 以下に、www.example.localの設定例を示します。

db.example.localの内容
  $ORIGIN	example.local.
  ----------------------
  www	IN	A	192.168.0.1
  www	IN	A	192.168.0.2


■ラウンドロビンDNSの注意点
 ダウンしたサーバがあると、サイト全体がダウンしていると思われてしまいます。
 そのため、障害時は、ipaliasなどで、すべてのIPでアクセスできるようにする必要があります。
 また、負荷状況を見ていないため、サーバの負荷を見ながら分散するわけではありません。

■ラウンドロビンDNSを設定するには?
options {
   rrset-order { class ANY type ANY name "*" order fixed ; }; 
};
class   INかANY
type    A,NS,CNAME,ANY
name    *で全部の名前をあらわせるが、"www.example.local"というのもあり。
order   fixed,random,cyclic

BINDの設定例

|

■/etc/named.conf の設定例

options {
	directory "/var/named";
	// query-source address * port 53;
};

zone "." IN { type hint; file "named.ca"; };

zone "example.local" IN { type master; file "db.example.local"; };

zone "0.168.192.in-addr.arpa" IN { type master; file "db.192.168.0"; };

・「IN」はQClassがインターネットクラスなのを指しています(省略可能)
・ typeの引数は、hint,master,slave,stub,forward
・ fileはoptionsで指定したディレクトリからの相対パスで記述

■正引きマスターゾーンファイル /var/named/db.example.local の設定例

;
; db.example.local
;

; #キャッシュTTL(世の中のキャッシュDNSサーバがこのゾーンのデータをキャッシュする時間) $TTL 3600

; # 「@」はnamed.confのzone"~"の、「~」の部分の省略形です。 ; # ここから"example.local."の定義の開始になります。 ; # ; # SOAの後に続いているのは ; # MNAMEフィールド(このゾーンのmasterネームサーバ) ; # RNAMEフィールド(このゾーンの管理者のメールアドレス) @ IN SOA dns1.example.local. root.dns1.example.local. ( ; # シリアル番号(設定変更したら増加させる) 2002120401 ; # リフレッシュ(slaveサーバがmasterのシリアル番号をチェックする間隔) 3600 ; # リトライ(slaveサーバがにシリアルのチェックに失敗したときに再試行する間隔) 300 ; # 期限切れ(slaveサーバがmasterのシリアルをチェックできないときにこのゾーンを保持する最大の時間) 360000 ; #ネガティブキャッシュTTL(世の中のキャッシュDNSサーバがこのゾーンの否定応答をキャッシュする時間) 1200 )

; # "example.local."に対して権威を持つネームサーバを記述します。 IN NS dns1.example.local. IN NS dns2.example.local.

; # @example.local宛のメールを受け取るホストを記述します。 IN MX 10 mail.example.local.

; # ここまで"example.local."の定義です。

; # 「hoge」の最後に「.」ドットがないので".example.local."が付加され、 ; # "hoge"は"hoge.example.local."と同じ意味になります。 hoge IN A 192.168.0.254

dns1 IN A 192.168.0.1 dns2 IN A 192.168.0.2

mail IN A 192.168.0.8

www IN CNAME hoge

■逆引きマスターゾーンファイル /var/named/db.192.168.0 の設定例

;
; db.192.168.0
;
$TTL 3600

; # "@" = "0.168.192.in-addr.arpa"です @ IN SOA dns1.example.local. root.dns1.example.local. ( 2002120401 ;Serial 3600 ;Refresh 300 ;Retry 360000 ;Expire 1200 ;Minimum )

IN NS dns1.example.local. IN NS dns2.example.local.

; # ここが逆引きゾーンファイルの特徴

; # "0.168.192.in-addr.arpa"の名前は"example.local"であると ; # PTRレコードで定義しています。 IN PTR example.local.

; # サブネットマスクが255.255.255.0であることはAレコードで定義します。 IN A 255.255.255.0

; # 「.」で終わってないものは"0.168.192.in-addr.arpa"が付加されます。 1 IN PTR dns1.example.local. 2 IN PTR dns2.example.local. 8 IN PTR mail.example.local. 254 IN PTR hoge.example.local.

  

digとnslookupとwhois

|

■digとnslookupの使い方

■Bind9用digの使い方
dig [@global-server] [domain] [q-type] [q-class] {q-opt}
        {global-d-opt} host [@local-server] {local-d-opt}
        [ host [@local-server] {local-d-opt} [...]] .
■Windows用nslookupの使い方
nslookup NAME1 -set type=mx 
       set OPTION      - set an option
           all                 - print options, current server and host
           domain=NAME         - set default domain name to NAME
           retry=X             - set number of retries to X
           timeout=X           - set initial time-out interval to X seconds
           type=X              - set query type (ex. A,ANY,CNAME,MX,NS,PTR,SOA,SRV)
           querytype=X         - same as type
           class=X             - set query class (ex. IN (Internet), ANY)
       server NAME     - set default server to NAME, using current default server
■query type を検索するには? (SOA や A や SRV 等も同様)
# dig example.local mx
> nslookup www.example.local
> nslookup
> set type=mx
> example.local
■再帰をオフにするには?
# dig www.example.local +norec (オンにするには、+rec)
> nslookup
> set norecuse
■問い合わせるネームサーバーを指定するには?
# dig @[サーバー名] www.example.local A +norec
> nslookup www.example.local [DNSサーバー]
> nslookup
> server [DNSサーバー]
> www.example.local
■再起問い合わせの状況を全部見るには
dig +trace www.example.local

■whoisの使い方

whoisの基本書式
$ whois -h WHOIS_SERVER DOMAIN
WHOIS_SERVER whoisサーバーを指定する。 DOMAIN 調べたいドメイン名を指定する。 ドメイン別whoisサーバーの一覧 http://www.domaininformation.de/whoisserver_list.html
  jp whois.jp
  kr whois.krnic.net
  アジア whois.apnic.net
  ヨーロッパ whois.ripe.net
  アメリカ rs.internic.net
・com、net、org、eduドメインの場合の検索例 多分、whoisサーバーを指定しなくても検索できる。 下記のコマンドを実行するとaol.comの情報を検索する。
$ whois aol.com
・jpドメインの場合の検索例 下記のコマンドを実行するとexample.jpの情報を検索する。
$ whois -h whois.jp example.jp

■Windowsでdigを使う

※参照http://pigtail.net/LRP/dig/ windows用のbindを全部インストールする必要はない。 1.C:\windows\system32 に
host.exe 
dig.exe  
libdns.dll  
libeay32.dll  
libisc.dll  
libbind9.dll  
libisccfg.dll  
liblwres.dll
を置く。

ダウンロードするところはここ
ftp://ftp.isc.org/isc/bind/contrib/

2.C:\WINDOWS\system32\drivers\etc\resolv.confを作成し、
nameserver 192.168.0.1
など、所定の記述をする。

3.コマンドラインから、digが使えるようになっているはず。

C:\Documents and Settings\kuwa.BUG_HQ>dig --help
Invalid option: --help
Usage:  dig [@global-server] [domain] [q-type] [q-class] {q-opt}
            {global-d-opt} host [@local-server] {local-d-opt}
            [ host [@local-server] {local-d-opt} [...]]

Use "dig -h" (or "dig -h | more") for complete list of options

+traceとかが使えないのは痛い。。。

  

DNSプロトコルのフォーマット

|

■一般にUDP53番が使われるが、ゾーン転送だけは信頼性を重視し、
TCP53番が使われるので注意

■DNSメッセージヘッダのフォーマット
0   4   8   12  16  20  24  28  31
----------------------------------
 Identification | Flag
----------------------------------
 QDCount        | ANCount
----------------------------------
 NSCount        | ARCount
----------------------------------
    QDCount:    質問の項目数
    ANCount:    回答の項目数
    NSCount:    オーソリティの項目数
    ARCount:    追加情報の項目数

Flags:
QRフラグ(1bit):0は問合せ。1だと応答メッセージ
Opcode(4bit): 0/標準問合せ 1/逆問合せ 2/サーバー状態要求 3-15/未使用
AA(1bit)
TC(1bit)
RD(1bit)
RA(1bit)
Res(3bit)
RCode(4bit): 0/エラーなし    1/フォーマットエラー
2/サーバー障害  3/ドメインが存在しない
4/未実装     5/拒絶
6~15/未使用

■リソースレコードのフォーマット
0   4   8   12  16  20  24  28  31
----------------------------------
           Name(名前)
----------------------------------
     QType      |    QClass
----------------------------------
        TTL(resolvでの保存期間)
----------------------------------
     RDLength   |    RData
(ここにいろんな情報が入る)
----------------------------------
【QTypeコード】
1   A   ホストアドレス
5   CNAME エイリアス
15  MX   メールエクスチェンジャー
2   NS   オーソリティネームサーバー
12  PTR  ドメイン名スペースへのポインタ
6   SOA  オーソリティゾーンの起点
252 AXFR  ゾーン全体の転送要求
254 MAILB メールボックス関連レコードの要求
【QClassコード】
1   IN   インターネットシステム
3   CH   カオスシステム
155 *    全レコードの要求

■名前解決要求パケット

Transaction ID: 0x0004

質問セクション www.example.local: type A, class inet QName: www.example.local QType: Host address QClass: inet
0000  00 01 80 05 6b 43 00 01 80 04 d3 fa 08 00 45 00   ....kC........E.
0010  00 3e 51 78 00 00 80 11 b4 b6 0a 00 10 7d 0a 00   .>Qx.........}..
0020  10 04 06 91 00 35 00 2a bc 4d 00 04 01 00 00 01   .....5.*.M......
                                    ----- ----- -----
                                    ID    Flags QDC

0030 00 00 00 00 00 00 03 77 77 77 08 64 65 6b 6f 62 .......www.examp
----- ----- ----- -----------------------------
ANC NSC ARC . w w w . e x a m p

0040 6f 6b 6f 03 63 6f 6d 00 00 01 00 01 le.locl.....
----------------------- ----- -----
l e . l o c l Nu QType QClass

■名前解決応答パケット

Domain Name System (response)
    Transaction ID: 0x0004

Flags: 0x8180 (Standard query response, No error) Response: Message is a response Opcode: Standard query (0) Authoritative: Server is not an authority for domain Truncated: Message is not truncated Recursion desired: Do query recursively Recursion available: Server can do recursive queries Answer authenticated: Answer/authority portion was not authenticated by the server Reply code: No error (0)

Questions: 1 Answer RRs: 2 Authority RRs: 0 Additional RRs: 0

Queries www.example.local: type A, class inet Name: www.example.local Type: Host address Class: inet

回答セクション www.example.local: type CNAME, class inet, cname hoge.example.local Name: www.example.local Type: Canonical name for an alias Class: inet Time to live: 5 hours, 26 minutes, 28 seconds Data length: 7 Primary name: hoge.example.local hoge.example.local: type A, class inet, addr 192.168.0.1 Name: hoge.example.local Type: Host address Class: inet Time to live: 21 hours, 41 minutes, 28 seconds Data length: 4 Addr: 192.168.0.1
0000  00 01 80 04 d3 fa 00 01 80 05 6b 43 08 00 45 00   ..........kC..E.
0010  00 61 00 2a 00 00 80 11 05 e2 0a 00 10 04 0a 00   .a.*............
0020  10 7d 00 35 06 91 00 4d eb 01 00 04 81 80 00 01   .}.5...M........
                                    ----- ----- -----
                                    ID    Flags QDC
.
0030  00 02 00 00 00 00 03 77 77 77 08 64 65 6b 6f 62   .......www.examp
      ----- ----- ----- -----------------------------
      ANC   NSC   ARC   .  w  w  w  .  e  x  a  m  p

0040 6f 6b 6f 03 63 6f 6d 00 00 01 00 01 c0 0c 00 05 le.locl.........
----------------------- ----- ----- -----
l e . l o c l Nu Qtype QClas .

0050 00 01 00 00 4c 84 00 07 04 7a 61 6b 75 c0 10 c0 ....L....hoge...
0060 2e 00 01 00 01 00 01 31 08 00 04 2b f4 22 26 .......1...+."&

DNSの概要

|

■FQDN

www.example.local のように、コンピュータを一意に識別できるドメイン名の表記
ホスト名と呼ばれることが多い。


■ローカルDNS

【再帰的解決】
問合せに対し、必ず、正対した回答を返信する。
リゾルバに対するローカルDNSの振る舞いはこれ。

【反復的解決】
参照先DNSを返されるようなことをいう。
ローカルDNSがルートDNSに問い合わせたときなど。

■オーソリティは通常2台以上
普通、プライマリDNSとセカンダリDNS、2台は用意する。

■in-addr.arpa ドメイン

たとえば、「192.168.0.1」を持つホストは
「0.168.192.in-addr.arpa」ドメインに属することになり、
FQDNは「1.0.168.192.in-addr.arpa」となる。

逆引きの場合はPTRレコードで解決される。


ネームサーバーの種類

■プライマリDNSサーバー
ひとつのゾーンに1台用意する。
所属するゾーンに対して全ての権限をもつ。

■セカンダリDNSサーバー
プライマリDNSのバックアップサーバー
・負荷分散にも使うときがある
・ゾーンに対する変更を加えることは出来ない
・プライマリに昇格することは出来ない

■キャッシングオンリーDNSサーバー
クエリを実行して、その結果をキャッシュに保存するだけ。
・否定応答が出来る。
 存在しない名前解決のときに、Timeoutまで待つ必要がない

■フォワーダDNSサーバー
外部に代表して問い合わせをするDNSサーバー。

【非排他モード】
LAN内のDNSがフォワーダに問い合わせ、それをフォワーダが解決できなかった場合、
そのDNSは次に自分のゾーンデータベースを使ってクエリの解決を試みる。

【排他モード】
フォワーダが解決できなかった場合、LAN内のDNSはそれ以上解決は試みず、
クエリの失敗をクライアントに伝える。

■ActiveDirectory 統合サーバー
・各DNSがそれぞれプライマリDNSの働きをする
 つまり、どれでもゾーン編集が可能である。

・ゾーン転送ではなく、ADのマルチマスタ複製を行う

・ゾーン更新を暗号化できる

このアーカイブについて

このページには、2006年4月に書かれたブログ記事が新しい順に公開されています。

次のアーカイブは2006年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1