カテゴリー

アクセスカウンター


since 1996/06/14

Count per Day

  • 6今日の訪問者数:
  • 40昨日の訪問者数:
  • 768月別訪問者数:
  • 0現在オンライン中の人数:

apacheのVerUp

 ソースからコンパイルしてインストールする際に以外と困るのが、前回のコンパイルオプションを忘れてしまう事だったりします。 apache2.2系なら、前回コンパイルしたディレクトリの以下のファイルあたりに残ってます。 config.log config.nice まぁ参考まで…

postfixでメールサーバ

 ここのページはpostfixについて詳しく書こうと思ったけど、面倒になって来たので、他のネタは他のブログを見てください。

postfixとは Amazon:4756140513

 ここはpostfixというMTAの設定の備忘録です。MTAとはつまりメールサーバで、インターネット上でメールの受送信の役割を担います(この辺の詳しい説明は省略)。

紹介している本は私が参考にした本です(既にVerが古いかも・・・汗)。 なぜpostfixか

 メールサーバの代名詞から、セキュリティ問題の代名詞のような扱いにされて早数年のsendmailですが、それだけではなく設定の困難さから、今の世の中でも敬遠されている存在には代わりありません。  過去にqmailの調査と利用もしましたが、qmailは最新バージョン(1.03)が出てからかれこれ8年経過しており、ユーザグループのサポートで何とか生きながらえていると言う状態になっています。「シンプル且つ安全」と言われたqmailですが、既に1.03から追加機能とセキュリティ問題でパッチだらけになってしまい、もやは素人の手出しができない代物になりつつあります。

 そんな中で注目されているメールサーバの一つとして、postfixがあります。性能・設定の容易さなどが特徴でしょう。注目されていること=セキュリティの問題も発見されやすいというのもありますが、公式サイトを見てもわかるとおり、頻繁にバージョンアップされていることから、信頼できるものに見えます。

ソースコードとrpm

 このサイトは、以前からソースコートからコンパイルしでデーモンの構築を推奨してきました。これは、なるべく最新版を入手し運用すべきと考えたからです。 しかし、昨今はバイナリコードによる提供も良くなってきましたので、ここではソースコードからのコンパイルは解説しません(私ももう実際にコンパイルしてないし)。  FedoraCoreであれば(っていうかそれ以外は知らない)、「yum update postfix」などのコマンドで気軽にアップデートできるので、管理上それでよいと思います。

 そんな訳で、ここではFedoraCore5のバイナリベースで解説しています。それ以外の方はパスなどを読み替えてください。

postfixとDNS

 postfixに関わらず、インターネット上で稼働するメールサーバは通常DNSを参照しています。何を参照しているかというと、相手先ドメインのメールサーバがどこにあるかというのを参照しています。  たとえば、yahoo.co.jpドメインであれば、以下のコマンドで調べられます。

# dig yahoo.co.jp mx | grep MX | grep -v '^;' yahoo.co.jp.            384     IN      MX      10 mx2.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx3.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx4.mail.yahoo.co.jp. yahoo.co.jp.            […]

qmailでメールサーバ

