負け組アーキテクトの憂鬱

メモしておきたいことや読書の記録を淡々と書く。

2006年06月

Solaris 10 6/06キタ

Solaris 10 6/06がダウンロードできるようになったらしい。

なんと言ってもSolaris ZFSが目玉。128bitアドレッシングで今までとは比べものにならないくらいの広範囲を扱えるほか、管理が楽ちんになったり、信頼性がめちゃめちゃ良くなったらしい。早速試してみよっと。

あとはネットワーク周りのパフォーマンスがどれだけ良くなったのか興味津々。まあ、見違える程速くなる、なんてのは期待してないんだけどね。

smpatchでSolaris10を最新の状態にする

Solaris10でも定期的に脆弱性やバグ情報、そのセキュリティフィックスが公開される。インターネットに接続されている環境であれば、WindowsならWindowsUpdate、FreeBSDなら最新のソースをcvsupなり何なりで拾ってきて再構築、Linuxならディストリビューション次第だけれどもyumとかで比較的お気楽に自動アップデートができる。

Solarisの場合はパッチという形でセキュリティフィックスが公開され、smpatchというコマンドで必要なパッチの分析、ダウンロード、適用ができる。運用する上で大前提となる、セキュリティアップデートの仕方をちょっとまとめてみた。

今回使った機材
Solaris10 1/06
SunFire V120

まずは準備。いきなりsmpatchコマンドを実行しても「このSolarisはまだ登録されてませんよ」と出て何もできない。登録と言っても、利用者が持っているSun Onlineのアカウントと紐付けるだけだ。Sun Onlineのアカウントは、Solaris10のインストール用isoイメージファイルをダウンロードする際に必要なので、ダウンロードで入手したひとは持っているはず。書籍などで入手した人は別途取得する必要がある(と思う)。取得はSunのwebサイトから。

あとは自分の取得したSun Onlineのアカウントを/tmp/registrationprofile.properties等のファイルに記述する。以下のような感じ。パーミッションはrootのみ読めるようにする。

 userName=hogehoge
 password=oreore
 hostName=
 subscriptionKey=
 portalEnabled=false
 proxyHostName=
 proxyPort=
 proxyUserName=
 proxyPassword=

subscriptionKeyは有償サポートを受けると貰えるらしい。これがあるとSolaris10の機能拡張もオンラインでできるようになるようだ(3/05→1/06とか?)。無くてもセキュリティアップデートは提供される。この状態で登録用のコマンドを実行する。

 # sconadm register -a -r /tmp/registrationprofile.properties

コマンドが成功するとsmpatchが実行可能な状態になる。とりあえず、必要なパッチを調査するには、

 # smpatch analyze

アップデートを適用するには、

 # smpatch update

これでとりあえず最新の状態にはできる。ただし、パッチによっては再起動が必要なものがある(パッチ 適用時にその旨の警告が表示される)。この場合はrebootコマンドではなく、必ずshutdownコマンドで再起動をすること(/etc/rc0.d/K51installupdatesに処理が遷移されないと適用できないっぽい)。特に初回の適用など、それなりに時間がかかるものもあるので、端末にshutdown nowと出てから数分間シャットダウンしないからといってビックリしてはいけない。あとはman smpatchで。

再起動後にもう一度smpatch analyzeを実行し、必要なパッチが表示されなければ完了。全て適用済。

設定を見るとproxyサーバも指定出来そうだけど、なんか通信はsslで行われているようなので、proxyでキャッシュして複数台適用時にウハウハとかは望み薄かもしれない。要検証。

mt-sukeroku-plus.plで書いたエントリのフィード不具合

実に便利なmt-sukeroku-plus.plプラグインだが、一つだけ問題があった。rssやatomのフィード中で、descriptionやcontentがhtmlに変換される前の状態で記述されている。RSSリーダなどで見るとWiki独特の書式のまま表示されてしまう。

これを修正するには、index.xml, atom.xmlのテンプレート中で、

<$MTEntryBody encode_xml="1" convert_breaks="0"$>

<$MTEntryMore encode_xml="1" convert_breaks="0"$>

となっている部分を、それぞれ、

<$MTEntryBody encode_xml="1"$>

<$MTEntryMore encode_xml="1"$>

と変更すれば良い。

プロセスで大量のメモリ容量を確保したい

プロセスの最大データサイズなどを拡大してあげたい場合はシェルでこの制限を緩和させることができる。たとえばcsh系のシェルならばlimitコマンドを使う。

