2008年7月31日木曜日

dnssec-keygenコマンドが終わらない

メモエントリ
 
bind9のユーティリティdnssec-keygenで鍵を生成する際に、待てど暮らせど完了しないことがある。
 
どうもデフォルトでは乱数の生成に "/dev/random" を使う、randomの出力はセキュアだけど色々な要素がないと十分な長さの文字列を作るのに時間が掛かる模様。
 
dnssec-keygenが止まっている裏でlsofしてみる
# lsof | grep dnssec
(出力一部省略)
dnssec-ke 32108 root 3r CHR 1,8 1125 /dev/random

 
確かにrandomやってますね、こんなときrandomは何をかえしているの?
試しに手で叩いてみる。
# cat /dev/random
(省略)
'Ggd0**__
(4文字くらい出力されて、放っておくと数秒おきに数文字徐々に増える)

Σ(-_-)しょぼっ! これが1024字になるまで鍵が完成しないのではコマンドが終わる訳ない。
 
dnssec-keygenは "-r" オプション で乱数の生成デバイスを指定できるので(-r <randomdev>)
"-r /dev/urandom" を指定すればあっという間に鍵ファイルができる。
 
 
randomとurandomの違いはMan参照、urandomでも困りはしないでしょう。
/dev/randomのManpage
 
 
ちなみにWindowsバイナリ版bindについてくる dnssec-keygen.exe は特に待ったりしないです。
 
 
こちらの情報を参考にさせて頂きました。

2008年7月28日月曜日

L2スイッチ、スイッチングハブのメモ

サーバの事ばっかりなので、たまにはネットワークも。
記事自体はお客さんからの問い合わせがベースになってたりします。
 
 

自分宛でないIPパケットがくることもある


スイッチングハブというとMACアドレス学習して不要なポートにはパケットを流さない。
なのですが、学習はどのタイミングなのか。
※ブロードキャストやマルチキャストは置いといて。
 
スイッチングハブは通信があった際、
送信元MACアドレスをMACアドレス学習テーブル(FDB)に学習します。
で、FDB内に宛先のMACアドレスがあればそれを使いますが、
宛先は学習しない、というかできない。
 
未学習、またはFDB有効期限切れのMACアドレス宛通信はどうするかというと、
やっぱり全部のポートから発信(フラッディング)するしかなく、レスポンスがあったらその送信元を学習し、以降はそのポートにのみパケットを流す。
このとき無関係な端末にも自分宛でないIPパケットが届く、プロミスキャスモードでパケットを拾えば確認できる。
L2の話なのでIPヘッダのIPアドレスなどは直接関係ないですが、フレームを拾ってみた結果、自分が全く関係ないIPアドレス同士の通信の断片だったりします。
 
多くのスイッチのカタログには学習テーブルのエージングタイムが載ってます、結構短めで、300秒とかそんなもん。
例えばPCのMACテーブルに残っている(ARP不要)けど、L2のFDBにMACアドレスの記録がない場合はフラッディングが起こるはず。
WindowsのARPキャッシュは確か10分でした、それを考えるとそこそこ起こる現象のような気がします。
 
 
ただ、見出しにあるような「自IPアドレス宛でない通信」は基本的に稀なので、どうも沢山来ているという場合はそれなりの原因があると思うので調べたほうがよさそうです。
下記に調べ方やフラッディングが起こりまくる例の構成が載っています。
参考:Ciscoサイトののフラッディングに関する記事
http://www.cisco.com/JP/support/public/ht/tac/102/1020418/143-j.shtml

 
 

CSMA/CDでの転送制御はしていない


MACアドレス学習して、ストア&フォワードするため、コリジョンドメインはポート単位で分割されている。
 
イーサネットの勉強をするとまず出てくるCSMA/CD方式、スイッチングハブのカタログにもよく書いてありますが、リピータハブの機能であって実際コリジョン起こらないはず。
 