はじめに Amazon:4756140017  ここでは、qmailを利用したメールサーバの構築方法を解説します。主な内容はqmailによるSMTPサーバの構築と、各種ツールの使い方、popサーバの構築方法です。  qmailはsendmailに比べるとシンプルだと言われますが、動くようになるまでは結構大変です(それこそsendmailとあまり変わりません)。  ちなみに私は「qmail メールサーバの構築」という本で勉強しました。qmailの公式サイトも見づらいので意外と役立つ情報が多いです。 このコンテンツでのソフトのバージョン  特に表記が無ければ、以下のバージョンに関して解説します。新しいバージョンが出てても設定方法はさほど変わらないと思いますので、なるべく最新のものを利用するように心がけてください。 ※一部、インストール中にソースファイルの内容を書き換えているところがありますが、それはバージョンに依存するかも。 qmail:qmail-1.03.tar.gz checkpassword:checkpassword-0.90.tar.gz ucspi-tcp:ucspi-tcp-0.88.tar.gz daemontools:daemontools-0.76.tar.gz relay-ctrl:relay-ctrl-3.1.1.tar.gz qpopper:qpopper4.0.4.tar.gz RedHat9でのエラーについて(2004/02/08)  RedHat9でqmailを構築する際に、コンパイル中に以下のようなエラーが出ます。 : undefined reference to `errno’ collect2: ld はステータス 1 で終了しました make: *** auto-str エラー 1 ※qmail、checkpassword、ucspi-tcp、qmail-vida、daemontoolsでエラーが出ることを確認しましたが、基本的にdjb製のソフトは同様のエラーが発生するそうです。  これを解決するにはソースコードの修正が必要ですが、ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/にパッチがありますので、それを適用することにより解決することも可能です。 ※以下の操作はすべてそれぞれのコンパイル前のソースが存在していることが前提です。 ※qmailの場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/qmail-1.03.errno.patch $ patch < qmail-1.03.errno.patch ※checkpasswordの場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/checkpassword-0.90.errno.patch $ patch < checkpassword-0.90.errno.patch ※ucspi-tcp場合 $ wget ftp://moni.csi.hu/pub/qmail/glibc-2.3.1/ucspi-tcp-0.88.errno.patch […]

apache2.0系

Apacheの概要

 Apacheとはwwwサーバソフトウエアで、主にWebサイトを閲覧する為の機能が実装されています。同じようなwwwサーバで有名なものにMicrosoftのIIS(Internet Infomation Server)がありますが(有名な理由は機能よりも、、、以下略)、それらの前身はスイスの欧州粒子物理学研究所(CERN)や、アメリカのNCSAのWebサーバが有名です。5年くらい前にCGIをいじってた人なら、この辺のことを知ってるかと思いますが、今となってはもはや昔のこととなってしまいました。  ApacheはアメリカのNCSAベースのWebサーバにパッチをあてたことから始まり、一説によると名前の由来も「a pach」をもじってるそうです。  歴史はともかくとして、今や世界No1のシェアであり、ほとんどのOSを網羅している上にタダで利用出来るところがなんとも喜ばしいソフトウエアです。 NetCraftによるシェア情報

前置き

 ここでの解説は特に明記されていない限り、apache2.0.43(httpd-2.0.43.tar.gz)を使用しています。バージョンの違いによる差異はほとんど無いアプリケーションですが、頻繁にバージョンアップ(主にセキュリティ関連)されていますので、なるべく最新のものを使用してください。

インストール

 ここでは基本的なインストール方法を解説します。apacheはさまざまなモジュールを使えます。各モジュールの説明は後半の章で解説しますが、コンパイルの時点で記述しなければならない設定もあります。コンパイルの時点で書く内容は可能な限りここの章で解説しますが、他の機能を入れたい場合に再コンパイルが必要になる場合があることに注意してください。

ダウンロード&インストール

 デフォルトインストール方法です。  まずはapacheをダウンロードします。apacheはApache Software Foundation(ASF:http://www.apache.org/)からダウンロードできます。現在はapache1.3.xx系とapache2.0.xx系をダウンロードできます。ここでは、apache2.0を落とします。 例)$ wget http://www.apache.org/dist/httpd/httpd-2.0.43.tar.gz  ダウンロードが終わったら展開します。

$ tar zxvf httpd-2.0.43.tar.gz $ cd httpd-2.0.43.tar.gz

 次に環境設定→コンパイル→インストールをします。大分大きいので時間がかかります。なお、インストール先は「/usr/local/apache2」なので、既にapache1.3系を運用していても上書きはされません(ポート番号が重複しなければ同時起動も可能です)。 ※実際は「./configure」でモジュール等の追加が必要になる場合があります。詳細は次の項で説明します。

$ ./configure $ make $ su # make install

 これでインストールは完了です。

モジュールとDSO

[…]

OBS構築記録

注意 このページはもう更新していませんが、いろいろ役立ちそうなので残しておきます。 ※当時のOBSはかなりCPUパワーが無かったので苦労していますが、最近のは普通のサーバとたいして違わないようです。

OpenBlockSとは?

OpenBlockSはぷらっとホームが発売しているサーバです。サーバに必要な機能以外を可能な限り省き、小型化されたサーバです。ネットワークポートx2個、RS-232Cインターフェース、コンパクトフラッシュのインターフェース、IDEのインターフェース(ノート用の小さいコネクタ)のみの入出力機器を備えています。 ※現在は複数の機種がある 購入するには直接行くか、通販しかありません(OEMで似たようなものはあるみたいだけど)。 ディスプレイは?キーボードは?と疑問に持つかもしれませんが、すべてネットワーク経由でリモート操作することを前提としているため、そんなものありません。 OSはLinux(Linuxがわからない人はココを読んでもつまんないと思うのであえて書きませんが、まぁパーソナルUNIXです)が搭載されています。 ネットワークの設定を間違えると二度と接続不能になり、使えなくなるのか?というとそうではなく、OSはフラッシュROM(プレステのメモリのようなもの)に記録されてて、起動するたびにRAMに展開されます。RAMは電源を切るたびに消去されるので、再起動するたびに元の設定に戻るという仕組みです。当然、変更した設定はフラッシュROMに書き込むこともできますが、これの容量は小さいので、複雑なことはできません。

OpenBlockSの可能性

OpenBlockSで何ができるか?というところですが、主に以下の目的で使うのが良いんじゃないかな?と思います。

ルータ/Firewallとして Linuxの勉強用。 簡易公開サーバ構築用。

ルータとしての用途ですが、はっきり言ってこれにはお勧めしません。OpenBlockS自体は約4万円しますが、一般のブロードバンドルータなどは1万円〜2万円程度で買えます。Firewallとしては意味があるかもしれません。細かいアクセス制御や、アクセスのロギングなどに使えます。ただ、こういう使い方はイマイチ面白くないかもしれません。勉強にはなりますが、、、。 Linuxの勉強用としては非常に有効だと思います。最近のLinuxディストリビューションはイロイロなものが入っていて、さらに自動設定が出来ますので勉強になりません。構築のときはいいですが、障害が出たときなどの問題が出ます。その反面、OpenBlockSは勉強になります。基本的に一般的なディストリビューションは使えません。ぷらっとホームのサイトに非常にシンプルなカーネルイメージがあるのでそれを入手する必要があります。さらに、サーバなどを構築するには、ソースを入手してコンパイルするか、有志によるrpmを使うしかありません。構築するのは非常に厳しいですが、構築が終わったころには一人前のLinux技術者としての第一歩を踏めるでしょう。 簡易公開サーバとしても有効です。特に消費電源量の少なさと、稼動部分が無いことによる静音性が魅力的です。 あえて、「簡易」と書いたのはやはりCPUパワーとメモリ不足の問題でどうしても重いです。イロイロなサービスを稼動させると、ちょっと実用が厳しくなります。 ※HDDを増設する場合、2.5inchなので、そこだけちょっとうるさいです。 いづれにしろ、自宅で公開サーバを構築するにはもってこいの筐体といえるでしょう。

HDD購入

上のOpenBlockSとは?に書きましたけど、これ単体ではたいしたことができません。増設記憶装置としてコンパクトフラッシュメモリ(この文を執筆時の相場で256MByte→2万円位かな)か、2.5インチHDDが接続できます。 HDDは専用オプションとして販売されてますが、当然それを無視して秋葉原でIBMの5GByteHDDを購入し接続しました。はっきり言って差すだけなので簡単です。 無視したらメーカ保証がなくなるだろう?と思いますが、HDDを接続してサーバ代わりに使用すること自体が保証外なので、眼中無しです。っていうか、こういう使い方しないとOpenBlockSの真価が発揮できないしね。 ちなみに容量的にはコンパクトフラッシュで十分なんですが、実は*あること*をしたいがために大容量にしています。何をしたいかはまた後ほど書くとして、、、。 HDDを増設時はかなり注意が必要です。触ると壊れそうな個所がかなりあるので、カスタマエンジニア(パソコンの修理屋)を経験した私でもちょっと怖かったくらいです。

OpenBlockSSの可能性

OpenBlockSの後継機として、OpenBlockSSが2001年11月に発表されました。 ※残念ながらデルタはOpenBlockSSを持っていません。発売前に今のサーバを作ってしまったもので、、、。 OpenBlockSSの大きなポイントはCPUのパワーアップ(50MHz→200MHz)と、メモリの増強(32MB→64MB)です。どのくらいのパフォーマンスが出るかの情報はまだ入手していませんが、非常に期待できるでしょう。

コラム

このコンテンツはOpenBlockSの構築記録ですが、ここにはそれと間接的に関係してきそうなネタを書きたいと思います。

OpenBlockSリンク集

はっきり言って、どこかの個人サイトを参考にしないと厳しい。というか、同じことを考える人は多いので、参考にさせていただいております。

公式サイト http://www.plathome.co.jp/support/labo/obs/ OpenBlockSのhddイメージ用パッケージwith公式サイトhttp://openlab.plathome.co.jp/OpenBlockS/packages.html Club535 http://www.club535.com/linux/mydoc/ob/ OpenBlockS Users room http://133.69.130.72/OBU/ セキュリティ1(バージョンの隠蔽)

デルタはブラックハットでもクラッカーでもないですが、一応セキュリティのお仕事をしているので、セキュリティ対策としてやっといたほうがいいなぁというのを記述しています。 バージョンの隠蔽というのは、所謂どういうサーバかよくわからない状態にすることにより、不正侵入される可能性を低くするという対策です。 バージョン情報はイロイロなところで出てきます。telnetのプロンプトの前や、Webサーバのエラーメッセージ/ヘッダー情報、SMTPに接続したときや、「HELP」コマンドを入力したときです。 バージョン情報の隠し方は特に書きませんが、ソースコードが読めるならチャレンジしてみましょう。 ※それにしても、OpenBlockSはコンパイルに時間がかかるので、いざ直そうと思っても気力が出ない(^^;;

Linuxコマンド集

まぁ、メモってことで。 http://linux.nikkeibp.co.jp/command/

viのコマンド

Linuxには必ずといってもいいほど「vi」というテキストエディタが入っています(というかソレしか使い方知りません)。以下に簡単な使い方を記します。

[…]

Linuxサーバ構築

ディストリビューション  ひとえにLinuxと言っても、狭義だとLinusさんが作ったOSのカーネルの部分を指すんですが、そんなことをここで書きたい訳じゃなくて、そのカーネルを利用して様々なディストリビュータ((ディストリビュータ:流通業者でいいのかな?))がOSパッケージとしての(広義の)Linuxを出してます。その数はかなりに上りますので、それぞれの特徴をよく理解して選ばないと痛い目にあいます。 -ディストリビューションとしては老舗のRedHat。 ※今は企業向けの有償のRedHatと、バージョンアップが激しいフリーのFedoraCoreに分かれます。 マニアックなDebian。 ディスクトップに強そうTurbo。 DBに強いMiracle。 1CD Linuxで最近有名なKNOPPIX。 日本語に強いと言われていたVine(最近はどうなんだろう?)。  多少文化の違いはあれど、なれればさほど違いは無いのですが、やはり自分の力が試されるLinuxなので、よく吟味して自分にあったパッケージを選んだ方がいいです。 rpmとソースのコンパイル  最近のLinux(RedHat系)サーバにソフトウエアをインストールするには、大きく2つの方法があります。一つはソースプログラム(要はコンパイルされていない生のプログラムコード)を入手してビルドする方法、もう一つはすぐに実行可能なバイナリ形式になってるプログラムを入手する方法で、RedHat系のバイナリは通常「rpm」というファイルに一まとめにされています。  私は通常ソースプログラムから設定しますが、ここでは両方の基本的な操作方法とメリットなどを解説します。 ※最近はパッケージを自動だダウンロード/インストールするup2dateや、yumなどもありますが、中身はrpmをダウンロードしてきて展開しているだけのようなものです。 依存関係  通常、多くのソフトに「依存関係」があります。依存関係とは1つのアプリケーションを導入するのに複数のパッケージが必要となることです。これはrpmでもソースでも同様です。  例として、パケット監視ソフトである「iplog」を導入する場合は、パケットキャプチャリングライブラリである「libpcap」が必要です。「libpcap」は「yacc」や「flex」が必要だったりします。  よほど一般的なものは通常のディストリビューションならもともと入ってます。  依存関係を解消するには、その親子関係を確認し、その順番に従って、インストールする必要があります。  上記の例の「iplog」は「libpcap」が必要で、「libpcap」には「flex」が必要、「flex」を入れるには「yacc」が必要、、、と言った依存関係なので、依存関係を解消するには「yacc」→「flex」→「libpcap」→「iplog」の順に入れるのが正解になります。 ※rpmの場合はいっぺんにしていするとうまくやってくれたりします。  まぁ、普通はインストール時に足りないものがあったらエラーになりますので、その時点で導入すれば問題無いでしょう。 rpmの概要と使い方   rpmは「RedHat Package Manager」の略でその名の通り、RedHat系Linuxで頻繁に使用されてるパッケージ管理ツールです。Windows系の人にわかり易く説明すると「アプリケーションの追加と削除」のようなものです。  Linuxでの運用を深く知りたいのであればソースからのインストールをおすすめします。 ソースからの方が各ファイルの所在や設定などの位置がわかりやすい。 その為、障害対応に強い。 そもそも、UNIX系のOSはソースからコンパイルすることによりマルチプラットホームへ対応できる。 rpm形式でリリースされてない物もある(特にOpenBlockSではかなり困る)。  と、こんな理由です。もちろんrpmにもメリットはあります。導入が楽だとか、企業系サーバだと管理工数の削減とかメーカサポートを受けやすくするとかがあります。 会社のサーバを建てるときは無理せず3年くらいのサポート付き有料パッケージを買って、マニュアルに従ってインストールした方がいいでしょう。  とりあえず、以下に簡単な操作方法を記しておきます。 原則としてインストール/アンインストールはroot権限で行うようです。 ※以下の「パッケージ名」とはrpmファイル名です。通常は「xxx.rpm」という拡張子が付いてます。インテル系のcpuで動くバイナリの場合は「xxx.i386.rpm」と書かれてる場合もあります。当然ながらOpenBlockSのようなインテル系のCPUではない物にインストールしても(インストールは成功しますが)、動きません。 インストール済みパッケージの確認  その1、全部表示(長いです) rpm -qa  その2、特定のパッケージの確認 rpm -qa パッケージ名  ※このパッケージ名はバージョン情報を省略可能。たとえば「rpm -qa libusb」で「libusb-0.1.5-3」と表示されます。「rpm -qa lib」だけではダメ。  その2、特定のパッケージの確認(あいまい検索) rpm -qa | grep […]

DNSの研究

DNSとは Amazon:4873110742

 ここは別に読まなくてもいいけど、DNSがさっぱりで読む暇がある人は読んでみてください。  ちゃんとDNSの仕組みを理解するのであれば、分厚いけどオライリーのDNS&BINDあたりを読んでおくべきだろう。

 DNS(Domain Name System)とは、書くまでも無いかも知れませんが、IPアドレスを人にやさしい名前に変換する仕組み、またはその反対のことをするシステムです。  たとえばこのサイトにアクセスするときにhttps://www.d77.jp/と入力しますが、インターネットの世界ではサーバにアクセスするのにIPアドレスが無いとダメです。この「www.d77.jp」の部分をIPアドレスに変換したり、その逆のことができる為のデータベースのようなものです。なんでこんな仕組みがあるかって、やっぱり数字の羅列よりかは楽だからでしょう。

 DNSの前身は今でも残っていますがhostsです。Linuxの場合は「/etc/hosts」で、Windows2000の場合は「x:\winnt\system32\driver\etc\hosts」にあります(何でdriverなの?とか思ったりしますが、、、)。  このhostsファイルに、

192.168.1.1 hogehoge

とか書いておけば、「ping hogehoge」と打つと、自動的に192.168.1.1にpingしてくれます。

 昔はhostsでも十分だったんですが、インターネットの規模が大きくなるにつれ、管理が大変になり、またサーバへの負荷もかなりヤバい状態になってきたので、それを解決する為に、DNSが作られました。

 DNSは分散データベースになってるので、負荷も分散されます。その気になれば、自分のドメインの中でも負荷を分散することが出来ます。

 また、ゾーン転送やDNSへの問い合わせの仕組みにより、私のサーバのDNSに情報を書き込むだけで、世界中のインターネットにつながったサーバから名前解決を行うことが出来ます。  

ツールの入手とインストール

 DNSサーバとしてよくbindというものが使われています。これはInternet Software Consortium (ISC) によって提供されており、無料で入手することが出来ます。このソフトはLinuxだけでなく、Windows用もあるので、非常に広い範囲で使用されています。

 bindにはいくつかのバージョンがあります。大きくbind4系、bind8系、bind9系のバージョンがあります。ここの文を書いた時はbind4やbind8がまだ主流でしたが、このところbind9も多くなってきました。

 今回はbind8を使います。bind4を使ってもいいですが、機能的に劣るのと、記述方法がbind8とbind9で似てるので、将来移行するのが楽だからです。

 bindはISCでダウンロードしてください。bindは結構凶悪なセキュリティホールが見つかることがあるので、バージョン管理に気をつけてください。bind8の最新版ならOKです。  ここを書いてるときは8.2.5が最新なので、それを入手し解凍します。ここで注意ですが、bindは自分のディレクトリを作らないでいきなり解凍します。他のファイルと混ざってわかりづらくなるときがあるので、ディレクトリを作ってから解凍しましょう。  

$ mkdir bind8 $ cp bind-8.2.5-src.tar.gz ./bind8 $ cd bind8 $ tar zxvf bind-8.2.5-src.tar.gz

んでコンパイル  

$ cd […]

ネットワークの基礎

概要  ここではTCP/IPネットワークへ接続する為の基本的な設定方法を解説します。RedHatLinux7.2ベースですが、それ以前のバージョンやTurboLinuxではほぼ同じ内容で大丈夫だと思います。 ※もしかしたらファイルの位置などは違うかもしれません。  なお、ハードウエアデバイスの設定に関しては省いています。 IPネットワークの基礎  ここではIP(インターネットプロトコル)ネットワークの基本的な部分を開設します。 プロトコルとOSIの7階層  プロトコルとはよく「通信規約」と訳されますが、いわゆる2点間の通信をお互いが理解しえるようにする為のルールだと思ってください。たとえば、米国人が米国語で喋って、日本人が日本語で返事するるという状況ではお互いのコミュニケーションが取れないため、お互いの言葉を統一することによりコミュニケーションが取れるようにするというルールのようなものです。  OSIの7階層というのは、そのネットワークプロトコルのガイドラインのようなものです。全ての通信ソフトに通信デバイスの制御や、パケットの組み立てなどをやらせてしまうと、プログラマーは大変です。ですので、デバイスドライバのようなものを介在させることにより、アプリケーションの開発を楽にさせたりと言うのが重要です。ネットワークカードが何をするか、ドライバが何をするかというのを決めなければならないですが、そういう仲介役同士をどのように分けるかというガイドラインを示したものがOSIの7階層モデルと言うものです。 応用(アプリケーション)層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク層 物理層  各層の役割をさらに知りたい人はそれなりの専門書を読んでください。簡単に説明すると、いわゆるアプリケーションプログラマは通信ソフトを作るときに、アプリケーション層との通信をコーディングするだけでOKです。細かいデバイスの電気信号の制御は物理層がやってくれますし、遠いところへ通信する際のルーティングの制御はネットワーク層がやってくれます。  このように開発の負荷を軽減したり、開発者の違いによる実装の差を減らしたりすることが可能となります。 IPネットワークのプロトコル  IPネットワークはOSIの7階層のようには分かれていません。だいたい5階層くらいに分かれています。  まず、プログラマが意識しなければならない応用(アプリケーション)層には、Webサイトを見る為のHTTPやメールの送受信の為のSMTP等があります。  パケットのコントロールをする為のトランスポート層でTCPやUDPと言ったプロトコルが使用されています。  さらにルーティング制御等のネットワーク層がIPです。  さらにその下の階層では、PPPなどのデータリンク層があったり、モデムなどの機器が物理層となるわけです。  よく、インターネットに使用されるプロトコルのことを「TCP/IP」と言いますが、これは「TCP」と「IP」という2階層のプロトコルを表しており、実際にはインターネットで使用されるプロトコルは「IP」が基本にあり、その上で「TCP」「UDP」等のプロトコルが使用されます。また、インターネットでは「IP」プロトコルだけではなく、ping等に使用される「ICMP」等もあります(他にもあるけど以下略)。 ※「IP」の「P」は「プロトコル」の略なので「IPプロトコル」って書き方はおかしい気がするけど、気にしない。 パケットとIP  パケットは直訳で「小包」という意味ですが、ネットワークの世界では一つの通信データを示します。ネットワークでの通信中は常に1ビットづつ送受信している訳ではなく、「パケット」と呼ばれるデータの固まりを送受信してるます。通信データは、あるサイズの「パケット」に分割され、受信側で再度組み立てられます。その為、パケットにはデータだけではなく、組み立ての順序や送信元/先の情報などが「パケットのヘッダー」に蓄えられています。  パケットの構造には当然ルールが必要ですが、そのルールと言えるものが「プロトコル」です。IP(インターネットプロトコル)はインターネットのデータ通信の基本とも言えるプロトコルです。  主な役割はIPアドレスの伝送制御で、IPヘッダには送信元のIPアドレスと送信先のIPアドレスが記述されています。 よく、「httpはtcpポート80番」とか言われますが、IPヘッダにはそう言った情報は含まれず、IPのデータ部(にあるtcpの情報の中)にあります。 TCP/UDP  TCP(Transmission Control Protocol)と、UDP(User Datagram Protocol)は、実際にアプリケーション同士の通信制御に使用されます。  ヘッダー部にはよく言われる「http」や「ftp」等のルール化された通信ポートの情報や、パケットの順序を示すシーケンス番号、セッションの状態(通信開始、通信中、通信終了のような物)を示す情報など、非常に多彩な情報を格納しています。なお、送信先のIPアドレス等はIPヘッダに含まれる為、ここにはありません。  TCPとUDPは同じ層のプロトコルですが、幾つかの違いがあります。  TCPはデータが送信された際にその応答がなされる為、信頼性の高い通信を行いますが、その分通信速度に難があります。UDPはセッション後一方的にデータを送るので、データが相手側に到着したがどうかの確認がワンセッションで出来ませんが、その分高速です。  UDPは主にFTPのデータグラム(データの受信用のセッション)や、NetBios(SAMBAやWindowsのファイル共有)のデータグラムなどの多量のデータ転送や、DNS(UDP53番)等に用いられます。 ICMP  ICMP(Internet Control Message Protocol)は、もっとも有名な使われ方は「ping」や「tracert(Traceroute)」だと思います。 ※Windows版の「tracert」コマンドがICMPを使います。UNIXの「traceroute」は主にUDPを使用。  このプロトコルはデータ転送が主たる目的ではなく、通信が目的地まで到達するかの確認などが主な目的です。  ICMPは軽視されがちですが、セキュリティの保持という側面では重要なプロトコルです。  ICMPにはTCPやUDPのような「ポート番号」はありませんが、「ICMP type」という番号があり、どの番号をパケットが所持しているかによって、その種類が決定します。 ICMP type種類 0エコー応答 3終点到達不能通知 […]

いろいろめも

PerlでAPOP認証(2003/01/06)  pop3サーバに接続が成功すると +OK <云々>  という応答が帰ってくる。この「云々」の部分+パスワードでMD5のメッセージダイジェストを作成し、「APOP user名 MD5メッセージダイジェスト」として送信送信すればAPOP認証が成功する。 変数に、 $res=サーバからの応答(+OK <云々>) $user=ユーザ名 $passwd=パスワード と入れてあるとすると、 use Digest::MD5; # 云々の部分の切り出し $res =~ s/(.+)<(.+)>/<$2>/i; # その後ろにパスワードを付加 $res .= $passwd; # メッセージダイジェストの作成(モジュール任せ) $md5 = Digest::MD5->new; $md5->add($res); $res = $md5->hexdigest;  あとは、「"APOP $user $res"」をサーバへ送り返せば認証成功となる。  、、、というか、サーバ応答(+OK <云々>)から切り出す部分って「<」と「>」も含まなければならないってのに小一時間ハマッタ。 起動すべきデーモンと止めるべきデーモン(2003/10/04)  RedHat系のLinuxは「chkconfig –list」でデーモンの起動の設定を確認することができます(出てこないデーモンもありますけど)。そして、不要なデーモンは「chkconfig nfs off」というようなコマンドで起動しなくすることが可能です。  ここではchkconfigで出てくるデーモン群を説明します。ちなみに私自身知らないものも非常に多いので、かなり推測が入っています。 kudzu新しく追加/取り外しされたハードウェア(マウスとかNICとか)を検知し、設定を行う。これがあると起動中10数秒待たされるが、あったらあったで便利。 syslogログを記録する。これが無いと普通は困る。 netfs起動時にネットワーク系のファイルシステムをマウントする。samba(Windowsファイル共有)とかNFS(ネットワーク経由でファイルシステムをマウント)とかが関係あるらしい。使ってなければいらないっぽい。 networkその名のとおりネットワークの設定とか起動とかをしている。これがなければオフライン。 random乱数を生成する。ゲームプログラマの命(謎)。基本的には残した方が無難。 rawdevicesrawデバイスをマウントする。残すか残さないかは微妙、、、っていうかどういうときに使われるのかがよくわからないので残してます。 pcmciaPCMCIAカード(いわゆるノートパソコンとかに差すPCカード)を使う人は残した方がいいです。デスクトップなら普通いらないと思う。 saslauthdRedHat9で始めて見た気がします。imapとかSMTP-AUTHとかのメール関係の認証で使うみたい。意図して使う人以外はOFFでいいと思う。 keytableキーボードマップ(配列)を設定する。/etc/sysconfig/keyboardあたりの関係だと思う。ONじゃ無いとキーボード配列が狂うかも? apmdAPM(Advancede […]

DNSを切り替えました

 Bフレッツの固定IPをもらえたので、DNSを切り替えました。 早いところはすぐにアクセスできるけど、遅いところは1日程度しないとアクセスできないかな。  ある程度してからじゃないとちゃんと設定ができているか確認できないのがもどかしい。

サーバリプレース

 今回の故障を機にサーバが変わりました。 CPU:Core2Duo E6400 MEM:512MByte(DDR2-4200 DualChannel) M/B:Gigabyte GA-945GCM-S2L  グラボとLANはオンボード。ただ、LANがLinuxでうまく認識されなかったので、暫定的にNICを差してます。あとで設定し直さないと。  あと、ネットはテプコ光+@niftyからBフレッツ+ASAHIネットに切り替えました。 残念ながら通信速度は落ちますね。ただ、テプコ光は固定IPが使えなかったので、別の固定IPサービスを使ってました。その為、このサイトへのアクセスは1Mbps程度しか出ていませんでしたが、今後はフルスピードでアクセスできるようになるでしょう(まだ申し込んでないから変化は無いけど)。 テプコ光Bフレッツ ダウンロード89.767Mbps64.585Mbps アップロード82.47Mbps37.20Mbps うむむ、アップロードの遅さが気になるな…

久々のサーバダウン>_<

 21日の深夜、久しぶりにサーバがダウンしました。気がついたのは朝方だったんだけど、仕事なんで直す暇が無くそのまま出社。そのまま送別会で、家に帰ったのは深夜0時くらいだったんだけど、それから障害の状況を確認。 なんか、いろいろ交換しても一行に直る気配が無いのでおかしいなぁ?と思ってたんですが、結局電源とマザーボードがお亡くなりになりました。複合障害だとどうしても切り分けが難しいですね。  とりあえず暫定的にPentiumDになっちゃったので消費電力が勿体ないです。またメンテします(たぶん26日の日中くらい)。  それにしてもLinuxって、マザーボードを交換してもすんなり動くモンだ。Windowsだとなんだかドライバをインスコし始めて途中で止まるのが関の山なのに… まぁ、交換前後のマザーボードのアーキテクチャが近いからかもしれないけど、この辺ってモノリシックカーネルの強みなのかな。

ポリシールーティングとか

うちは固定IPでは無いので、Interlinkの固定IPサービスを使ってます。  仕組みは、うちのサーバからInterlinkのサーバへVPNで繋いでるだけ。固定IPはInterlink側が保持してて、外からのアクセスはすべてこのInterlinkの固定IPからVPN経由でうちのサーバに入ってきます。  ただ、とてもこのVPNがすごく遅いです…。たぶん1Mbpsとかそういうレベル。なので某所用にダイレクト接続を試みてみました。 まず、もともとのルーティング設定で、ローカル側(192.168.xxx.0/24)はルーティングの設定でeth0側に抜けます。これは問題無し。 しかし、それ以外のアクセスは、このVPN側(絵の中では61.xxx.xxx.A)がデフォルトゲートウェイになっていますので、そこから出入りすることになります。  これが非常に大きな問題で、VPNを使わない側、絵で言う211.xxx.xxx.AというIPへ外部からアクセスされても、戻りのパケットはppp0側から抜けます。  IPパケットにはSRC(source:アクセス元)IPとDST(destination:アクセス先)が設定されていますが、たとえば111.xxx.xxx.xxxという人が211.xxx.xxx.Aへアクセスした場合は、

上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A

下りパケット…SRC-IP:61.xxx.xxx.A DST-IP:111.xxx.xxx.xx

になります。実際には

上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A

下りパケット…SRC-IP:211.xxx.xxx.A DST-IP:111.xxx.xxx.xx

で無ければ通信は成り立ちません。サーバのデフォルトゲートウェイが61.xxx.xxx.Aなので、下りパケットのSRC-IPが変化しています。  通常ルーティングはIPアドレス毎に、どの回線を使うかを判断しますが、SRC/DST-IP両方は見ていません。上記例の場合はSRC-IP(サーバから見るとDestinationなんだけどね)しか見ていません。ですので、今回は以下のような対策をとりました。 デフォルトゲートウェイをeth0側に変更(ちょっと別の訳あり)。 ppp0側から入ってきたパケットは、すべてppp0へルーティング。 eth0をデフォルトゲートウェイにした場合は、当然ppp0側からのパケットはeth0から抜けますが、ここをポリシールーティングという方法を使って強制的にppp0から抜けさせます。  やり方はこんな感じ

# 前のデフォルトゲートウェイを削除

route del default gw 61.xxx.xxx.A

# デフォルトゲートウェイを192.168.xxx.Aに設定

route add default gw 192.168.xxx.A

# ppp0へ入ってきたすべてのパケット(0/0 = 0.0.0.0/0)を、ppp0(61.xxx.xxx.A)側へとばす。

ip route add 0/0 dev ppp0 table 20

ip rule add from 61.xxx.xxx.A table 20 […]

(備忘録)Fedoraでiplogをコンパイル

 サーバのネットワーク周りの検証をしようと思ってiplogをインストールしようと思ったらコンパイルができなかった… いろいろ探ったらそれらしい情報があったので、備忘録として残しておきまする。 libpcapをインスト

$ wget http://www.tcpdump.org/release/libpcap-0.9.8.tar.gz

$ tar zxvf libpcap-0.9.8.tar.gz

$ cd libpcap-0.9.8

$ ./configure

$ make

$ su –

# cd xxx/libpcap-0.9.8

# make install

iplogをインストール

$ wget http://prdownloads.sourceforge.net/ojnk/iplog-2.2.3.tar.gz

$ tar zxvf iplog-2.2.3.tar.gz

$ cd iplog-2.2.3

$ ./configure

$ make ←ここでエラー

$ cd src

$ cp iplog_options.c iplog_options.c.bak

$ vi iplog_options.c

:443,492s/$/\\/ […]

Munin

今回はサーバリソースをグラフ化してくれる「munin」というツールを導入してみました。 2009/09/05追記 インストール中に「yum install munin munin-node」ってあるけど、「munin」がサーバ側でグラフなどを作る所。munin-nodeがクライアント側でデータを収集したり、どのデータを収集するかなんてことをする所みたいです。 muninは/etc/cron.dに稼働設定があります。 munin-nodeはデーモンとして動くのでchkconfigで設定します。 せつめい  説明に入る前に、そもそもリソースグラフ化ツールっていろいろありますが、それらと比べて見ましょう。 MRTG 元祖的ツール。自由度は決して高く無いけど、シンプルで初心者向け。 RRDTool MRTGを作った人がさらに高機能/高い自由度を目指して作ったらしい?ただ、これはグラフ生成用のモジュール群であって、これでリソース監視できる訳ではない。 cacti 様々なモジュールを組み合わせてWebから細かい設定ができるツール。使いこなせば複数のサーバのリソースグラフをすべてWebから制御可能。ただし、RRDTool、PHP、MySQLなどなど、環境設定に必要なものが多い上に、設定方法がかなり複雑で使いこなすのはかなり困難。 Munin 一応、複数のサーバ、複数のグラフ(プラグインで拡張)対応のグラフツール。前提条件で大きな所はperl、RRDToolなど、前提条件自体に設定が不要なので、インストールは楽。  まぁ、こんな感じで、Muninはとっても楽です(体感的にはMRTGより楽だった)。 Fedora coreで設定したんですが、だいたい以下の手順だけで行けます。 yum install munin munin-node(関連モジュールもインストしてくれる) /etc/munin/munin.confを編集(htmldirをapacheでみれる場所に設定するくらいでOK)。 chkconfig munin-node on(自動起動設定をしてくれる) /etc/init.d/munin-node start(起動)  これでmunin.confに書いたディレクトリにどんどんファイルを出力していくので、 http://xxxx/インストディレクトリ/localhost/ あたりにアクセスすればメニューが表示されます。 プラグインの追加  どうやら、インストール済みのプラグインなら、 cd /etc/munin/plugins ln -s /usr/share/munin/plugins/プラグイン名 /etc/init.d/munin-node restart だけでいいみたい。楽ちんや。上記の例は標準で入っているプラグインの例だけど、つまり追加のプラグインは上記の例プラスファイルを「/usr/share/munin/plugins」に突っ込むだけでいいのかな。 楽だねぇ〜

[…]

VMWare

 VMWareはLinux使いな方には有名だと思いますが、パソコン上で仮想マシンを動かすツールです。  よく、VMWareをLinuxエミュレータ(Windows上でLinuxを動かす物)と勘違いされがちですが、VMWareはWindows等から仮想的なパソコンを起動できるので、「PCエミュレータ」ってのが正しいです。  なので、別にLinuxにだけじゃなくて、Windowsを起動することも出来ます。  ちなみにLinux(UNIX?)エミュレータならcygwinが有名ですね。Windowsのコマンドプロンプトからlsとか実行出来るようになります。  で、本題ですが、結局先日から四苦八苦しているWebDAVがうまく動いて無くて、さすがにサーバで検証はやばいなと思い、検証用のLinuxを動かす為にVMWareを導入しました。入れ方はだいたい以下のような感じです。

VMWare server(無償)をダウンロードしてくる。http://www.vmware.com/jp/→製品→VMWare server→Download Now VMWare serverをインストールしつつ、Linuxをiso形式で落としてくる。今回はFedoraCore8を使いました。※iso形式をCDへ焼き直す必要は無い。 VMWare serverを起動して、New Virtual Machineを選択。 適当に設定。ちなみにいじったところは、メモリを512MB、HDDを5GBに設定しまいた。ちなみに5GBは結構ギリギリなので、インストールパッケージを絞るか、容量をもっと多く取った方がいいかも。 設定したら、Virtual machineを起動する前に、Edit virtual machine settingsを選らぶ。CD-ROMのところで、iso形式のファイルを指定できるから、それを事前にダウンロードしたLinuxのisoファイルで指定。 Virtual machineを起動してインスコ。

 だいたいこんな感じ。あ、ちなみにVMWareはそれを動かすパソコン以上の事は出来ないので注意です。たとえばディスクの空き容量が1GBしかないのに5GB指定するとか、32bitCPUなのに64bitCPUを仮想化するとかは出来ません。  逆にDVD-ROMとかネットワークカードとかが付いていれば、それをそのまま使えます。  用事が済めば、仮想ディスクを丸ごとバックアップしておけば、次回そのまま使えます。 …って感じでやっと本題のWebDAVの検証が出来るよ…

[…]

WebDAV…

 Apache2.2系でWebDAVを建ててるんですが、かなり難しいですね。未だ四苦八苦していますが、今のところ以下のような感じ。 WinXPのWebフォルダ(ネットワークプレースの追加)をクライアントにした場合はまともに動かない(かなりひどい動きをします)。とりあえず検証にはdddavというツールを使用中。 apacheのhttpd.confでLimitExcept/Limitがおかしい?LimitExcept以外の命令を普通に受け付ける。また、LimitExceptの中にrequireを書いても無視されてるっぽい。 特定アカウントをLimitExceptで制限すると、通常のWebアクセスを受け付けちゃう(;´Д`) 日本語はいい感じ。FedoraはUTF-8がデフォなので、そのまま日本語が行ける(シェルでも日本語が使えるので、ファイル管理に困らない)。 Alias /XXX "/xxx/yyy" <Directory "/xxx/yyy"> Dav On Order Allow,Deny Allow from all AuthType Digest AuthName "XXX" AuthUserFile "/xxx/yyy/zzz" <LimitExcept OPTIONS> require valid-user </LimitExcept> </Directory> これだと、LimitExceptが効かない。 ムムム…もう少し調べる必要がありそうだ。

