2009年8月31日月曜日

Dovecotでmail Server

[したいこと・しりたいこと]
[目標]
Dovecotでmail Server

[環境]
Ubuntu Jaunty Jackalope 9.04
USB 104Key (US)

[前提]
bind, postfix導入済み

KRAKENBEAL RECORD: ubuntuでbind9を設定ver2
http://krakenbeal.blogspot.com/2009/08/ubuntubind9ver2.html

KRAKENBEAL RECORD: postfix で mail server を立てる
http://krakenbeal.blogspot.com/2009/08/postfix-mail-server.html



[したこと]

(1)インストール

$ sudo apt-get install dovecot-common dovecot-pop3d dovecot-imapd 

(2)クライアントの設定

受信メールサーバー POP3
保護された接続sslを使javascript:void(0)用する
port 995

2009年8月30日日曜日

postfix で mail server を立てる

[したいこと・しりたいこと]
postfixでメールサーバーを立てる

[環境]
Ubuntu Hardy 9.04
username:user01
USB 104Key (US)

[前提]
bind9のインストールと設定済み





[したこと]

(1) インストール
postfix

$ sudo apt-get install postfix

internet を選択

System mail name: example.localnet


(2) main.cf の編集

$ sudo vi /etc/postfix/main.cf @ local ver


# ".domain"情報のないアドレスに文字列 ".$myorigin" を付加しない。
append_dot_mydomain = no

# ホスト名の設定する。
myhostname = mail.example.localnet

# ドメインの無いアドレスに付加する値の設定 する。
myorigin = /etc/mailname

# ローカル配送するドメインを指定する。
mydestination = example.localnet, localhost, localhost.localdomain, localhost

# メール中継が可能な IP アドレスを制限する。
mynetworks = 192.168.0.0/24, 127.0.0.0/8

# メールボックスファイルの最大サイズ(単位は bye。 0 は無制限)を指定する。
mailbox_size_limit = 0

# 送信メールの最大サイズ(単位は byte。 0 は無制限)を指定する。
message_size_limit = 33554432 #10240000

# ヘッダをチェックするファイルの場所を指定する。
header_checks = regexp:/etc/postfix/header_checks

# この2つに「 no 」を指定すると何でもかんでも転送拒否する。
allow_percent_hack = yes
swap_bangpath = yes

# ソース・ルート形式で指定されている宛先メールアドレスを拒否する。
allow_untrusted_routing = no

#VRFYコマンドを使用不可にし、アドレス漏えいを防ぐ。
disable_vrfy_command = yes

#SMTP の ETRN コマンドの使用を制御する。
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname

#Postfix サーバへの接続の許可/拒否を指定する。
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit

#接続相手にHELOを要求する。
smtpd_helo_required = yes

#HELOで間違った文法のホスト名がある接続を拒否する。
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_client, permit

#RFC821 で定義されている書式に適合しないメールアドレスが通知された場合、受信を拒否する。
strict_rfc821_envelopes = yes

#MAIL FROMコマンドで通知されるアドレスのドメインが存在しない場合拒否する。
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch

#逆引き出来ない接続を拒否
smtpd_client_restrictions = permit_mynetworks , reject_unknown_client , permit

#RCPT TO コマンドで通知されるアドレスのドメインが存在しない場合拒否する。
smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, check_relay_domains



(3)ヘッダーチェックファイルの作成

$ sudo vi /etc/postfix/header_checks

#メールヘッダに「192.168.*.*」又は「127.0.0.1」を含む行を削除する。
/^Received:.*192.168..*/ IGNORE
/^Received:.*127.0.0.1.*/ IGNORE


(4)postfix の main.cf ファイルの 文法チェック

$ sudo /etc/init.d/postfix check



(5) 再起動

$ sudo /etc/init.d/postfix restart

エラーの場合
error
postfix/postfix-script: warnig: not owned by postfix: /var/lib/postfix ./master.loc

ファイルのアクセス権限変更

$sudo chown -R postfix /var/lib/postfix

(6) 起動チェック
$ ps aux | grep postfix



(7)ユーザー設定

書式
`postfix_user_name`: `unix_user_name`

$ sudo vi /etc/ailiases

user01: user01
user02: user02


(8)ユーザー宛に送る

echo "メールの内容" | mail -s "題名" メールアドレス
とタイプする

送りたいユーザーのメールアドレスがuser01@example.localnetと仮定した場合

