2009年06月13日

Fedora6 Postfixとdovecotでメールサーバ構築

 いよいよ鬼門のメールサーバ構築です。

手順としては、Postfix~dovecot の順にインストール、動作検証を行い、最終的には別のPCのメールソフトでメールの送受信を行うところまで行きます。

・Postfix(送信側)の設定

同様の働きをするsendomailを停止。
PostfixをCDROMよりインストール。
alternativesコマンドで、sendmail環境からPostfixへ移行。

※この時点で、ホスト名をlinux.workgroupに変更しました。
そのため、DNS関連ファイル(named.confおよび正逆ゾーンファイル)およびhttpd.confの書き換えを実施しています。

/etc/postfix/main.cf の変更点は、
myhostname、mydomain、myoriginの設定と有効化
inet_interfaces = all を有効にし、= localhost を無効化
mydestination 、mynetworks の設定
となります。

Postfixを起動、chkconfig on の後、コンソール上でメール送信のテスト。とりあえずうまく行きました。

・dovecot(受信側)の設定

perlとMysqlをインストール。
dovecotをインストール。
/etc/dovecot.conf にて、protocols = imap pop3 を設定。
default_mail_env = maildir:~/Maildir を設定。

この状態でWinのOutlookExpressから、任意のユーザー名で自身へのメール送信を実施したところ、送信は問題ないが受信が出来ませんでした。
コンソールでのmailコマンドでは受信メールを読むことが出来る状態なので、確かに送信は大丈夫なようです。

maillogを見ると、
Jun 13 11:57:21 linux dovecot: pop3-login: Login: user=<ユーザー名>, method=PLAIN, rip=::ffff:192.168.1.2, lip=::ffff:192.168.1.3

Jun 13 11:57:21 linux dovecot: POP3(ユーザー名): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

とあり、接続が直ちに切られているようです。

この時点で疑うべきところがたくさんありました。
・Postfix、dovecotのconfファイルの設定ミス
・DNSの設定間違い
・ユーザー作成時のミス
など。

Postfix、dovecotのconfファイルについては、詳しく解説されたWebページを回っていろいろ試しましたが、結局元の状態に戻しました。

DNSについては、ゾーンファイルを何度も確認し、現状の設定と矛盾がないと考えられるところまで追い込みました。(ホントはそれが当たり前なんだけどね〜)

ユーザーについては、dovecotをインストールする前にMysqlを入れた、ということは、Mysqlインストール前のユーザーはdovecotでは認識されないのでは?などど考え(ないない)、新規ユーザーを作り、そのアカウントでメール送受信を実施したりしました。

これらの作業を実施しても、状況は変わらず。
10時ごろから作業を始めて、もう17時過ぎてます。もう全然ダメじゃん!
もうあかん、と思い、このメールサービスをインストールしなおすことにしました。
デーモン自体に問題ないことは承知でしたが、気分転換のためです。
rpm -e でアンインストールの後、再度インストール。

でconfファイルを設定しなおしている途中、main.cfに気になる部分を発見。

# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user.  Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/

dovecotの方で、メールボックスの形式をMaildirに設定しているのに、Postfixは未設定。
ググッてみたところ、
「Postfix がメールをローカルユーザに配送する際、デフォルト状態では「/var/mail/ユーザ名」ファイルに mbox 形式でメールを追加する」

だそうで、メールボックスの形式がSMTP側とPOP側で異なっていたことが原因のようです。

#home_mailbox = Maildir/ の#を消して有効化、dovecotのリスタートの後、OutlookExpressでのメール送受信を確認しました。

Maildirについては、手持ちのテキストには書かれていなかったんですが、サーバの場合、ユーザーごとにメール管理できた方がよいと考えて設定をプラスしたんですが、それが仇になった格好です。

一息ついた後、あちこち回って見ました。
「Mailbox形式だと、1人のユーザー宛のメールは全て1つのファイルに格納される為、
ファイルが壊れると全てのメールが読めなくなる可能性があります。
しかしMaildir形式では、ファイルが壊れても1通のメールが読めなくなるだけで被害を最小限に抑える事が可能です。

また、Mailbox形式の場合、あるユーザーのメールでディレクトリが一杯になると、他のユーザーのメールが配送できなくなる可能性があります。
しかしMaildirならば、ユーザーのホームディレクトリに容量制限(quota)で制限をかけてしまえば事前に被害を防ぐ事が可能です。」

との文章もあり、やはり現状ではMaildir形式 > Mailbox形式と思われます。

Mailboxについては、各ユーザのホームフォルダ直下にMaildirフォルダが作成されていることを確認しました。