S25RでSPAM対策

 今まで主にブラックリストでSPAM対策をしていた訳ですが、いろいろ試行錯誤してもフィルタ率が80%くらいでした。  届く宛先の傾向を見ると、やはり過去にWebにメアドを載せていたのが原因ですね。ここのサイトも10年以上公開しているので歴史の重みの一つですね。

 で、結構悩んだんですが、S25R(Selective SMTP Rejection)という仕組みを導入してみることにしました。詳しくは以下のサイトを見てください(始めのページに要点も書いてあります)。 http://www.gabacho-net.jp/anti-spam/

 結果から言うと、ほぼ100%SPAMを駆逐出来てます。かなりすごいですね。ただし、誤フィルタの危険性も捨てきれないので、しばらく監視が必要です。

 とりあえず設定方法については上記アドレスの「阻止率99%のスパム対策方式の研究報告」ってところに、postfix向けの設定サンプルが書かれているのでそれで行けますが、ちょっと注意点などを以下に記載してみたいと思います。

 まず、main.cfの設定ですが、元々ブラックリストによる制限をしてますが、S25Rも同じようなところに定義してます。ですので、ブラックリストとS25Rを両立する設定が必要な訳ですが、私は以下のような感じに設定しました。

main.cfの設定サンプル(ブラックリストとS25Rの両立)