$ echo "This is postfix test1" | mail -s test user01
$ echo "This is postfix test2" | mail -s test user01@example.localnet
$ echo "This is postfix test3" | mail -s "mail subject" user01@example.localnet

(9)送れているか確認。

コマンドライン メールクライアントの導入
$ sudo apt-get install mailutils

実行
$ mail

3通届いているはずなので、読みたいメールの番号をタイプ

1とタイプすると
"This is postfix test1"というメールのヘッダーから表示される


メール送信キューが 空か確認

$mailq
Mail queue is empty なら ok

キュー内のメールを再度送信するコマンドは

$ sudo sendmail -q

どうしてもエラーが出て送れないメールをキューから削除するには、

$ sudo postsuper -d (キューID)

全部削除する場合は、

$ sudo postsuper -d ALL



[注意]

※postfixが起動しない

起動チェック
ps aux | grep postfix


$ sudo /etc/init.d/postfix start

エラーの場合
error
postfix/postfix-script: warnig: not owned by postfix: /var/lib/postfix ./master.loc

ファイルのアクセス権限変更

$sudo chown -R postfix /var/lib/postfix



[参考]

Postfix (SMTPサーバー)/Ubuntu 8.04
http://www.shitomi.jp/ubuntu804/postfix.html


Postfix (SMTPサーバー)/Ubuntu 8.04
http://www.shitomi.jp/ubuntu804/postfix.html

Ubuntu/postfix@ローカル - TOBY SOFT wiki
http://tobysoft.net/wiki/index.php?Ubuntu%2Fpostfix%40%A5%ED%A1%BC%A5%AB%A5%EB

Ubuntu Sever Edition を使ったサーバ構築のメモ
http://www.kazutoyo.com/ubuntu/


ntpで自動時刻あわせ

[したいこと・しりたいこと]
NTPで自動時刻合わせ

[環境]
Ubuntu Jaunty Jackalope 9.04
USB 104Key (US)



[したこと]


1.インストール
$ sudo apt-get install ntp

2.NTPサーバーの設定
$ sudo vi /etc/ntp.conf

# コメントアウト
#server ntp.ubuntu.com
# 追加
server ntp.ring.gr.jp
server ntp.nict.jp
server ntp.jst.mfeed.ad.jp

3.NTPの再起動
$ sudo /etc/init.d/ntp restart

4.手動で時刻合わせ
$ sudo ntpdate -b ring.gr.jp

5.動作確認
$ sudo ntpq -p

[注意]
※ error Name or service not known

$ ntpq -p

Name or service not known

(1)/etc/hostsにlocalhostのアドレスの記録されていない
/etc/hosts
127.0.0.1 localhost localhost.loopback

(2)nsswitch.confのhostsの指定に /etc/hostsを見るように書かれていない
/etc/nsswitch.conf

hosts dns
hosts dns [NOTFOUND==continue] files

Ubuntu で NTP時刻合わせ
http://www.kotodama.jp/blog/index.php/2008/03/18/ubuntu-ntp

IT Resource Center forums - ntpq -p "Name or service not known"
http://forums13.itrc.hp.com/service/forums/questionanswer.do?admit=109447627+1251630066509+28353475&threadId=985154

ubuntuでbind9を設定ver2

[したいこと・しりたいこと]

[環境]
Ubuntu Jaunty Jackalope 9.04 Server ver
username:user01
USB 104Key (US)
インストール時にホストネームをpc-serverと指定した
インストール時にIPアドレスを192.168.0.2と指定した

ISPから配布されたDNSアドレス
123.45.67.89;
123.45.67.90;

一目でローカルテスト用とわかるテストドメイン名
example.localnet

接続ホスト名とIP一覧
defaultgateway:1291.68.0.1
pc-server:192.168.0.2
pc3:192.168.0.3
pc4:192.168.0.4
pc5:192.168.0.5

接続ホスト名と役割一覧
defaultgateway:Buffaloのルーター
pc-server:Ubuntu(仮想マシン)
pc3:Ubuntu(pc-serverのホストマシン)
pc4:クライアント1号
pc5:クライアント2号



[したこと]

(0)
ネットワークアドレスとドメインの確認
ifconfig
ipとethアダプターの確認



1. BIND9のインストール

$ sudo apt-get install bind9




2.ホスト名とドメインの確認と修正
/etc/hostsの修正