それと、メールソフト(OutlookExpress)でのアカウント設定時のサーバアドレスですが、IPアドレス式(画像)でもホスト名(画像)でもアクセス成功、DNSの問題もクリアしたようです。

以上、作業完了を確認したのが21:26と、大変苦労しましたが、愚者は経験から学ぶ、ということで、まあいいんじゃないでしょうか。
メールサイズの設定とか、送信時のセキュリティを高める設定とか、時間があればもうちょっと詰めたかったんですが、今日はもう無理です。勘弁してください(T_T)


最後に、なんですが、maillog確認中に
linux postfix/local[2377]: warning: host not found: localhost
linux postfix/smtpd[2848]: warning: 127.0.0.1: hostname localhost verification failed: Name or service not known

というログが何度も吐き出されていました。
これは/etc/hosts に、localhostの定義を追記し、解決しています。



※6/14追記
ここまでの設定はSELinuxをOFFにした状態で行いました。
本日SELinuxを有効化し、Winでメールソフトを立ち上げたところ、メールサーバアドレスをホスト名にしたアカウントが通信不能になりました。
dovecot、Postfix、namedのSELinux保護を無効化しましたが変わらず。SELinuxを停止しても変わりませんでした。
ひょっとするとnamedの設定変更時、たまたまメーラーでの正引きがうまくいってたのを上書き、再読み込みせずに動作検証し成功、しかしサーバを再起動したために設定が変更され、正引きが動作しなくなった、とかでしょうか。

ちょっと気になりますが、今回はこのまま〆にします。


posted by nambei-x at 22:46| Comment(0) | TrackBack(0) | Linux学習帳 - Fedora Core | このブログの読者になる | 更新情報をチェックする

2009年06月12日

Fedora6 vsftpdでFTPサーバ構築

さて、次はFTPです。

FTPサーバを動かし、クライアントからWeb用のファイルをアップロード、それをApacheでLAN内に公開する、という手順です。

まず、CDROMからvsftpdをインストール。
hosts.allowファイルにローカルからのアクセス許可を記述。
同時にSELinuxでも許可設定を行い、他のサービスと同様、サービスの立ち上げ、PC起動時にサービスも起動する設定を実施しました。