〜以下、抜粋です  「reject_rbl_client 云々」がブラックリストの設定。「permit_mynetworks」以下が、S25Rのサイトにあったサンプルと同様の設定です。

smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org, permit_mynetworks, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜

 また、S25Rは誤フィルタを防ぐ為にホワイトリスト(許可リスト)を設定する必要があります。ホワイトリストも上記S25Rのサイトの「ホワイトリスト情報」ってところにあります。  で、この情報は頻繁に更新がなされるので、更新されたらメールで知らせてくれるようにcronに以下のソースを設定しています。

更新お知らせシェル

 頻繁にチェックすると相手のサイトに迷惑なので、一日一回だけのチェックにしてます。ちなみに以下の設定だと、サーバのroot宛にメールを送るので、その辺は環境に応じて旨く設定してください。  なお、あくまでお知らせするだけで、更新はしてくれません。

#!/bin/csh wget –no-cache -q -O /etc/postfix/white-list.txt.check -T 10 http://www.gabacho-net.jp/anti-spam/white-list.txt if ( $status != 0 ) […]

body_checks

 前にpostfixでヘッダーチェックをしてSPAMメールをフィルタする話を書きましたが、今回はbody_checks、つまりメール本文を見て不要ならフィルタするというもの。  まぁ、設定とか書いてもいいんですが、結論から言うと使えません。  軽く調べたら、どうもメール本文がBASE64とかでエンコードされてると、body_checksはデコードしてくれないので、フィルタできないとのこと。 BASE64でエンコードした情報をフィルタ設定として書けばいいのかもしれないけど、面倒だからやめ。  ってことで、この方法は他の手段を考えよう…