$ sudo vi /etc/hosts

変更前
127.0.0.1 localhost
127.0.1.1 pc-server

変更後
127.0.0.1 localhost localhost.loopback
127.0.1.1 pc-server
192.168.0.2 pc-server pc-server.example.localnet



3.名前解決の手段の確認と変更

$ sudo vi /etc/nsswitch.conf

host:の行の先頭に dnsを挿入する
#hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 //desktop ver
#hosts: file dns //server ver
hosts: dns





4. named.conf.optionsの編集

/etc/bind/named.confは変更しない方針


(1)全体に関与するオプションの指定

$ sudo vi /etc/bind/named.conf.options

内部で解決できないアドレスを調べにいくDNSを指定するため、以下の様にコメントアウトされた部分を、

// forwarders {
// 0.0.0.0;
// };

次のように修正し、

forwarders {
123.45.67.89;
123.45.67.90;
};

auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
上記の下にLAN内部のPCだけが参照できるように下記の内容を追記する

allow-query {
127.0.0.0/8;
192.168.0.0/24;
192.168.1.0/24;
};




5. named.conf.localの編集

/etc/bind/named.confは変更しない方針

このDNSサーバーが解決できるホスト名とIPアドレスの組み合わせ辞書の場所の指定

$ sudo vi /etc/bind/named.conf.local

次の内容を追加


// example.localnetのゾーン情報
zone "example.localnet" {
type master;
// example.localの正引きデ-タベースファイル名
file "/etc/bind/db.localnet";
};

// 192.168.0のゾーン情報
zone "0.168.192.in-addr.arpa" {
type master;
// 192.168.0の逆引きデ-タベースファイル名
file "/etc/bind/db.192.168.0";
};


// loopbackのゾーン情報
zone "loopback" {
type master;
// loopbackの正引きデ-タベースファイル名
file "/etc/bind/db.loopback";
};

// 127.0.0のゾーン情報
zone "0.0.127.in-addr.arpa" {
type master;
// 127.0.0の逆引きデ-タベースファイル名
file "/etc/bind/db.127.0.0";
};

//
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1
allow { 127.0.0.1; }
keys { rndc-key; };
};


6.1 LANに接続している各マシンのホスト名とIPアドレスの対応表(正引き用)を作る
example.localのゾーン情報 (正引き用)を作る
(1)
$ sudo vi /etc/bind/db.localnet

;
; BIND data file for example.localnet
;
$TTL 86400
@ IN SOA ns.example.localnet. root.ns.example.localnet. (
2009010401 ; Serial
8H ; Refresh 28800
4H ; Retry 14400
3D ; Expire 259200
1D ) ; Negative Cache TTL 86400
IN NS ns.example.localnet.
IN A 192.168.0.2
IN MX 10 mail
mail IN A 192.168.0.2
www IN A 192.168.0.2
ftp IN A 192.168.0.2
ns IN A 192.168.0.2
pc-server CNAME ns.example.localnet.
;
defaultgateway IN A 192.168.0.1
pc3 IN A 192.168.0.3
pc4 IN A 192.168.0.4
pc5 IN A 192.168.0.5


6.2 LANに接続している各マシンのホスト名とIPアドレスの対応表(逆引き用)を作る
example.localのゾーン情報 (逆引き用)を作る

$ sudo vi /etc/bind/db.192.168.0

;
; BIND data file for example.localnet
;
$TTL 86400
@ IN SOA ns.example.localnet. root.ns.example.localnet. (
2009010401 ; Serial
8H ; Refresh 28800
4H ; Retry 14400
3D ; Expire 259200
1D ) ; Negative Cache TTL 86400
IN NS ns.example.localnet. ;check domain_name
2 IN PTR ns.example.localnet. ;check machine_name & domain_name
;
1 IN PTR defaultgateway. ;check machine_name & address
3 IN PTR pc3. ;check machine_name & address
4 IN PTR pc4. ;check machine_name & address
5 IN PTR pc5. ;check machine_name & address


7.1 loopbackに接続しているマシンのホスト名とIPアドレスの対応表(正引き用)を作る
loopbackのゾーン情報 (正引き用)を作る