無線LANのCSMA/CA方式は当分使われるのも仕方なかろうけど、CSMA/CD方式は今や使ってなさそうなのにカタログではよく書いてある、実装しているということでしょうか。
そうなると逆にコリジョンの検出技術をどうあつかっているのか少し不思議。

SQLServer、T-SQLでYYYYMMDD

YYYYMMDD(hhmm)。シリーズ。
ログファイルを出力するなら「これ+プリフィックス」をファイル名にするのが理想ではないでしょうか。
のTransact SQL(T-SQL)編。
 
T-SQLでなぜ?という気もするでしょうが、実際使ったことがあるのでメモ投稿。
私はログ用のテーブルを自動でローテーションするジョブを作るときに使いました、YYYYMMDDのテーブル名をつけて過去ログを放り込む。
なお、これを使用しているのはSQLServer2000なので、SQLServer2005以降では試してません。
 
 
ではサンプルコード。


[sourcecode language='sql']
DECLARE @strDate varchar(128)

SET @strDate =
REPLACE(
CONVERT(varchar(10),getdate(),120)
, '-', '') +
REPLACE(
CONVERT(varchar(5),getdate(),108)
, ':', '')

PRINT @strDate
[/sourcecode]

 
クエリアナライザなどで実行すると、結果は下記。
200807271124

 
 
以降解説

Windows、VBScriptでYYYYMMDD

YYYYMMDD(hhmm)。シリーズ。
ログファイルを出力するなら「これ+プリフィックス」をファイル名にするのが理想ではないでしょうか。
のVBScript、WSH編。
 
サンプルの下記テキストを.VBSで保存して実行します。


[sourcecode language='vb']
'/// 年月日 作成
tmpYYYYMMDD = year(now()) & Right(00 & month(now()), 2) & Right(00 & day(now()), 2)

'/// 時分 作成
tmpHHMM = Right(00 & hour(now()), 2) & Right(00 & minute(now()), 2)

'/// 合成
strDate = tmpYYYYMMDD & tmpHHMM
Wscript.echo strDate
[/sourcecode]

 
もともと便利な関数はありますが、少し表示の癖を吸収する必要が。実行結果は下記。
[caption id="attachment_447" align="alignnone" width="167" caption="画像:スクリプトの実行結果"]画像:スクリプトの実行結果[/caption]
 
 
以降解説へ。

2008年7月27日日曜日

InterNetWatch:「フォルダ」が「フォルダー」に、マイクロソフトが長音表記 を変更

ニュースサイト引っ張るだけの手抜き投稿ですが、InternetWatchのフィード(iGoogleのコンテンツ)で気になる記事が。
 

「フォルダ」が「フォルダー」に、マイクロソフトが長音表記を変更


 
これは影響でかくないですか?
下記のリンクから変更点と変更しない点がエクセルファイルの一覧形式でダウンロード・確認できます。
 


マイクロソフト日本語スタイルガイド
http://www.microsoft.com/language/ja/jp/download.mspx


 
「コンピュータ」 → 「コンピューター」 とか、個人的には間延びした印象。慣れるまで時間かかりそう…
 
関連:マイクロソフトのプレスリリース

2008年7月26日土曜日

WindowsServer、Forfilesコマンドで古いログを自動で削除

ログをとるのは運用管理の基本ですが、とったログをいつまでも残しておくといつしか記憶域を圧迫します。
WindowsServerで一定期間保存したログを自動で消そうと思ったらVBSでちょっとしたスクリプトを書く必要が?
 
いや、単純な処理ならWindowsServer2003から標準※で使用できるForfilesコマンド(マイクロソフトTechNetへリンク)で十分可能です。
Linuxでいうfindコマンドと似たような処理ができるからです。
 
※XP以前でもリソースキットに入っているようです。
 
こんな感じで使います。
 