limit datasize unlimited
limit stacksize unlimited

こんな記述を.cshrcにしておけば安心。

ただし、FreeBSDの場合はこのままではunlimitedにはならない。上記指定をした後、limit -hで確認すると、

cputime         unlimited
filesize        unlimited
datasize        524288 kbytes
stacksize       65536 kbytes
coredumpsize    unlimited
memoryuse       unlimited
vmemoryuse      unlimited
descriptors     14745
memorylocked    unlimited
maxproc         5547
sbsize  unlimited

unlimitedではなく、具体的な値が指定されているのがわかる。

この値はカーネルで指定されている上限値で、これの値以上のメモリをプロセスに割り当て可能にするには、これらの値を変更した上でカーネルを再構築し、再起動する必要がある(もちろん、割り当ての制限を少なくしたい場合も)。

options         MAXDSIZ="(1024*1024*1024)"
options         MAXSSIZ="(1024*1024*1024)"
options         DFLDSIZ="(1024*1024*1024)"

4.5R以降では以下の変数を/boot/loader.confで指定することもできるようだ。

kern.maxdsiz
kern.dfldsiz
kern.maxssiz
4.5Rリリースノートより

The kernel configuration parameters MAXTSIZ, DFLDSIZ, MAXDSIZ, DFLSSIZ, MAXSSIZ, and SGROWSIZ are all loader tunables (kern.maxtsiz, kern.maxdfldsiz, etc.).

主なhttpクロウラーのIPアドレスレンジを調査

※2009/09追記: 内容が古いです。

過去、約2年分のアクセスから統計をとってみた。

「GoogleBotを名乗るけれども実は違うもの」の考慮はせず、単純にgrepしてsort,uniqしてみた。

それぞれのアドレスが含まれるwhoisのエントリはこちら(IPアドレスレンジ以外は抜粋)

 Google Inc. EC12-1-GOOGLE (NET-64-68-80-0-1)
                                  64.68.80.0 - 64.68.87.255

 OrgName:    Google Inc.
 NetRange:   66.249.64.0 - 66.249.95.255
 CIDR:       66.249.64.0/19
 NetName:    GOOGLE
 NetHandle:  NET-66-249-64-0-1
 RegDate:    2004-03-05
 Updated:    2004-11-10

 inetnum:      202.160.176.0 - 202.160.191.255
 netname:      YAHOO-ALIBABA-1
 descr:        Yahoo Inc, Internet Content Provider
 route:        202.160.176.0/20

※INKTOMIは米Yahoo!に買収された検索エンジン提供企業
 OrgName:    Inktomi Corporation
 NetRange:   66.196.64.0 - 66.196.127.255
 CIDR:       66.196.64.0/18
 NetName:    INKTOMI-BLK-3
 NetHandle:  NET-66-196-64-0-1
 RegDate:    2001-10-30
 Updated:    2005-08-26

 OrgName:    Inktomi Corporation
 NetRange:   68.142.192.0 - 68.142.255.255
 CIDR:       68.142.192.0/18
 NetName:    INKTOMI-BLK-4
 NetHandle:  NET-68-142-192-0-1
 RegDate:    2004-03-24
 Updated:    2005-08-26

 OrgName:    Inktomi Corporation
 NetRange:   72.30.0.0 - 72.30.255.255
 CIDR:       72.30.0.0/16
 NetName:    INKTOMI-BLK-5
 NetHandle:  NET-72-30-0-0-1
 RegDate:    2005-01-28
 Updated:    2005-10-19

 OrgName:    Microsoft Corp
 NetRange:   207.46.0.0 - 207.46.255.255
 CIDR:       207.46.0.0/16
 NetName:    MICROSOFT-GLOBAL-NET
 NetHandle:  NET-207-46-0-0-1
 RegDate:    1997-03-31
 Updated:    2004-12-09

 OrgName:    MS Hotmail
 NetRange:   64.4.0.0 - 64.4.63.255
 CIDR:       64.4.0.0/18
 NetName:    HOTMAIL
 NetHandle:  NET-64-4-0-0-1
 RegDate:    1999-11-24
 Updated:    2006-01-23

 OrgName:    MS Hotmail
 NetRange:   64.4.0.0 - 64.4.63.255
 CIDR:       64.4.0.0/18
 NetName:    HOTMAIL
 NetHandle:  NET-64-4-0-0-1
 RegDate:    1999-11-24
 Updated:    2006-01-23