$ sudo vi /etc/bind/db.loopback

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA loopback. root.loopback. (
2009010401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS loopback.
@ IN A 127.0.0.1
@ IN AAAA ::1
localhost IN A 127.0.0.1


7.2 loopbackに接続しているマシンのホスト名とIPアドレスの対応表(逆引き用)を作る
loopbackのゾーン情報 (逆引き用)を作る

$ sudo vi /etc/bind/db.127.0.0

;
; BIND reverse data file for loopback interface
;
$TTL 604800
@ IN SOA loopback. root.loopback. (
2009010401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS loopback.
1 IN PTR localhost.




8. 作成したゾーンファイルの検証
$ named-checkzone example.localnet /etc/bind/db.localnet
$ named-checkzone example.localnet /etc/bind/db.192.168.0
$ named-checkzone 127.0.0.1 /etc/bind/db.loopback
$ named-checkzone 127.0.0.1 /etc/bind/db.127.0.0

9.resolv.confの確認と修正

# sudo vi /etc/resolf.conf

nameserverにpc-serverのアドレスを指定する
nameserver 192.168.0.2


**********************
注意 network-manager を有効にしている場合は そちらで設定すること
注意 そうじゃないと 起動のたびに resolv.confの内容が network-managerで書き換えられる模様
**********************

変更後
#nameserver 123.45.67.89
#nameserver 123.45.67.90
nameserver 192.168.0.2


10. 再起動

$ sudo reboot



11. 確認

$ dig example.localnet
$ dig pc-server.example.localnet
$ dig pc-server.example.localnet MX
$ dig pc5.example.localnet
$ dig @pc-server.example.localnet example.localnet mx
$ dig @pc-server.example.localnet example.localnet soa
$ dig @pc-server.example.localnet pc5.example.localnet
$ dig @127.0.0.1 example.localnet mx

$ nslookup pc-server.example.localnet
$ nslookup pc3.example.localnet
$ nslookup pc5.example.localnet
$ nslookup 192.168.0.2
$ nslookup 192.168.0.5
$ nslookup localhost
$ nslookup 127.0.0.1

[注意]


※ $ sudo /etc/init.d/bind9 restartが失敗して[fail]になる場合

(1)
named.conf.optionsまたはnamed.conf.localが書き間違っている場合
;が抜けている
全角空白、全角スペースは見た目ではわからないので注意

(2)
// 127.0.0のゾーン情報その1
zone "0.0.127.in-addr.arpa" {
type master;
file "/etc/bind/loopback.rev";
};

// 127.0.0のゾーン情報その2
zone "0.0.127.in-addr.arpa" {
type master;
file "/etc/bind/db.127.0.0";
};


のようにzone情報が、ぶつかっている場合




※nslookupでは名前解決できるがFireFoxで名前解決できない場合

(1)
nsswitch.conf
/etc/nsswitch.conf の hosts: 行を確認

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

hosts: dns
に変更する





(2)
network-managerとresolv.conf側の問題
(2-a)
resolf.confの内容が間違っている
(2-b)
network-managerが有効になっているのに、resolv.confで設定している
そのため、起動するたびにnetwork-managerが resolv.confを書き換えている



※ 正引きできない

(1)
$ named-checkzone がokと帰ってきたか?

(2)
/etc/hostsの記述違いはないか ?

誤)
192.168.0.2 pc-server pc-server.example.localnet
正)
192.168.0.2 pc-server example.localnet

誤)
192.168.0.2 pc-server .example.local
正)
192.168.0.2 pc-server example.localnet

誤)
192.168.0.2 pc-server localnet
正)
192.168.0.2 pc-server example.localnet

(3)
/etc/bind/db.localnet /etc/bindnamed.conf.local /etc/hosts の3つのファイルの確認
192.168.0.2 example.localnet の組み合わせを書く所に記述ミスはないか?






[参考]


最小限の設定でDNSを使う - adsaria mood
http://d.hatena.ne.jp/adsaria/20090131/1233383628

BIND (DNSサーバー)/Ubuntu 8.04
http://www.shitomi.jp/ubuntu804/bind.html

http://www.atmarkit.co.jp/flinux/rensai/bind915/bind915b.html

@IT:すべての基礎、マスター・ゾーンサーバの設定(2/3)
http://www.atmarkit.co.jp/flinux/rensai/bind902/bind902b.html

@IT:BIND 9のチューニングと大規模運用(2/2)
http://www.atmarkit.co.jp/flinux/rensai/bind911/bind911b.html


最小限の設定でDNSを使う - adsaria mood
http://d.hatena.ne.jp/adsaria/20090131/1233383628