サーバの構築記録・詳細版です
サーバー日記では構築中に気づいたことや引っかかったことを時系列で書き留めています。
その時点ではFixした手順は書けませんでしたが、そろそろ安定してきたので設定をこちらに書き出します。
少しずつ書き足して行きますので、参考にどうぞ。
もしも設定記事が参考になったら、どちらかの掲示板にでも感想を下さいませ。
OSインストール編 & TELNET と PROFTPDの実装
固定IPで独自ドメインを発信するDNSのセットアップの解説 - BIND
セカンダリサーバーの設定手順
qmail(を稼動させる為の)インストール手順
qmail のPOP認証にめちゃくちゃ時間がかかる人への解決策の案
日記で書いたものをもう一度起こしてみました。同様にTurbo Linux Server 6.5 と 7を比較して記載します。
6.5
|
7 ・・・ こちらは参考まで
|
|
インストール |
インストールそのものはインストーラーに任せてしまうのであまり選択する部分は出てきません。 |
|
TELNETの設定 |
telnetはinetdから起動させる。
|
こちらはinetdより性能の良いらしい xinetdで起動させるのが標準。 xinetdでは、その機能が使われない間はお休みしているらしい。 設定は /etc/xinetd.d/telnet を開き、 disable yes という行を disable no に変えて有効にさせる。 許可するホストを指定するために、その同じファイルに |
FTP | standaloneで起動させるのは簡単で、ある。 /etc/rc.d/init.d/proftpd start というスクリプトから起動させる。 但し、これだとアクセスできるホストを制限したりできないのでこれを不採用とした。 standalone ではなく inetdからの起動にした。設定の違いは、 /etc/proftpd/proftpd.conf の中にある次の行である。 servertype standalone これを servertype inetd ・・・これににセットした。 で、telnetと同じ様に |
6.5と同じ説明になるが、 で、telnetの時と同じ様に |
不正アクセスのモニタ | 不正ログインのレポートをメールで取るために次のような設定をした。 /etc/hosots.deny の最後に all : all という行がある。 これを追加して all : all : spawn ( /usr/sbin/safe_finger -l %u@%h | /bin/mail -s %d-%u@% h root) & この様に書いておいた。 |
左側の6.5と同じだが、一点だけ異なる。黄色のところだけ。all : all : spawn ( /usr/sbin/safe_finger -l %u@%h | /usr/bin/mail -s %d-%u@% |
さて、ここまでで、telnetとftpが起動できる状態になったはず。 それぞれで、許可したIPからアクセスできるか?
|
BINDを使って独自ドメインを運用するまでの手順を説明します。
BIND8でもBIND9でも基本は同じです。私のメイン環境はBIND8でテスト環境にBIND9があります。
BIND9の特徴として、LAN内用とLAN外(=WAN側)用の設定が別々に出来るという拡張的な機能が使えますが、まあそれはおいておいてまず基本をセットしてみましょう。基本が出来ないとDNSは使えません。またBIND9からはBIND8では甘く許されていたいくつかの不整合な設定が、ダメよ、ってなっていて動かないことがありますが変な設定をしなければちゃんと動作します。
尚、基本が出来上がってもLAN向けの説明はしていませんのであしからず。
1、まず最初に独自ドメイン(zone設定)なしに、基本となるBINDを稼動させてDNSサーバーになってみましょう
独自ドメインの設定は後回しにして、まずDNSサーバーを起動させてみましょう。
BINDがインストールされていると基本となるファイルは標準状態で既に設定されているはずです。
ベースとなる設定のファイルは
/etc/named.conf
これです。
options{ } というカッコ内に
directory "/var/named";
というディレクトリが示してあります。この例と違う場合は読み替えてください。
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
初めからこんな2つの設定が指定してありますよね。
だから
/var/named/named.ca
/var/named/named.local
の2つがあればまずはOKです。
これで必要なファイルは揃っているのがわかりました。ではbindを起動させます。
/etc/rc.d/init.d/named start
又は
/etc/init.d/named start turbo7以降
です。
起動しているか?確認の為に
ps aux | grep named
とタイプして
named 238 0.0 4.6 2800 1516 ? S Jul05 0:03 named -u
named -g
こんな結果が複数行表示されます。これで起動はOKです。当然ですが数字はそれぞれの環境で変りますよ。
まずは大丈夫ですね。
bindを起動させると、自分がDNSサーバーになることが出来ます。
2、DNSをテスト
起動したらテストしてみましょう。サーバー自身から私のホストの名前を検索して見てください。
検索にはhostコマンドを使ってみましょう。
nslookupコマンドを使った例を書いておいたのですが、どうやら検索サーバーを指定する時にはネームサーバー登録されてないとnslookupが受け付けてくれない事がわかり、うまく検証できないので2002.7.27にhostコマンドにかえて説明を直しました。
host www.ayamizu.com
でもコマンドはこれで良いのですが、自分のサーバーからデータを取ってきているのかを明確にしてテストする為に
host www.ayamizu.com localhost
これで行きましょう。 host www.ayamizu.com
127.0.0.1 でもいいです
さてこれで、一番最後の行はどう表示されますか?
Host not found.
って出たらダメ。
ns.ayamizu.com has address 61.205.232.120
こう表示されればOKです。
また、同じLAN内のWindows2000やXPマシンからテストしたい場合は、DOS窓より
nslookup www,ayamizu.com xxx.xxx.xxx.xxx
などとやってみましょう。ここでいう、xxx.xxx.xxx.xxxはサーバーのローカルIPで、例えば192.168.0.2などで、サーバーのDNSをテストする事ができます。
どうですか?OKですか?OKなら3番に進んでください。
もしこれで結果がダメだったら、おおもとのサーバー達がちゃんと認識できているのかを調べなければいけません。
dig
とタイプして
;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5d11h53m4s IN A 192.112.36.4 F.ROOT-SERVERS.NET. 5d11h53m4s IN A 192.5.5.241 B.ROOT-SERVERS.NET. 5d11h53m4s IN A 128.9.0.107 J.ROOT-SERVERS.NET. 5d11h53m4s IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5d11h53m4s IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5d11h53m4s IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5d11h53m4s IN A 202.12.27.33 I.ROOT-SERVERS.NET. 5d11h53m4s IN A 192.36.148.17 E.ROOT-SERVERS.NET. 5d11h53m4s IN A 192.203.230.10 D.ROOT-SERVERS.NET. 5d11h53m4s IN A 128.8.10.90 A.ROOT-SERVERS.NET. 5d11h53m4s IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5d11h53m4s IN A 128.63.2.53 C.ROOT-SERVERS.NET. 5d11h53m4s IN A 192.33.4.12
;; Total query time: 17 msec ;; FROM: ns.ayamizu.com to SERVER: default -- 127.0.0.1 ;; WHEN: Thu Jul 25 23:07:01 2002 ;; MSG SIZE sent: 17 rcvd: 436
こんな結果が出てくればまずはOKです。 画面には表示しきれませんので最後の方だけの表示です。 何らかのエラーが出て上記の様なルートサーバーが表示されない様なら /etc/named.conf に書かれている zone "." { type hint; file "named.ca"; }; この named.ca(又はそれに相当しているファイル)が故障している場合がありますので、正しいファイルを調達して配置しなければなりません。
3、外部から引いてみましょう
上記までがクリアできたらルーターを越えてみましょう。
インターネットの外から、Linuxを使って
host www.ayamizu.com ggg.ggg.ggg.ggg
ggg.ggg.ggg.gggはサーバーのローカルIPでは無く、グローバルIPの方です。
これでちゃんと結果が出れば、DNSとしての基本動作はルーターを含めて完了です。
でも別のインターネットアクセスからLinuxを立ち上げるのは環境が厳しいですよね。その場合はWIn2000かXPから
nslookup www.ayamizu.com ggg.ggg.ggg.ggg
これでチェックはOKです。
ちゃんと 61.205.232.120 というIPが出てきましたか?
もしunknownなどになる場合は、ルーターが止めている可能性がありますので、フィルターをチェックしてみましょう。
チェックポイントは、ルーターのport 53 - udp がオープンされているかどうか、です。
4、ご自分のzoneを登録してみましょう。
さて、ようやくzoneを登録してみます。
まず
/etc/named.conf
このファイルの下の方に新しい自分のzone情報を書き加えます。
zone "ayamizu.com" {
type master;
file "ayamizu.com.zone";
};
こんな感じで書きます。
file "ayamizu.com.zone"; というのはファイル名なのでなんでもいいのですが、私はドメインの後ろに .zoneをくっつけています。
次に、それに相当するzoneのファイルです。
/var/named/ayamizu.com.zone
この例の場合では、上記の様なファイルを作ります。
そして中身はテスト用に簡単に書いてみましょう。次のようにして下さい。
$TTL 86400 @ IN SOA ns.ayamizu.com. postmaster.ayamizu.com. ( 2002042301 ; Serial <---ファイルを編集したら、かならず直します。通常は日付と通し番号を使います 10800 ; Refresh 3h 3600 ; Retry 1h 604800 ; Expire 1w 86400 ; TTL 1d ) IN NS ns.ayamizu.com.<---自分のホスト名+ドメイン名をネームサーバーとして書いてください ns IN A 61.205.232.120 <---自分のIPを入れてね
このファイルはこれで仮の設定が完了です。
あと /var/named/named.local を開いて、一行め$TTL
86400という行をチェックしてみてください。
@TTL 86400と書いてあるパッケージがあります。$に直さないと動作しません。
以上ができたら
/etc/rc.d/init.d/named restart
として、再起動させます。
ここで一つ、チェックのコツをかきます。私のTurbo6.5の場合は表示されないのですがTurboLinux7Serverの場合に有効です。
restartすると
shutting down named : OK
starting named : OK
こんな表示が出ます。
一度目のrestartでは上記のように出ますが、設定ファイルに大きなミスがあると、namedが起動出来ずに落ちます。
そうすると、もう一度restartすると
shutting
down named : NG
starting named : OK
となってしまいます。
私は、この様に2度restartすることで、起動出来ない様なミスをチェックしています。活用して見てください。
5、さて、さっき設定した独自ドメインは引けてるかな?
zoneを登録して稼動したら早速動作チェックしてみましょう。
独自ドメインを www.example.com と仮定します。サーバーから
host ns.example..com localhost
と実施
その後、同じLANのWin2000かXPからも試してみると良いですね。
nslookup ns.example..com
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxxはサーバーのローカルIPです。
これで登録したipが表示されるはずです。
もしここで登録したipが表示されない場合は、
digとタイプして2の項目で説明した様なルートサーバーの一覧が表示されますか?
表示される → zoneの設定がおかしいので、追加したzoneについてよく見直して下さい。
私の実験では一行目の $であるはずのところ@になっていてはまってしまいました。
表示されない → namedが起動できていませんね。重大なエラーを起こしている可能性が大きいです。
修正したファイルを見直して下さい。
上記をクリアして是非自分のドメインを引けるようにして下さい。
これで基本動作はばっちりです。
6、そろそろレジストラの登録を変更します。
レジストラに登録しているネームサーバーを仮のものから本物に変えなくてはなりません。
本物の一つは今回作成している自分自身です。
あとはセカンダリDNSになってくれる先を探します。
2つが決まったらレジストラへ登録変更してしまいましょう。
お名前.comなどの一部のレジストラによっては自分自身をネームサーバーにするには一旦ネームサーバーとして登録したりする必要がありますが、特に難しいことではありませんね。レジストラの説明を良く確認して切替えてください。
もしセカンダリDNSが決まっているならできるだけ早めに登録変更すれば運用がどんどん進みます。
変更後数日(1〜3日程度)でレジストラに登録したDNSの参照ができはじめます。
7、zoneファイルの設定を仕上げましょう
ここまでに設定した
/var/named/ayamizu.com.zone
は仮の姿です。
ちゃんと設定しておきましょう。ここではホスト名に www と mail を使う例をしまします。mailというホストはあえて使わないかもしれませんが
wwwは使いますよね。
$TTL 86400 @ IN SOA ns.ayamizu.com. postmaster.ayamizu.com. ( 20020072902; Serial <---ちゃんとカウントアップしてね 10800 ; Refresh 3h 3600 ; Retry 1h 604800 ; Expire 1w 86400 ; TTL 1d ) IN NS ns.ayamizu.com. IN NS スレーブサーバーのホスト名をちゃんと追加して記載しましょう IN MX 10 ns.ayamizu.com. <---メールを受けとるホストを書いてね。10は優先度、そのまま10と書いておけばOK ns IN A 61.205.232.120 www IN A 61.205.232.120 <---自分のIPを入れてね mail IN A 61.205.232.120 <---もし使うなら自分のIPを入れてね
例その2: http://www. で始まらない、 いきなり独自ドメインでアクセスする場合は次のような一行を加えておきます。
IN NS ns.ayamizu.com.
IN NS スレーブサーバーのホスト名を記載する
IN MX 10 ns.ayamizu.com.
IN A 61.205.232.120 <---こういう行を書いておきます
ns IN A 61.205.232.120
事例のお断り: 設定のミス等により問題が発生するのを回避する為に省略した記載があります。
DNSにはCNAMEという機能があり、一つのホストを複数に見せかける為のものです。
IN NS ns.ayamizu.com.
IN NS スレーブサーバーのホスト名を記載する
IN MX 10 ns.ayamizu.com.
ns IN A 61.205.232.120
mail IN CNAME ns
ftp IN CNAME ns
www IN CNAME ns
これはmailやftpやwwwはnsの別名だよ
= CNAME、という事です。以前からたくさん使われています。
でも間違って書くと誤動作のモトになり、アクセスが増えるのでそのCNAMEを避けて、上記のようなAレコードでの記載で例を載せました。
一応ただし書きとして書いておきます。
これでrestartすれば正常に動作します。
8、ルーターの確認を再度実施
さて、一通り動作チェックまで済んだところで、セカンダリDNSサーバーにzone情報を転送する為に設定を書きます。
/etc/named.conf
のoptionsの中に転送許可するセカンダリDNSのホストを書いておきましょう。
allow-transfer {
xxx.xxx.xxx.xxx; スレーブサーバのアドレスです
};
またzone転送のプロトコルがルーターで止まっていてはいけません。ルーターの設定をチェックしておきましょう。
チェックするのはポート53のtcpです。DNSを使う方ではポート53のudpが必要だったのですが、zone転送には、同じく53のtcpの転送を通さなくてはなりません。
結果的に53ポートについてはtcp,udpの両方を開いている事を確認しておきましょう。
9、nameserverの設定 /etc/resolv.conf
サーバーから
nslookup www.ayamizu.com
とタイプした場合、上の2行は自分(127.0.0.1とか 0.0.0.0 など)になってますか?
プロバイダのDNSのアドレスが表示されている場合、DNS自分の不具合がわかりにくくなります。自分を第一優先のDNSサーバーとして単体で行くのが異常を察知するのに良いと私は思っています。
/etc/resolv.conf を調べて nameserverという記載を一個にしてしまいましょう。
nameserver 127.0.0.1
こんな記載が良いでしょう。
10、slaveサーバーのテスト
世界中の人がwww.example.comを検索します。その場合、www.example.comの登録してある指定のDNSサーバーに問い合わせに行きますね。
その際、primaryとslaveのどちらに問い合わせが行くのか? というと、両方に同じ割合でいくらしいです。だからslaveサーバーの動作もチェックしておかないと。
と思ったのですが、もし仮に、何らかの原因でzone情報がうまくslaveサーバーへ転送出来てない、または更新できていないとします。
その上で
host www.example.com sss.sss.sss.sss
としてsss.sss.sss.sssというslaveサーバーからwww.example.comの情報を見た場合、slaveサーバーが普通にDNS検索をかけてきた結果を表示してしまい、slaveである区別がつきません。・・・・・・・
いちばんいいのは、slaveサーバーのオーナーが、転送を受けたzoneのファイルが新しいシリアル番号のモノに更新されているかどうかを調べるのが一番いいのですが・・・・
もしダメなら別のチェック方法を・・・ちょうど、DNSの検査サイトを教えていただきました。
http://www.dnsreport.com/
ここに目的のドメインを入力して、エラーになるところが無いかテストしてみましょう。
最後に、namedの自動起動をセットしておかなければいけませんね。
chkconfig --list named
とすると
named 0:off 1:off 2:off 3:on 4:on 5:on 6:off
こんな感じで3がONになっていれば起動とともにnamedが動作します。
chkconfig named on
とすれば3はonになります。
Last Update 2002.7.30
セカンダリサーバー(slave server)を引き受ける方への手順もお知らせします。
/etc/named.conf
に
zone "example.com" {
type slave;
file "example.com.zone";
masters {
61.205.232.120;
};
};
こういうのを書きます。
普通のzoneと違うのは type が slaveになっていること、また、mastersとして元になるサーバーのIPを記載しておくこと。
これだけです。
namedを起動して
/var/named/example.com.zone というファイルができていて、中身が転送モトと同じであればGOODです。
slaveは簡単ですね。
あ、そうそう
/var/named ディレクトリが、rootの権限になっていると named から書込みが出来ずエラーになります。
chown named /var/named
chgrp named /var/named
の2つを実行してnamedディレクトリの所有者を変えておきましょう。
改めて、独自ドメイン(zone)を登録するファイルの書方 をまとめて書いておきます
IP1では逆引きの権利をもらえないので、その設定はしない。しても意味がないし。
逆引きとは ip xxx.xxx.xxx.xxx という数値からホスト名を見つけるデータベースです。IPが固定で1つの場合ではだいたいプロバイダの方で登録してあってその登録の名義を変更してくれません。
まずは
/etc/named.conf の中身です。optionsの中と追加したzone以外は標準で入っている事が多いと思います。
options {
directory "/var/named";
allow-query {
any;
};
allow-transfer {
xxx.xxx.xxx.xxx; スレーブサーバのアドレスへ転送許可を書きます
};
};
ルートキャッシュファイルです デフォルトのままです
zone "." {
type hint;
file "named.ca";
};
ローカルの逆引きです デフォルトのままです
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
主ドメインのゾーン設定です これが追加するところです
zone "ayamizu.com" {
type master;
file "ayamizu.com.zone";
};
サブドメインのゾーン設定です 必要に応じて追加してください
zone "example.net" {
type master;
file "example.net.zone";
};
以上です。簡単ですね。
次に各ゾーンファイルです
/var/named/named.local
$TTL 86400 ←このデフォルトのTTLがないとBIND9からはエラーになります
@ IN SOA localhost.
root.localhost. (
(この部分を @ IN SOA ns.xxxxxxxx.net. postmaster.xxxxxxxx.net.
と記載していましたが、わかりにくい表記でしたのでこの様に直しました。2003.1.9)
2002040301 ; SeriaL
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400;
)
IN NS ns.ayamizu.com.
IN NS ns.example.net.
<-バーチャルドメインを使う場合だけ追加
1 IN PTR localhost.
次に独自ドメインです、
/var/named/ayamizu.com.zone
$TTL 86400
@ IN SOA ns.ayamizu.com. postmaster.ayamizu.com. (
2002042301 ; Serial
10800 ; Refresh 3h
3600 ; Retry 1h
604800 ; Expire 1w
86400 ; TTL 1d
)
IN NS ns.ayamizu.com.
IN NS スレーブサーバーのドメインを記載する
IN MX 10 ns.ayamizu.com.
ns IN A 61.205.232.120 <---自分のIPを入れてね
www IN A 61.205.232.120 <---自分のIPを入れてね
ftp IN A 61.205.232.120 <---自分のIPを入れてね
localhost IN A 127.0.0.1 <--これは入れた方が良いのかどうかわからなかったのですがBIND9で起動させると読み飛ばされてるので不要の様です。
バーチャルドメインを運用する場合は、同じようにzone設定を追加して書いていきます。
/var/named/example.net.zone
$TTL 86400
@ IN SOA ns.example.net. postmaster.example.net. (
2002042301 ; Serial
10800 ; Refresh 3h
3600 ; Retry 1h
604800 ; Expire 1w
86400 ; TTL 1d
)
IN NS ns.example.net.
IN NS スレーブサーバーのドメインを記載する
IN MX 10 ns.example.net.
ns IN A 61.205.232.120 <---自分のIPを入れてね
www IN A 61.205.232.120 <---自分のIPを入れてね
ftp IN A 61.205.232.120 <---自分のIPを入れてね
localhost IN A 127.0.0.1
以上です。
簡単に解説しておきます。
zoneの書方は人それぞれで、参考にすると訳がわからなくなります。どれがベストなのでしょう?
できるだけ検索手順を減らす方向が良いとされています。でもよくわかりませんよね。
わからないのでまずは具体的な説明に入ります。
ns IN A xxx.xxx.xxx.xxx
これがメインとなるそのサーバーのAレコードです。nsって名前がホストの名前ですよ。そう登録している重要なレコードです。もちろんご自分のホスト名に合わせて書き換えましょう。ご自分のホスト名は
uname -a で確認できます。
もし登録されていない場合は
/etc/sysconfig/network
を編集しましょう。たとえば、もしも私のドメインなら
NETWORKING=yes
HOSTNAME=ns.ayamizu.com
GATEWAY=192.168.0.1
GATEWAYDEV=eth0
こんな風になっていると思います。(実際は全然ちがうんですけどね)。nsがホストだとわかりますよね。参考にどうぞ。
あと /etc/hosts が
127.0.0.1 localhost.localdomain localhost
192.168.0.2 ns.ayamizu.com ns
61.205.232.120 ns.ayamizu.com ns
こんな感じになってたりするはず。ご参考まで。
さて、すこし話は戻りますが、WEBにアクセスする時に、例えば www.ayamizu.com でなくて ayamizu.comだけで開くページをみかける事が多いですよね。それはAレコードの登録に
www IN A xxx.xxx.xxx.xxx
と書くところを
IN A xxx.xxx.xxx.xxx
とホスト名を省略して書くことでそうなります。このように省略してもちゃんと動作します。省略には@をCNAMEで登録する方法も見たことがありますが、なかなか取扱い通りに動作してくれないので忘れることにしました。
次のネームサーバーの記載、これは問題ないですよね。
IN NS yyy.yyyyy.yyy.com.
こんな感じ。説明しません。
次MXです。
そのドメイン宛のメールをどのホストへ流すか、そういう設定です。
IN MX 10 ns.ayamizu.com.
たいてい独自のサーバー1台での運用でしょうから、上記の設定でOKです。複数のメールサーバーを作って予備に作動させておいたりする場合に優先度をつける、それが10です。1台なら意味はありません。フルドメインで記載する場合は.を最後に忘れずに。
(2002.7.28記事内容を変更いたしました)
当初、説明用のサンプルには
IN NS ns.ayamizu.com.
IN NS スレーブサーバーのドメインを記載する
IN MX 10 ns.ayamizu.com.
ns IN A 61.205.232.120 <---自分のIPを入れてね
www IN CNAME ns
ftp IN CNAME ns
と記載しておいたのですが
www IN A 61.205.232.120
<---自分のIPを入れてね
ftp IN A 61.205.232.120 <---自分のIPを入れてね
という表記に変えました。CNAMEとは、ここではnsという実ホストがあり、そのニックネームとしてwwwやftpなどのホスト名も兼任する、そういう機能です。これはニックネームと考えてください。キャノニカルネームだそうです。
CNAMEを使うと、不要なクエリを発生してしまうこと、MXへの指定ホストがCNAMEになっていると誤動作の元になることの理由により、あまり使わない方が良いとの論議があり、どう説明しようか迷ったのですが、誤動作回避を念頭にする、すなわちCNAME表記をやめる方向が良いとの判断をいたしまして、記事をまとめなおしました。
DNSとしてどうあるべきか、不明なのですが、誤動作のない表記を優先させてこのようにいたしました。
ご了承下さい。
あと /etc/resolv.conf もチェックしておきましょう
search xxxxxxxx.net
search ayamizu.com ←バーチャルホストをどうしてここに書いたのか記憶に無い??必要なのかな??実験出来ずそのまま書きつづけています。
nameserver 0.0.0.0 ←これを書かないとnslookupが自分のDNSで動作しません。0.0.0.0か127.0.0.1を書きます。
・・・・・必要に応じてセカンダリ以下のDNSを列挙すればそちらを引きに行きますが無い方がDNSサーバーらしいと思う。
【ルートサーバーの一覧が書いてあるファイル 私の場合は named.ca について】
自分のzoneを発信するという事とは関係なく、BIND等のDNSサーバー稼動させると、世界中の名前解決をはじめる訳ですね。
そのデータを取ってくるおおもとのルートサーバー一覧がこのファイルです。
一覧がまれに変更になる事もあるとか。
で、昨年2002年秋、Jというサーバーが引っ越ししてアドレスが変りました。しばらくは並行運用していますが、恐らくもう変わった頃かと思います。
次の行を探してIPを変更して置きましょう。
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
上記は変更後のIPです。(2003.1.9)
Last Update 2003.1.9
qmailのインストールは、実験しながらすすめるとそのまま本になるほどの手順があります。
普通は
1) qmail本体をインストールして稼動させる
2) popの機能を実装する
3) SMTPのリレーに制限をつける為の策を練る
4) セキュリティを気にした設定をする
こんな感じの順に解説されています。
でも、ここでは一気にインストールしてしまう為の説明をします。
※私はqmailでもバーチャルホストでの運用をしているのですが、説明が混乱するので、バーチャルドメインを使っていないという前提で書きます
構築の前提条件を決めてしまいます。
・qmail本体のインストール
・popやsmtpの起動にはxinetdではなく、tcpserverを使う。
・POPはパスワードを暗号化したAPOPとPOPの両方を使える様にする
・パスワードはユーザーのログインパスワードとは切り離し、$HOME/Maildir/.password
に書き出したものをPOPパスワードとする
・SMTPのリレー制御は、POP before SMTPを実装して実施する。
ではこれらを実施する為に効率の良い手順で説明してしまいます。
★ まずAPOP対応のパッチを準備し、インストールもしておきます。
qmailのコンパイルの時にパッチを当てないといけないので先に用意します。
使う圧縮モジュールは checkpw-1.00.tar.gz です。
まず http://checkpw.sourceforge.net/checkpw/
からダウンロードします。
解凍してパッチファイルを用意するついでにインストールまで済ませておきます。
# tar xvzf checkpw-1.00.tar.gz
# cd checkpw-1.00
# make
# make setup check
これでインストールは完了です。これは簡単ですね。
(解説)普通はPOPの説明でcheckpasswordというパスワードをチェックするだけのモジュールの説明が出てきます。
それを使う場合はAPOPは使えません。そして、ユーザーのログインパスワードをそのまま使う事になりますので、非常にセキュリティ上よくありません。
インストールの手間は同じなので、パスワードを暗号化するAPOPを使う事が出来、更にログインパスワードとはべつのパスワードを使える selectcheckpwと言うのが便利そうです。
パスワードがばれてもサーバーが乗っ取られる危険は減るという事ですね。
さて、この checkpw のインストールにより3つのモジュールがインストールされます。
先のcheckpasswordとその3つのモジュールを並べてみます。
/bin/checkpassword | Linuxのユーザーとパスワードを使う |
/bin/checkapoppw | APOPを使い、パスワードはユーザーのホームに置く |
/bin/checkpw | 通常のPOPらしいが、パスワードはユーザーのホームに置くらしい |
/bin/selectcheckpw | POP と APOPをクライアントのリクエストで自動に使い分けてくれる便利なやつ。でもqmailにパッチをあててから再コンパイルが必要。ちょっと注意です。パスワードはユーザーのホームに置く |
先程のインストールでこの表の下3つは使える様になっています。
ではこの中の一番下のモジュールを使ってPOPとAPOPを両方使える様にする説明を続けます。
★qmail本体を準備
qmail本体の入るディレクトリを作ります。
# mkdir /var/qmail
qmail用ユーザーとグループを作っておきます
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
qmail本体とパッチ(日本時間対応にするパッチ)をftpでダウンロードします。
$ ftp ftp.nlc.net.au
・・・name : ftpを入力
・・・password : メールアドレスを入力
ftp>cd /pub/unix/mail/qmail
ftp>dir で一覧が確認できたら
ftp>get qmail-1.03.tar.gz これが本体
とする。
さらに
ftp>get qmail-date-localtime.patch
これがパッチ
ftp>quit
で終了です。
$ tar xzvf qmail-1.03.tar.gz 解凍
$ cd qmail-1.03
$ patch -p1< ../qmail-date-localtime.patch
でコンパイル前にパッチを当てます。
paching file date822fmt.c
と表示されます。
あとDNSのパケットが512バイトを越える物を処理出来ないバグがあるらしく取っておきます。
dns.cのソースを開き、PACKETSZという文字を探して65536に書き換えます。
次にPOPとAPOPが両方使えるようにする為のパッチを準備しておいたのでそれを当てます。
patch -p1 < [checkpw-1.0を展開したディレクトリ]/qmail-popup-auth.patch
とします。
以上でパッチは完了です。
では
# make setup check
としてコンパイルです。
さて、/var/qmail/controls/以下に必要な設定ファイルを作る操作です。
# ./config
とするのですが・・・・・・・
この手順ではDNS設定を参照してドメインなどを自動にセットしてくれますが、逆引きなどの関連でたいてい思い通りにセットされません。だから、半手動で設定します。
# ./config-fast ホスト名としてFullドメインを指定してしまいましょう。
私の場合は
# ./config-fast ns.ayamizu.com
ですね。
この結果設定されるのは、
/var/qmail/control/以下に出来る5つのファイルです。
できたらチェックしておきましょう。
me | ns.ayamizu.com | |
locals | ayamizu.com localhost ns.ayamizu.com |
ここは環境によって localhostがないとローカル配送でエラーが出る場合があったので動作をみてあとでチェック |
defaultdomain | ns.ayamizu.com ayamizu.com |
|
plusdomain | ayamizu.com | |
rcphosts | ayamizu.com .ayamizu.com |
完成後、サーバーが受信拒否しているときはここが違ってたりします。注意してね |
手動でファイルを書き出しても構いません。5つ全部が必要な訳でもありませんが全部そろっていた方が安心です。
次に起動スクリプトを作ります。
cp /var/qmail/boot/home /var/qmail/rc
これでOK。
そして、qmailはMaildir形式が特徴なので、それを有効にする為に、この起動スクリプトを書き換えてしまいます。
さっきの /var/qmail/rc
を開き次の行の通りに書き換えます
qmail-start ./Maildir/
splogger qmail
赤いところが書換ポイントで、メールディレクトリ形式にするためのものです。
Maildirはメールがディレクトリに一つづつのファイルとして区分けされて保存されるので、いろいろな面で非常に有用だとされています。
この ./Maildir/という記載により $HOME/Maildir/ 以下にメールが配信されます。最初の配信は
$HOME/Maildir/new に
既読は
$HOME/Maildir/cur に保存されます。
ここで注意ですが、ユーザーのホームディレクトリにMaildirを作ってあげないといけません。
必ず該当ユーザでログインしておいて
$ /var/qmail/bin/maildirmake Maildir
とします。
既に作成されているユーザーへは、上記のように手動でMaildirを作ってあげます。
今後新規にユーザーを作成する時にMaildirが自動に作られるようにするには
# /var/qmail/bin/maildirmake /etc/skel/Maildir
として雛形を作っておきます。
次に、sendmailを止めないといけません。
まずサービスを止めます
# /etc/rc.d/init.d/sendmail
stop で止めて
# cd /usr/sbin
# mv sendmail sendmail.bak
# chmod 0 sendmail.bak
としてそのファイルを変えてしまいそのうえで起動しないようにパーミッションまで変えます。
このままではsendmailを使うソフトが動かないのでqmailを擬似的にsendmailを立ち上げます。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
とします。これでsendmailを使うソフト(CGIなど)も普通に動作します。
qmailの起動は
# /var/qmail/rc &
これでOK。
配信テストをしてみますか?
/var/qmail/bin/qmail-inject
to : ユーザー名
ctrl + D
でダミーのメールをtoの先に送ります。
そのユーザーのMaildir/new/以下にファイルができているか確認します。
OKなら動作完了です。試しに携帯のメールアドレスなんかにも届きますよ。
あと必須項目として「ある特定の重要なアドレス宛」のメールを受信できる様にします。
qmailはroot宛のメールは受信しません。だから次の3アドレス宛のメールを受けるaleasを作ります。
postmaster と root と mailer-daemon
受け取るユーザーを決めてuseraddでユーザーを作っておいてください。例えばここではuser1がその受取人だとします。
echo user1 > /var/qmail/alias/.qmail-postmaster
echo user1 > /var/qmail/alias/.qmail-root
echo user1 > /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail*
この様にaliasを作成し、これでOKです。
あと MAILER-DAEMON という大文字の宛先が必要になる場合もあるかもしれません。というか必要になります、きっと。
だから上記の続きで
echo user1 > /var/qmail/alias/.qmail-MAILER-DAEMON
も書いておきましょう。
今まで二度、バウンスメールが無限ループに入ってしまい、サーバーが過負荷になった事があります。
どうやらこのMAILER-DAEMONという宛先が大文字と小文字で両方を使い分けられている為に、どちらかで受け取れずループ入りしたらしいという結果でした。
両方書いておくと安心です。
これでqmailの本体は無事動作するようになっているはずです。
★tcpserver をインストールする
qmail作者の強いお薦めによりtcpserverをinetdの代わりに用いてqmail関連のpopやsmtpを起動させます。
ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
からucspi-tcp-0.88.tar.gzをダウンロードします。
tar xzvf ucspi-tcp-0.88.tar.gz で解凍して
cd ucspi-tcp-0.88
make setup
make check
これだけです。
ここであらかじめ2つの数値をチェックしておきましょう。
id -u qmaild
id -g qmaild
でqmaildのユーザーIDとグループIDを確認しておきます。メモしておくこと。
★ ここはAPOPでなく、popだけを使う為の手順を以前に書いたものですが不要になりました。読み飛ばして下さい。
qmail-pop3dそのものはqmailと一緒にインストールされるらしいので、あとはパスワードが使える様にするモジュールのセットアップに進みます。
それはcheckpasswordで、早速インストールします。
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
これをブラウザでダウンロードして使いました。
$ tar xzvf checkpassword-0.90.tar.gz
$ cd checkpassword-0.90
$ make setup check
これでOKです。
起動は
tcpserver -HR 0 110 /var/qmail/bin/qmail-popup
ns.ayamizu.com /bin/
checkpassword /var/qmail/bin/qmail-pop3d Maildir &
こんな感じです。
クライアントからPOP3のソフトで取り出してみると取り出せるハズまたはtelnet経由で
telnet hostname 110
trying xxxxxxxx
Connected to host ・・・
+OK
などというセッションが確認できればOK
最後はquitで止めます。
比較的簡単です。
以上、蛇足でした
★pop before smtpを実装させる
SMTPは許可されたクライアント以外はリレーをさせないようにしなくてはいけません。
ここでは pop before smtp を実装させます。
これは、POP (APOP)をパスワードを使って行い、その際、認証されたクライアントだけをSMTPで許すものです。
認証されたクライアントを /var/spool/relay-ctrlというディレクトリに書き出して、SMTPのリレー転送許可をだしてあげよう、そういう仕掛けです。
15分後にその許可のデータは削除されます。
http://untroubled.org/relay-ctrl/
ここからrelay-ctrlをダウンロードしますが、資料の豊富なバージョンの2.5はもう手に入りませんでした。
従いまして資料のない3.0をダウンロードします。この英語のページをじっくり読んで進めます。
と思っていましたが、途中でこちらのサイトがみつかり、参考にさせて頂きました。
http://www.itboost.co.jp/inst/inst_29.php
まずdaemontoolsが必要ですので
http://untroubled.org/rpms/daemontools/
からダウンロードします。解凍してインストールです。
tar xvzf daemontools-0.70.tar.gz
cd daemontools-0.70
make
make setup check
但しエラー make ***[taiなんとか
が表示されて止まる場合は次のように修正します。
tai64nlocalc.cの #include<sys/time.h>を#include<time.h>と書き換えます。
※reral-ctrlはこの時点では3.0で書いてますが、どんどんマイナーUPしているみたいです。
起動コマンドで引数の追加、ディレクトリの変更などがあるみたいです。
http://untroubled.org/relay-ctrl/こちらの英文の説明でもじっくりながめればわかりますので、私の文と照らし合わせて頑張ってみてください。
次にrelay-ctrlを解凍してインストールします
tar xvfz relay-ctrl-3.0.tar.gz
cd relay-ctrl-3.0
make
./installer
パーミッションを変更しておきます。
chmod u+s /usr/local/bin/relay-ctrl-allow
relay-ctrl に必須なパスなどを作ります
mkdir /etc/relay-ctrl
mkdir /var/spool/relay-ctrl
echo "/var/spool/relay-ctrl"> /etc/relay-ctrl/RELAY_CTRL_DIR
一定時間(1分)でアカウントをクリーンナップする為にcrondにセットします。
crontab -eを起動して次の行を書きます
* * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
これで1分ごとに期限切れのデータを消しに行きます。
でもログがcronだらけになってじゃまなので
*/10 * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
こういう風に10分おきに実施してもぜんぜんだいじょうぶです。
★起動スクリプトのセット
私は起動スクリプトを qmail 本体、pop、smtpのファイルに分けて設定しています。
停止スクリプトは用意していません。
3つを紹介します。
【本体
/etc/rc.d/init.d/qmail
#!/bin/sh
csh -cf '/var/qmail/rc &'
【POP
/etc/rc.d/init.d/qmail-pop
#!/bin/sh
/usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/tcpserver -HR 0 110 /var/qmail/
bin/qmail-popup ns.ayamizu.com /bin/selectcheckpw
/usr/local/bin/relay-ctrl-allo
w /var/qmail/bin/qmail-pop3d Maildir &
【SMTP
/etc/rc.d/init.d/qmail-smtp
#!/bin/sh
/usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/tcpserver -HR -u 502
-g 502
0 25 /usr/local/bin/relay-ctrl-check /var/qmail/bin/qmail-smtpd &
色の変っているところはご自分の環境に合わせてくださいね。
次に自動起動させる為のシンボリックを /etc/rc.d/rc3.d/以下に貼って、パーミッションをセットします。
turbo7以降は /rc.d/は不要です。
シンボリックを張る
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S80qmail
ln -s /etc/rc.d/init.d/qmail-pop /etc/rc.d/rc3.d/S81qmail-pop
ln -s /etc/rc.d/init.d/qmail-smtp /etc/rc.d/rc3.d/S82qmail-smtp
パーミッションを変更
chmod +x /etc/rc.d/rc3.d/S80qmail
chmod +x /etc/rc.d/rc3.d/S81qmail-pop
chmod +x /etc/rc.d/rc3.d/S82qmail-smtp
以上でqmailが稼動します。
★メールパスワードのセット(メールユーザーに対する)
必須項目です。必ず実施してください。
各ユーザーディレクトリ下の/Maildir/以下に.passwordファイルを作ります。
かくユーザーでログインしてから作ればそれはそれで良し、rootからでも良し。その場合はownerを変更します。rootからセットする手順を書きます。
例として、ユーザ / パスワードを aaaa/pppp
とします
# touch /home/aaaa/Maildir/.password
# echo pppp > /home/aaaa/Maildir/.password
# chmod 600 /home/aaaa/Maildir/.password
# chown -R aaaa /home/aaaa/Maildir/.password
わかりますね /home/aaaa/Maildir/.password これをそのユーザーのパーミッションで作っておけばOKなんですね。
chmod 600 /home/aaa/Maildir/.password
これは必須です。
644とか余分なものがついているとどうもうまく動作してくれません。
これでAPOPはOKです。
なお、POPで受信する際もこのパスワードファイルが読込まれます。
完璧!
Last Update 2002.7.30
qmailインストールに関する参考書籍
TurboLinuxServer6.5 サーバー構築ブック 株)メルコテクノスクール 堀口幹友氏著 ASCII
インストールにパッケージCDをつかわせていただきました。
はじめての TurboLinux7Server サーバー構築術 本松慎一郎氏著 秀和システム
インストールにパッケージCDをつかわせていただきました。
qmailで作る快適メールサーバー 濱野賢一郎氏/佐藤文優氏著 秀和システム
sendmailとqmailによるLinuxメールサーバー構築ガイド 高橋隆雄氏著 エーアイ出版
qmailメールサーバーの構築 ExpertUNIX Series ASCII
※※※もとはいっしょの同じ記事だけど、最新のものはこっちに移してるからそれをみてね。それが最新情報です。
Turbo Linux Server 6.5 を使っている間は全く問題なく使ってきたのですが、そのマシンが不調になりまして
Turbo Linux 7 Serverに移りました。
すると、環境の違いは多少なりありますが、遅くなったところが大きく2つ。
1)Apache をローカルから開く時
2)メールへのログイン
Apacheのローカルログインが遅いのはホスト解析の為だと言うことは動作から想像できます。
外部からはちゃんと普通に使えますから。
じゃあその場合、手っ取り早く /etc/hosts にクライアントの名前を登録してしまえば良いのです。
クライアントのIPを
10.0.0.200 client_no_1
とか書いておけばそれは解決します。
さて、問題はメールへのログインです。
私はtcpserver経由でpop before smtpを使っているのでその辺をいろいろと試してみました。
諸般の説明ではtcpserverがホスト名を調べる為に時間がかかってしまうという説明を見かけます。
tcpserverのタイムアウトには26秒で、それを回避するには-HRオプションをつけて起動させると良いと。
同様の事は私の過去の記録に触れています。ここにあるよ
とうぜんその設定をしてある上で認証が遅れているので、別の要因です。
そして待ち時間は1.5〜2分と、とても長い。
さて、結論から言いますと、サーバーが自分の名前を引こうとしているのです。
私の場合は 10.0.0.100 というサーバーです。これを名前解決しようったってそうはいきません。
通常ならhostsを見て解決してくれるべきなのです。Apacheはちゃんと見てくれたのですが、tcpserverは見てくれないのでしょうか?
host.confでもちゃんとhostsから見るように指定してあるのに・・・・・
見てくれないなら、bindに登録してしまえ!!
ということで
/etc/named.conf にはこんな感じで逆引きzoneを書き加えます。 zone "0.0.10.in-addr.arpa" { type master; file "named.me"; }; 192.168.0.1の場合なら zone "0.168.192.in-addr.arpa"{ って感じですね。 そしたらzoneファイル次のように作ります /var/named/named.me $TTL 86400 @ IN SOA localhost. root.localhost. ( 20030408 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 100 IN PTR localhost.
100の数字は各自のサーバーのIPの最後の8ビットを入れてくださいね。
これで /etc/init.d/named restart
をかければホスト自身の逆引きはOKになるハズ。
私はこれで快調 快調・・・
遅れましたが、メールサーバーを立ててる訳だからbindは有りますよね?
Last Update 2003.4.8