postfixでSPAM対策その2

 うちのメールサーバのSPAM対策は、設定で遮断できるところ遮断し、できないところはRBL(Realtime Blackhole List:ブラックリスト)で遮断しています。ブラックリストはspamcopの効果が圧倒的に大きいですね。誤登録も多いらしいけど。  サーバ側ではグレイリストは使ってません。誤遮断が怖いのもあるけど、正か誤りかの確認がしづらいのが理由。だから、クライアント側で振り分けて1つ1つ確認しています(Beckyの深海魚フィルタ)。  で、今回はpostfixの機能の一つを追加してみました。header_checksとbody_checksというのがあるのですが、今回はheader_checksです。メールヘッダーに任意の文字列がある場合に、エラーを返します。やり方は以下のような感じ。 /etc/postfix/main.cfに追加(元々コメントアウトされてる)。 header_checks = regexp:/etc/postfix/header_checks /etc/postfix/header_checksに追加(ファイルは元々ある)。 /^Message-ID:.*xxxxx.jp>/ REJECT  /etc/postfix/header_checksには元々コメントがいっぱい書いてありますが、すべてコメントで無視されるので、一番下にでも追加すればいいでしょう。 上記の定義の意味は、「^Message-ID:」はヘッダーの中の「Message-ID:」のことです。「^」が文頭を意味しています。「.*」は任意の文字。Message-IDにはいろいろな文字が入りますので、そこを省略しています。「xxxxx.jp」のことろは、そのSPAM特有の文字列を示していています。「Message-Id」はSPAMじゃなくてもヘッダーに入っていますが、SPAMメールのヘッダーをよく調べて、明らかにSPAMにはコレが書かれているという単語がわかればそれを正確に入れましょう。最後のREJECTは、「遮断」の意味ですね。  他にもX-Mailerとか指定できるので、ググルといろいろ調べてみるといいかもしれません。ちなみに「/~From:.*xxxx.net>/ REJECT」がうまくいきませんでした…何でだろう?  この機能は、「マッチした場合にエラーメール(バウンスメール)を返す」ではなく、「マッチした場合に相手サーバにエラーを返す」です。  バウンスメールってSPAM業者には全く効果が無いので、このすぐにエラーを返すという動作もいいですね。