"E:\logs"フォルダ内の拡張子が".log"のファイルで更新日が10日以上前のものを削除、フォルダは無視
> forfiles /P "E:\logs" /M *.log /C "cmd /c if @isdir==FALSE del /s @path" /D -10

 
見たい人は説明をどうぞ

2008年7月25日金曜日

RFCのあるき方

インターネットの技術標準文書としていわずと知れたRequest for Comments(RFC)参考リンク:Wikipedia
HTTPやSMTPをはじめ、インターネットで利用されるプロトコルの仕様を確認したいときなど使います。
 
基本的には実際に使用されているもの中心のスタンダードトラック(STD)文書を見ればよいのですが、ネットで軽く検索するくらいでは情報が多いし最新かよく分からないし大変ですよねー
…と思っていたら、公式がまず情報まとめ用の文書を作っていることを結構最近になって知りました。
 
STD文書の1番はSTD全体の目次になっており、常に最新のRFCを発行(今はRFC5000)して差し替えられているため、とりあえず見ておけばよいというものになっています。
 
最新の情報を確認したらあとはゆっくり日本語訳さがすか、なければ頑張って原文読むか。
とりあえずSTD1.
 

RFC公開サイト:RFC-Editor Web Pages
STD1番直接リンク

2008年7月24日木曜日

Windows、PowerShellでYYYYMMDD

YYYYMMDD(hhmm)。シリーズ。
ログファイルを出力するなら「これ+プリフィックス」をファイル名にするのが理想ではないでしょうか。
のPowerShell編。
 
PowerShellのプロンプトで、"Get-Date"コマンドを試してみます。
PS > Get-Date -format yyyyMMddHHmm
200807232230
終わってしまいましたね。
 
PS1(PowerShellのスクリプトファイル)で組み立ててみます、とりあえず下記を"yyyymmdd.ps1"で保存。$yyyymmdd = Get-Date -Format yyyyMMddHHmm
Write-Output $yyyymmdd
PS > .\yyyymmdd.ps1
200807232230
やっぱりこれで終わり、楽ですね。
特に解説する必要もなさそうです、まあLinuxでやると元々こんなもんですし。
 
 
"Get-Date"のヘルプを見ると、これでもかと言うくらい色々な形式を指定できます。
.NETフレームワークのライブラリ拝借、UNIX形式の組み込みと、後発なのをいいことにやりたい放題ですが、ちょっと不満が…
それはまた別の話で。2.0で解消されるかもしれないし。

WindowsバッチファイルでYYYYMMDD

YYYYMMDD(hhmm)。
バッチファイル内でログファイルを出力するなら「これ+プリフィックス」をファイル名にするのが理想ではないでしょうか。
 
ちょっとバッチファイルで組み立てましょう、下記をテキストファイルに入力して拡張子をbatにします。
@echo off
set tmpDate10=%date:~-10%
set YYYYMMDD=%tmpDate10:/=%
echo %YYYYMMDD%

set tmpTime5=%time:~0,5%
set tmpTime4=%tmpTime5::=%
set HHMM=%tmpTime4: =0%
echo %HHMM%

echo %YYYYMMDD%%HHMM%
pause

 
変数"YYYYMMDD"は年月日、"HHMM"を時分として組み立てています。
実行すると下記、
20080723
2230
200807232230
続行するには何かキーを押してください . . .

この変数を使ってファイル名なり何なりを定義してしまえばいいのですが、
何でこんなにややこしくなってしまうのでしょうか。
一応続きで解説しておきます。

Windowsのバッチファイル、.bat, .cmd どっちを使うか

WindowsServerの運用管理においてバッチファイルは欠かせません。
集計、バックアップ、ファイルの転送やメール送信など手動でやるととても大変です。
 
さてバッチファイル、拡張子が".cmd"でも".bat"でもそれぞれ全く同じ動作をします。
それぞれ「Windows NT コマンド スクリプト」「MS-DOS バッチ ファイル」と定義されており、どう使い分ければよいのか。
結論から言うと…どっちでもよいようです。
 


