qmail : メールサーバ
- 2006.03.29
- Linux
qmailでセキュリティ安心
目的
- 1 qmailを導入する。
qmailをインストールするときにhttp://www.jp.qmail.org/q103/jinstall/install1.html(前半)とhttp://www.jp.qmail.org/q103/jinstall/install3.html(後半)とFAQを参考にして作業するとよい。
1. qmail導入の前準備
- sendmailを除去する。
●qmailがシステム起動時に起動されないようにするためにスタートアップファイルS80sendmailを無効にする。
# cd /etc/rc.d/rc3.d/
# mv S80sendmail _S80sendmail
sendmailそのものを使用されることを防ぐため、名前を変更し、更に実行権も無くしておこう。
# which sendmail
/usr/sbin/sendmail
# cd /usr/sbin/
# mv sendmail sendmail.bak
# chmod 0 sendmail.bak
ここで、再起動するが、筆者の場合MiracleLinuxを使っているので、miracleserviceと入力し実行して、エンターキー、Xキーで実行を止める。(TurboLinuxの場合、turboservice)
# miracleservice (MiracleLinuxを使っている場合のみ)
# reboot
●pop, imapサーバも起動しないようにする。(qmailはqmail用のpopサーバが付属している)
/etc/inetd.confを変更する。
# vi /etc/inetd.conf
次のようにpop-3をコメントアウトする。imapも同様。
#
# Pop and imap mail services et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
#
この新しい設定を有効にするために次のコマンドを実行する。
# killall -HUP inetd
●ダウンロード前の作業
今回はダウンロード先を自分のディレクトリにtempディレクトリを作ってそこに保存した。
# cd ~/
# mkdir temp
# cd temp
●qmailをゲットする。
http://www.jp.qmail.org/(日本語)
http://www.qmail.org/(英語)
2001年7月現在、1.0.3を以下からダウンロードした。
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-1.03.tar.gz
●パッチファイルをゲットする。
ヘッダ日付の世界標準時をローカルタイム日本時間に修正するパッチ。
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
●checkpasswordをゲットする。
パスワードチェックのプログラムで、qmailのpopが使用する。
http://cr.yp.to/checkpwd/install.html
checkpassword-0.90.tar.gzをダウンロードする。
●解凍する。
tarコマンドを使って解凍する。
tar -zxvf k
解凍したらこのようになっているはず。(自分のディレクトリにtempディレクトリを作って作業した)
# cd ~/temp
# ls
checkpassword-0.90.tar qmail-1.03.tar.gz
checkpassword-0.90/ qmail-1.03/ qmail-date-localtime.patch
●パッチを当てる。
qmailのディレクトリ内に移動して、patchコマンドを実行する。
# cd qmail-1.0.3
# patch < ../qmail-date-localtime.patch
ftpで使用する主なコマンド
ftp
open
ls
!ls
cd
pwd
bin
asc
bye
字を間違えて入力したらctl+hでバックスペースの機能を果たす。
2. qmailをインストールしよう
- qmailディレクトリを作る。
# mkdir /var/qmail
●グループnofilesとユーザの登録
- # 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
●グループqmailとユーザの登録
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
●ユーザのシェルを変更
デフォルトの/bin/bashではなく、/bin/trueに変更しよう。
# vi /etc/passwd
以下のように変更。
alias:x:507:502::/var/qmail/alias:/bin/true
qmaild:x:508:502::/var/qmail:/bin/true
qmaill:x:509:502::/var/qmail:/bin/true
qmailp:x:510:502::/var/qmail:/bin/true
qmailq:x:511:503::/var/qmail:/bin/true
qmailr:x:512:503::/var/qmail:/bin/true
qmails:x:513:503::/var/qmail:/bin/true
MEMO
Linux以外のプラットホームでのユーザ登録方法
http://www.jp.qmail.org/q103/jinstall/install.ids.html
●コンパイル&インストール
いよいよコンパイルとインストールを実行する。
qmailを解凍したディレクトリに移動する。そしてmakeコマンドを実行する。
# cd ~/temp/qmail-1.0.3
# make setup check
わらわらとメッセージが表れるので眺めていればよい。
速読のできる人以外は読めないしね(^^)
メッセージの最後は./installと./instcheckで終わっていると思う。/var/qmailをのぞくといくつかのディレクトリができているはず。
●自分のホストの名前を設定する
インストールが終わったら、やはりqmailを解凍したディレクトリでconfig-fastを実行する。
# cd ~/temp/qmail-1.0.3
# ./config-fast dns.mydomain.com
Your fully qualified host name is dns.mydomain.com.
Putting dns.mydomain.com into control/me…
Putting mydomain.com into control/defaultdomain…
Putting mydomain.com into control/plusdomain…
Putting dns.mydomain.com into control/locals…
Putting dns.mydomain.com into control/rcpthosts…
Now qmail will refuse to accept SMTP messages except to dns.mydomain.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
そして以下のようなファイルが/var/qmail/controlのディレクトリに作成されるので確認しよう。
# ls -lt /var/qmail/control
total 20
-rw-r–r– 1 root root 16 Jul 15 10:38 defaultdomain
-rw-r–r– 1 root root 20 Jul 15 10:38 locals
-rw-r–r– 1 root root 20 Jul 15 10:38 me
-rw-r–r– 1 root root 16 Jul 15 10:38 plusdomain
-rw-r–r– 1 root root 20 Jul 15 10:38 rcpthosts
なぜ自分のホスト名を手動登録したかとゆうと、ネットワークダウンでDNS検索できない状態でもローカルでメール配送できるように配慮しているからだそうだ。
●エイリアスを登録する
# cd /var/qmail/alias
# touch .qmail-postmaster
# touch .qmail-mailer-daemon
# touch .qmail-root
# chmod 644 .qmail*
●rcファイルをコピーする
/var/qmail/boot/homeを/var/qmail/にコピーする。
# cd /var/qmail/boot/
# ls
binm1* binm2* binm3* home* proc*
binm1+df* binm2+df* binm3+df* home+df* proc+df*
# cp home ../rc
これでqmailのインストールは完了。お疲れさまでした(^^)
筆者はここでコーヒータイムにしました。
3. qmailの動作確認
- ●ブートする
ブートスクリプト/var/qmail/rcを実行しよう。qmailに必要なデーモンが起動される。
# csh -cf /var/qmail/rc &
psコマンドで確認してみよう。
# ps ax
…
4477 pts/0 S 0:00 -sh -cf /var/qmail/rc
4478 pts/0 S 0:00 qmail-send
4479 pts/0 S 0:00 splogger qmail
4480 pts/0 S 0:00 qmail-lspawn ./Mailbox
4481 pts/0 S 0:00 qmail-rspawn
4482 pts/0 S 0:00 qmail-clean
…
●送信テスト
qmail-injectを手動で実行して、手動でメールを送信しよう。qmail-injectは起動するとカーソルが表示されるだけなので、そのままタイプすればよい。ユーザ名はこのホストに登録してあるもの。
# /var/qmail/bin/qmail-inject
to: kitano
test
配送されたユーザのホームディレクトリにMailboxという名前のファイルが作られる。
# ls -l /home/kitano/public_html/
-rw——- 1 kitano users 366 Jul 15 11:43 Mailbox
/etc/passwdの設定によってはログインディレクトリが違うのでチェックしておこう。筆者の場合はwebでの利用を中心としたユーザなのでpublic_htmlに設定してある。
ローカル配送が無事確認できたら、外部アドレスにメールを送信してみよう。qmail-injectを実行しても何もメッセージが現れないが、to:と入力していく。タイトルのTestを入力してリターンした後はcontrol+Dで抜ける。
# /var/qmail/bin/qmail-inject
to: y_sasaki@mac.com
Test
自分にメールを送ってみた。ちゃんと受け取れたのを確認して感動にひたった筆者であった(^^)
●受信テスト
qmailのSMTPデーモンであるqmail-smtpdを起動する。qmail-smtpdをinetdによって起動するように/etc/inetd.confを修正する。
# vi /etc/inetd.conf
次のように以前のsmtpはコメントアウトして新しい1行を追加する。
#smtp stream tcp nowait root /usr/bin/smtpd smtpd
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
修正・保存したらinetdを再起動する。
プロセス番号を調べる。
# ps ax | grep inetd
453 ? S 0:00 inetd
HUPシグナルで再起動。
# kill -HUP 453
外部からこのホスト宛にメールを送ってみよう。kitano@dns.mydomain.comに送ってみた。
受信できたかを確認しよう。
# cd /home/kitano/public_html
# vi Mailbox
下の方に今送ったメールのメッセージが書かれているはずだ。
メールログも確認しておこう。
# vi /var/log/maillog
下の方に今送信したメールアドレスなどが記録されているはず。
4. メールサーバとしての設定
- ●maildir形式を使う
mbox形式よりmaildir形式の方が安全性が高く、効率的である。よってmaildir形式に変更する作業をする。
まず、maildirを使用するユーザでログインして、
$ /var/qmail/bin/maildirmake $HOME/Maildir
$ ls $HOME/Maildir
cur/ new/ tmp/
自分のホームディレクトリにMaildirが作成され、その中に3つのディレクトリができあがる。
次にMaildirにメールを配送するように.qmailファイルを記述する。ホームディレクトリに.qmailというファイルを作り1行加える。
$ vi $HOME/.qmail
次の1行を書き込む。
./Maildir/
で保存する。
以上をユーザごとに行なえばよい。
●qmailブートスクリプトである/var/qmail/rcをこのように修正する。
# vi /var/qmail/rc
このようにMailboxをMaildirに修正する。
#!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env – PATH=”/var/qmail/bin:$PATH” \ |
修正を有効にするため、qmailのデーモンを再起動する。
# ps ax | grep qmail*
4477 ? S 0:00 -sh -cf /var/qmail/rc
4478 ? S 0:01 qmail-send
4479 ? S 0:00 splogger qmail
4480 ? S 0:00 qmail-lspawn ./Mailbox
4481 ? S 0:00 qmail-rspawn
4482 ? S 0:00 qmail-clean
# kill 4477
# csh -cf /var/qmail/rc &
最後の&を付け忘れて実行したら、ctl + cで。
●qmail-pop3dを使おう
前準備としてcheckpasswordをインストールしよう。さっき自分のホームディレクトリの下のtempディレクトリにftpしてあるので、そこに移動する。
# cd ~/temp/checkpassword-0.90
コンパイルとインストールを行なう。
# make setup check
inetd.confでqmail-pop3dを使えるようにしよう。
# vi /etc/inetd.conf
# # Pop and imap mail services et al # #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d pop-3 stream tcp nowait root /usr/sbin/tcpd /var/qmail/bin/qmail-popup dns.mydomain.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir #imap stream tcp nowait root /usr/sbin/tcpd imapd # |
dns.mydomain.comを自分のサイト名で置き換えて、必ず1行で入力する。
修正を有効にする。
# killall -HUP inetd
特定クライアントへのリレー許可とアクセス許可の設定
# vi /etc/hosts.allow
# # hosts.allow # tcp-env :127. :setenv = RELAYCLIENT
ALL :127.0.0.1 |
この設定では、
・127.(ローカル接続)はリレー許可
・192.168.0.(クライアント達)もリレー許可
・ALL(外部から)はメールを受信するけどリレーはしないよ
・ALL(外部から)、メールを読むことができるよ
このサーバが自宅から離れたところにあったとして、
・自宅からso-net等のメールでmydomain宛にメールを送信できる
・自宅からmydomainに届いたメールを読むことができる
・自宅からこのmydomainのアカウントでメールを送信できない(不正中継防止)
ことを確認しよう。
5. その他の設定
sendmailをCGIからキックすることはよくある。このsendmailコマンドが使えるようにしよう。
●qmailのsendmail wrapperを使用可能にする
シンボリックリンクを張ろう。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
/usr/libにsendmailのシンボリックリンクが存在してたら消しておこう。
-
前の記事
www検索エンジンNamazuの設置 2006.03.29
-
次の記事
php GroupWare 2006.03.29