コマンドプロンプトからFTPサーバへのアクセスを確認。(画像
FTPの場合、rootでの接続は許可されていないようなので、別のユーザーとしてFFFTPを起動し、homeディレクトリへアクセス。
以前職業訓練校の課題として作成したHPのデータをアップロードし、またrootに復帰してそのデータをApacheのドキュメントディレクトリへ移動。

意気揚々とWin機からブラウザでアクセスしたところ・・・、見事な文字化けです(^_^;)。(画像
これはApacheの設定の問題で、デフォルトだと文字セットがUTF-8に、明示的に設定されているため、とのことで、この設定を無効にします。

AddDefaultCharset UTF-8 の行の頭に # を入力、コメント状態(無効)にして、日本語表示を確認しました。
(#AddDefaultCharset UTF-8 です。)



ここでFTPに戻りますが、vsftpd.confその他を全然いじっていませんので、この時点ではセキュリティが大甘です。
FFFTPでも、ルートディレクトリが丸見え!(画像

今使っているテキストには、FTPについてはあまり丁寧に書かれておらず、Anonymousが有効になっていますし、ftpusers の説明程度で、各ユーザのhomeより上にアクセスさせない設定も書かれていません。

そこでWebを探し、「Red Hat Linux 9によるサーバ構築」というページの
「3.2.2.6.FTPサーバ〜vsftpd」の項を参考にさせていただき、
vsftpd.conf の設定変更、user_list への追記、chroot_list の作成を行いました。

まず、vsfpd.conf で、
anonymousの禁止
Asciiモードでのアップ/ダウンロードの許可
日本標準時間を使用する設定
に変更。

またchroot_list を有効にし、リスト上のユーザーが自らのhomeディレクトリより上に行かないようにしました。

現在、root以外に4ユーザーが存在しているんですが、このうちの1つをchroot_listに記載、動作の違いを確認することにしました。

さらにuser_listにて、FTPでのアクセス可能なユーザーを明示。
確認のため、1ユーザーはuser_listに載せないことにしました。
(ftpusersの方は、記載されたユーザーはアクセスできない、ということみたいで、それ以外は許可、ということになるんでしょうか・・・?)

この4つのファイルが絡み合っているせいか、何度も失敗しましたが、どうにかアクセス可能な設定をしたユーザーについては、すべて設定どおりのアクセスが出来ました。

1.Anonymous接続   不可
2.user_listに明示されないユーザーの接続  不可
3.chroot_list上のユーザー   homeより上のディレクトリへのアクセス不可

3.については、FFFTPのアドレスバーにて確認できます。

  chroot_listユーザーの接続状況

  未設定ユーザの接続状況

ということで、一応、Mission Completed でいいんじゃないですかね!

確認点:
vsftpd.conf user_list ftpuser chroot_list
いずれも、/etc/vsfpd/ 内に置く。

動作から、アクセスリストとしての強さは
user_list > ftpuser と思われる。


posted by nambei-x at 23:11| Comment(0) | TrackBack(0) | Linux学習帳 - Fedora Core | このブログの読者になる | 更新情報をチェックする

Fedora6 Apacheで内部向けWebサーバ構築

作業の流れ

・準備:必要ならばhostsファイルに追記
・Apacheを起動、動作テスト
・httpd.confで設定変更
・パスワード認証のテスト


まず、linux.workgroup = 192.168.1.3 が認識されているか(DNSが有効か)を確認、認識されていない場合、/etc/hostsに両者を関連付ける行を挿入します。

記入方法:IPアドレス 正式なホスト名 ホストの別名

今回はDNSで認識されていましたが、念のためhostsに上記情報を追記しました。

次にApacheを起動。Apacheは標準でFedoraに入ってますが、デフォルトでは起動しない設定のため、手動で起動し、設定を変更します。

# /etc/rc.d/init/..d/httpd start   httpdを起動
httpd を起動中: [  OK  ]
# chkconfig httpd on       コンピュータ起動時、httpdも自動起動



ここでWindows側のDNSアドレスがLinuxのIPアドレスになっていることを確認した後、ブラウザのアドレス欄に「http://linux.workgroup」と入力、見事テストページが表示されました(よかった〜)。



Apacheのデフォルトのディレクトリ構成のうち、主なものを記載します。

/var/www/
公開用ファイルを格納するディレクトリがそれぞれの機能ごとに分かれて存在します(/html/、/cgi-bin/、/icon/ など)。

/var/log/httpd/
ログの格納場所。

/etc/httpd/conf/
httpd.confの格納場所。

テストページが表示されましたので、次に自らテストファイルを作成し、正常に見れるかを確認。
/var/www/html/test/index.html をviで作成、Winからアクセスできました。

次はhttpd.confの設定。
テキストは外部にも公開する設定になっていましたが、今回は内部のみの公開になるため、以前Win機にApacheを導入した際に作成したhttpd.confとテキストのちゃんぽんでhttpd.cdonfを書き直しました。

管理者アドレス、サーバ名のほか、127.0.0.1および192.168.1.0/24以外のアクセスを拒否する設定をしております。

Timeout 300
KeepAlive On
ServerAdmin linux@workgroup
ServerName linux.workgroup:80
DocumentRoot "/var/www/html"
<Directory />
Options None
AllowOverride None
Order Allow,Deny
Deny from All
</Directory>
<Directory "/var/www/html">
Options All
AllowOverride All
Order allow,deny
Allow from localhost
Allow from 192.168.1.0/24
</Directory>
AccessFileName .htaccess
<Files ~ "^¥.ht">
Order allow,deny
Deny from all
</Files>

認識を持って修正・設定確認したのはだいたい上記の部分になります。各種ログ排出先などは標準のままにしてあります。
ちょっと不安なのはやはりアクセスコントロールについて。

<Directory />~</Directory>

は、ルートディレクトリに対する設定、ということでいいんでしょうか。
ここですべてのアクセスを拒否、その配下の

<Directory "/var/www/html">~</Directory>

で、linux自身およびローカルネットワークからのアクセスをすべて許可、ということ?
このあたり、もう少し知識がついたら再確認は必至ですね。今後運用中に不具合が起こることも考えられなくはないです。



最後にパスワード認証の動作確認です。

htpasswd -c コマンドで、新規パスワードファイル .htpasswd を作成。
先に作った/var/www/html/test/index.htmlにアクセスすると、パスワード入力を求められ、.htpasswdのパスワードと一致しないと表示されないしくみです。

これは考え方が結構めんどくさくて、.htpasswdをrootで作成後、
.htpasswd の所有者をApacheに変更
.htpasswd の属性を600(rw-------)に変更
つまり、Apacheのみが読み書きできる、ということになる、んですかね・・・?

ls -la で変更が確認できたら、先のhttpd.confに、新たにディレクトリのアクセス権を加えます。
<Directory "/var/www/html/test">~</Directory>
ここに先と同様、アクセス許可、拒否設定などのほかに、認証タイプ、パスワードファイル(.htpasswd)の場所なども書き入れます。

んでWin機よりブラウザにてアクセス、パスワード要求画面が出ました。

設定したユーザ名(member)とパスワードを入力し、ログイン成功
「このパスワードを記憶させますか?」との文言が出ていますので、パスワードを入力してこの画面に来たことが分かります。

わざと失敗し、キャンセルを押すとこういう画面です。ルータの認証失敗時なんかに見られる画面です。



追記ですが、httpd.confの管理者メールアドレスを「linux@workgroup」に設定しましたので、BIND用の正引き、逆引きゾーンファイル内のメールアドレスも変更しました。named再起動後、正常動作しております。



追記2:
Apacheのエラーログから、認証失敗部分を抜き出して貼ってみました。
[error] [client 192.168.1.2] user member: authentication failure for "/test": Password Mismatch

[error] [client 192.168.1.2] user uuuuu not found: /test

上はパスワード入力ミス、下はユーザ名を間違えた場合です。分かりやすいですね(^^)。


6/13追記:
メールサーバ構築の作業時、管理者メールアドレスを
root@linux.workgroup
に変更しました。


posted by nambei-x at 17:45| Comment(0) | TrackBack(0) | Linux学習帳 - Fedora Core | このブログの読者になる | 更新情報をチェックする

Fedora6 namedをchroot環境で動作させる/起動時に動作するサービスの設定変更

chroot・・・たとえばnamedの場合、named.confのもともとの場所は

/etc/named.conf ですが、

chrootをインストールすると、これが

/var/named/chroot/etc/named.conf へ移動します。

同様に、/var/named/ も

/var/named/chroot/var/named/ へ移動します。

見かけ上、/var/named/chroot/ がnamedにとってのルートディレクトリになり、たとえばnamedが外部からの攻撃を受けた際、本当のルートが攻撃されるのを防ぐのだそうです。
実体ファイルは /var/named/chroot/ 以下に移動、もともとの場所にはそれらのシンボリックリンクが作成されています。

またこれらの設定はchrootをインストールした際に自動でなされますので、正常インストール後、確認作業のみで終了です。


あと、Bindをインストールした際、起動時に自動起動する設定をし忘れていたので、ついでにchkconfig --list で自動起動の設定を確認したところ、bluetoothやisdnなど、不要と思われるサービスが立ち上がっていました。
以前GUI環境で停止させていたんですが、それが反映されたのはランレベル5のみで、同3では動作していました。参照:6月11日の記事

bluetooth  0:off 1:off 2:on 3:on 4:on 5:off 6:off
isdn      0:off 1:off 2:on 3:on 4:on 5:off 6:off

chkconfig (サービス名) on|off|reset

で設定し、再起動後named起動、bluetoothとisdnの停止を確認しました。

・namedのログ

Jun 12 09:02:27 linux named[2405]: shutting down: flushing changes
Jun 12 09:02:27 linux named[2405]: stopping command channel on 127.0.0.1#953
Jun 12 09:02:27 linux named[2405]: stopping command channel on ::1#953
Jun 12 09:02:27 linux named[2405]: no longer listening on 127.0.0.1#53
Jun 12 09:02:27 linux named[2405]: no longer listening on 192.168.1.3#53
Jun 12 09:02:27 linux named[2405]: exiting
Jun 12 09:03:30 linux named[1692]: starting BIND 9.3.2 -u named -t /var/named/chroot (注:chrootで設定したルートディレクトリと思われます。)
Jun 12 09:03:30 linux named[1692]: found 1 CPU, using 1 worker thread
Jun 12 09:03:31 linux named[1692]: loading configuration from '/etc/named.conf'
Jun 12 09:03:31 linux named[1692]: listening on IPv4 interface lo, 127.0.0.1#53
Jun 12 09:03:31 linux named[1692]: listening on IPv4 interface eth0, 192.168.1.3#53
Jun 12 09:03:31 linux named[1692]: command channel listening on 127.0.0.1#953
Jun 12 09:03:31 linux named[1692]: command channel listening on ::1#953
Jun 12 09:03:31 linux named[1692]: zone 0.in-addr.arpa/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone 0.0.127.in-addr.arpa/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone 1.168.192.in-addr.arpa/IN: loaded serial 2006110100
Jun 12 09:03:31 linux named[1692]: zone 255.in-addr.arpa/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone localdomain/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone localhost/IN: loaded serial 42
Jun 12 09:03:31 linux named[1692]: zone workgroup/IN: loaded serial 2006110100
Jun 12 09:03:31 linux named[1692]: running


posted by nambei-x at 10:01| Comment(0) | TrackBack(0) | Linux学習帳 - Fedora Core | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。