[caption id="attachment_273" align="alignnone" width="150" caption="図:cmdファイルのプロパティ
クリックで拡大"]図:cmdファイルのプロパティ[/caption]

[caption id="attachment_276" align="alignnone" width="150" caption="図:batファイルのプロパティ
クリックで拡大"]図:batファイルのプロパティ[/caption]



 
cmdはWindowsNTで使い始めたらしいので昔は用途を分けるつもりでもあったのでしょうか、
しかし今日では全く区別されてないようです。
私は折角なので、バッチファイル群を自分が分かりやすくする為に使い分けています。

2008年7月23日水曜日

OpenSSLでお手軽に自己証明書(2)_opensslコマンド

前回の記事の中で少しだけ言及した、opensslコマンドで自己証明書のキーペアを作成する方法。
ちなみにSSLv3/TLS対応で、IISで使える形式も作れます。
 
事前にキーペアを作成する手順を簡単にまとめておきます、結構この流れは社内でも新人さんとかよく迷うので。
そう複雑ではないのですけどね。

  1. サーバの秘密鍵を作成する

  2. 秘密鍵を基にして証明書要求(CSR)を発行する

  3. CSRにサーバ秘密鍵を使いまわして署名、証明書作成

  4. サーバ秘密鍵+証明書でキーペア完成、CSRはもういらない

要は同じ公開鍵が作れる秘密鍵と証明書の2つがあればSSL通信を設定することができる、というわけですね。
有料の証明書サービスを使う場合は、手順2で作ったCSRを業者さんに渡して、証明書を作ってもらえばOK。

では手順のほうへ。

2008年7月20日日曜日

SSL用秘密鍵と証明書がペアかどうか確かめる

SSL通信に使用する、秘密鍵と証明書のセット。
これらはペアで使用しないといけませんが、たまにどれとどれがペアだったか自信がなくなったり、
証明書が複数あってどれが最新(期限切れでない)か迷う時があります。
 
きっちり管理しろよと言われればそうなんですが、OpenSSLのコマンドでそれらを確実に調べるときのメモ。
 

2008年7月19日土曜日

OpenSSLでお手軽に自己証明書(1)_make一発

SSLでの通信に使う秘密鍵とサーバ証明書のセット、
自己署名でよければ近頃のOpenSSLでは非常に楽に作れます。
 
最近私が証明書セットを使っただけでも数々のアプリケーションが…

  • apache(httpd)でHTTPからHTTPS

  • postfixでSMTPからSMTPS

  • dovecotでPOP3からPOP3S、IMAPからIMAPS

  • OpenLDAPでLDAPからLDAPS

  • stunnelで色々SSL化


 
ぱっと思い出すだけでも色々と出てくる、ということで今のところ最短の手順を残しておきます。
 

2008年7月17日木曜日

CentOSでyumのリポジトリを国内指定したりほか

CentOSに限った話ではなくyumユーティリティを使用する際は、
設定を調整してお気に入りのリポジトリを使うようにしてたのですが、
CentOSでは公式よりミラーサイト一覧を国別で取得できると知ってからその設定をするようになりました。
 

元々CentOSのミラー取得スクリプトはリクエスト元のIPを判断して
近場のミラーリストをくれるという話だったので、それも含めてちょっと実験。
 

2008年7月15日火曜日

情報処理技術者の平成20年度秋期試験が受付開始

申込みを忘れないように記事にしておく。
 

IPAの情報処理試験が受付開始してます。
http://www.jitec.ipa.go.jp/
 

試験日は10/19(日)、
今回はテクニカルエンジニア(ネットワーク)、来年度から名称変わるけど私はどっちでもいいや。
 



追記:申込み完了

Windows、Linuxで帯域制限をする

帯域を制限したいという相談を立て続けにもらいまいした。
 
思惑はそれぞれでしたが、プラットフォームが違う環境での話だったので少々困って、
OS別にちょっと調べて見た結果を備忘録代わりに。