このレンジに含まれるアドレスは全てクロウラーだという保証はなく、またこれ以外にもクロウラーに割り当てられたIPアドレスがある可能性がある(当然、将来増える可能性もある)。

FreeBSD-SA-06:17

http://security.freebsd.org/advisories/FreeBSD-SA-06:17.sendmail.asc

FreeBSDに限った話ではないけどsendmailの脆弱性。8.13.7以外の8.13.6以前のバージョン全てで影響がある。細工を施したメールをキューに置くことでDoSされる可能性がある、というもの。

FreeBSD用にはパッチがある。8.13.7に上げずとも、とりあえずの対処法もあるようだ。sendmailのアドバイザリを参照。コアダンプを抑制するか、ForkEachJobオプションを有効にするといいらしい。当たり前だけど、それらを設定することでの挙動変化(プロセス数が増えるとか、そもそもコアダンプ取れなくなるとか)には要注意。

VirtualHostに関するちょっとした覚え書き

VirtualHostでname-basedとIP-basedを混在させる

IPv4アドレスは節約したいけど、IPv6アドレスは潤沢に使える場合などのちょっとしたメモ。httpd.confはこんな感じになる。

 Listen 123.45.67.89:80
 Listen [2001:3e0:4eb:9999:8000]:80
 Listen [2001:3e0:4eb:9999:8001]:80
 
 NameVirtualHost 123.45.67.89:80
 
 <VirtualHost 123.45.67.89:80 [2001:3e0:4eb:9999:8000]:80>
    DocumentRoot "/home/web/example.jp/htdocs"
    ServerName www.example.jp
 </VirtualHost>
 
 <VirtualHost 123.45.67.89:80 [2001:3e0:4eb:9999:8001]:80>
    DocumentRoot "/home/web/example.com/htdocs"
    ServerName www.example.com
 </VirtualHost>

DNSはこんなかんじで。

 www.example.jp.	IN	A	123.45.67.89
 www.example.jp.	IN	AAAA	2001:3e0:4eb:9999:8000
 www.example.com.	IN	A	123.45.67.89
 www.example.com.	IN	AAAA	2001:3e0:4eb:9999:8001

IPv4アドレス(一つしか割り振らないアドレス)NameVirtualHostを指定するのがポイント。あとは一纏めにしたいIPアドレスをVirtualHost指示子にスペースで区切って記述。別にIPv6じゃなくても、IPv4グローバルアドレスは一個しかないけど、プライベートアドレスはたくさんある、なんて状況でもおいしくいただけます。

ホストエントリにワイルドカードを指定

たとえばexample.jpドメインで全て同じVirtualHostに対応させたい場合。www.example.jpでもweb.example.jpでもexample.jpでもwwwwwwwwwwwwwwwwwwwwwww.example.jpでも・・・・

DNSはこう

 example.jp.	IN	A	123.45.67.89
 *.example.jp.	IN	A	123.45.67.89

httpd.confは、

 Listen 123.45.67.89:80
 <VirtualHost 123.45.67.89:80>
    DocumentRoot "/home/web/example.jp/htdocs"
    ServerName example.jp
    ServerAlias *.example.jp
 </VirtualHost>

ServerNameはもちろん、ServerAliasもname-basedの時にHost:リクエストヘッダとマッチさせて、どのVirtualHostに遷移するかを指定できる。文字通りエイリアス。ここでワイルドカードを指定してやり、example.jpドメインのどの名前が来ても同じVirtualHostがマッチさせる。IPv6の場合は適宜アレンジしましょう。

覚え書きと言っても2つしか思いつかなかったけど、またなんか覚えたり思い出したりしたら書きます。

PukiWikiな書式で入力したい

なんかblockquoteも微妙だし、preの中にもbrが補完されてすごいことになるし、かといって全部タグ打ちするのもめんどくさいしで悩んでいたところ、ありましたよ、mt-sukeroku-plus.plというとてつもなく便利なプラグインが!!作者様、本当にありがとうございます。

と、それだけで終わるのもあんまりなので、ちょっとした補足だけでも。導入ガイドの例はMTのバージョンが古い(2.661)ため、3.2-ja-2とは表記が違う部分がある。例では「''テキストフォーマット''」となっている所は、3.2-ja-2では「''改行設定''」と文言が変わっているので注意(ええ、見つけられませんでしたとも)。