個人や組織に割り当てられたインターネット上の(DNS的)名前。
メイルアドレスとして利用するドメイン。
@より後ろの部分。
@より前の部分。ユーザ名かエイリアス。
任意の名前をローカルパートにして、本来のアドレスに転送できる。
その名前をエイリアスという。メイルサーバ運用時には
postmaster, abuse
などのアドレスを作っておく
必要があり、それらは実際の管理者へのエイリアスにする。
必要なファイルは /files
ディレクトリにある。これを
展開してmake作業に入る。makeするための作業ディレクトリを作る。
% mkdir make % cd make
作業ディレクトリで qmail の最新ソース
netqmail-1.05.tar.gz
を展開する。
% tar zxpf /files/netqmail-1.05.tar.gz % ls netqmail-1.05/
作成されたディレクトリに移動する。
% cd netqmail-1.05 % ls COPYRIGHTS md5sums other-patches/ README netqmail-1.05.patch qmail-1.03.tar.gz collate.sh* old-patches/
一般的に README
というファイルに最初に必要な手順が
書いてあることが多い。
% less README
This is the netqmail-1.05 distribution of qmail. It is comprised of qmail-1.03 plus a patch file, some documentation, and a shell script which prepares the files for compilation. More information is available at http://qmail.org/netqmail/ To collate the sources, run ./collate.sh It will create a netqmail-1.05 directory and apply the patch. Continue the install with: http://www.lifewithqmail.org/lwq.html#installation Note that we couldn't get the Solaris version of patch to work. You will have more happiness if you download patch from www.fsf.org. If you want to verify the md5sums of the files as patch wrote them here, run 'md5sum -c md5sums'. Russ Nelson <nelson@qmail.org> Charles Cazabon <charlesc-netqmail@discworld.dyndns.org> Dave Sill <de5@sws5.ornl.gov> Peter Samuel <Peter.Samuel@gormand.com.au> Henning Brauer <henning@bsws.de>
本来はこのページを見て作業を進める。作業手順は
netqmailは、qmailの作者による最新版 qmail-1.03 にパッチを当てる形式で配付されている。
qmailはスーパーユーザ権限で動くプログラムを最小にする というポリシーで設計されている。メイル配送に必要な細かい仕事を 分担する一般ユーザをいくつか作る必要がある。
実際にコンパイルする。
である。このうち2番については「OSによる違いが大きい」、 「面倒だがコピーペーストで終わってしまう」ことから、本講座では 全員分既に完了した状態にしてある。1と3を行なう。
パッチの適用を行なうスクリプトが用意されているのでこれを起動する。
% ./collate.sh
これでプログラム全体が netqmail-1.05 相当になった。実際にプログラムを
コンパイルする。そのための手順が INSTALL.orig
ファイルに
書かれている(抜粋)。
To create /var/qmail and configure qmail (won't interfere with sendmail): 1. Create the qmail home directory: # mkdir /var/qmail 2. Read INSTALL.ids. You must set up the qmail group and the qmail users before compiling the programs. 3. Compile the programs and create the qmail directory tree: # make setup check 4. Read INSTALL.ctl and FAQ. Minimal survival command: # ./config 5. Read INSTALL.alias. Minimal survival command: # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root) # chmod 644 ~alias/.qmail*
この手順に従う。ただし、ここから先はスーパーユーザ権限が要るので ユーザを変更する。
% sudo -H -s
#
スーパユーザでコンパイルとインストールをする。
# cd netqmail-1.05 # mkdir /var/qmail # make setup check # ./config # (cd ~alias; touch .qmail-{postmaster,mailer-daemon,root} # chmod 644 ~alias/.qmail-*
最後の ./config
で各種設定ファイルを自動生成している。
すでにこれだけでも動かすのに十分な最低限の設定が終わっている。
これらの設定ファイルを見ていこう。
# head /var/qmail/control/*
==> /var/qmail/control/defaultdomain <==
is.koeki-u.ac.jp
==> /var/qmail/control/locals <==
qm200.is.koeki-u.ac.jp
==> /var/qmail/control/me <==
qm200.is.koeki-u.ac.jp
==> /var/qmail/control/plusdomain <==
ac.jp
==> /var/qmail/control/rcpthosts <==
qm200.is.koeki-u.ac.jp
defaultdomain
あまり使われる機会がない。代わりに defaulthost
を
設定する(後述)。
locals
「この」メイルサーバで受け取るべきメイルドメイン。
me
メイルサーバ自身の正式なホスト名を記述しておく。
plusdomain
新規メイルのドメイン部に + があったときに補われるドメイン名。 あまり使われる機会がない。
rcpthosts
外部からSMTP経由でやって来たメッセージの宛先が このファイルに列挙されたものであるときだけそのメッセージを受け取る。 そうでない場合は「不正リレー」として受信を拒否する。
もうひとつ、コマンドラインでメイルを送るときにデフォルトで付ける
メイルドメインを定義する。/var/qmail/control/defaulthost
に
そのホストの名前を書き込む。以下のようにする。
# hostname > /var/qmail/control/defaulthost # cat !$
これで、defaulhost
ファイルに qmXXX.is.koeki-u.ac.jp
が書き込まれる。
多くのシステムではメイルを配送するコマンドとして
Sendmailを標準的に採用している。FreeBSDも該当し/usr/bin/sendmail
を使うことになっている。sendmailではなくqmailのものを使うように変更する。
/etc/mail/mailer.conf
に「どのような処理にどのコマンドを
使うか」という定義があるのでこのファイルを書き換える。
# vi /etc/mail/mailer.conf
1行目を以下のように書き換える。
修正前
sendmail /usr/libexec/sendmail/sendmail send-mail /usr/libexec/sendmail/sendmail
修正後
sendmail /var/qmail/bin/datemail send-mail /var/qmail/bin/datemail
以上で設定ファイルの作成まで完了した。プログラムを起動するための
スクリプトを作成する。/var/qmail/boot
に起動スクリプトの見
本があるので、これをコピーしてから編集する。ファイル名は
/var/qmail/rc
とする。
# pushd /var/qmail # cp boot/home rc # vi rc
/var/qmail/rc
#!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/maildir/. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./maildir/ splogger qmail &
変更点は下線で示した部分。
実際に起動してみる。
# /var/qmail/rc # ps ax PID TT STAT TIME COMMAND 953 ?? SsJ 0:00.25 /usr/sbin/syslogd -s 7206 ?? IsJ 0:00.00 /usr/sbin/sshd 7207 ?? IsJ 0:00.02 sshd: i2006000 [priv] (sshd) 7210 ?? SJ 0:00.16 sshd: i2006000@ttyp2 (sshd) 7211 p2 SsJ 0:00.07 -zsh (zsh) 17112 p2 SJ 0:00.05 /bin/zsh 18883 p2 IJ 0:00.00 qmail-send 18884 p2 IJ 0:00.00 splogger qmail 18885 p2 IJ 0:00.00 qmail-lspawn ./maildir/ 18886 p2 IJ 0:00.00 qmail-rspawn 18887 p2 IJ 0:00.00 qmail-clean 18893 p2 R+J 0:00.00 ps ax
qmail-send のプロセスがあることを確認する。
自分宛にメイルを送ってみる。配送試験のときにはログファイルを 垂れ流し表示しておくとよい。そのためにktermをもう一枚起動しサーバマシン にログインしてメイルログを表示する。
ssh qm***.is.koeki-u.ac.jp
でサーバマシンにログイン
sudo tail -f /var/log/maillog
する
元のktermに戻り、自分(i20060XX@qm***.is.koeki-u.ac.jp) 宛にメイルを送る。次のようにすると「今月のカレンダー」が自分宛に送れる。
# cal | Mail -s calendar i20060XX
(XXは自分の番号)
以下のようなログメッセージが書かれるはずである。
Mar 6 19:33:57 qm200 qmail: 1141641237.791199 new msg 141939
Mar 6 19:33:57 qm200 qmail: 1141641237.791351 info msg 141939: bytes 387 from <root@itl.koeki-u.ac.jp> qp 19139 uid 0
Mar 6 19:33:57 qm200 qmail: 1141641237.794099 starting delivery 1: msg 141939 to local i2006000@qm200.is.koeki-u.ac.jp
Mar 6 19:33:57 qm200 qmail: 1141641237.794184 status: local 1/10 remote 0/20
Mar 6 19:33:57 qm200 qmail: 1141641237.840656 delivery 1: success: did_1+0+0/
Mar 6 19:33:57 qm200 qmail: 1141641237.840854 status: local 0/10 remote 0/20
Mar 6 19:33:57 qm200 qmail: 1141641237.841067 end msg 141939
success と出ていれば配送成功だと分かる。実際に配送されるのは
一般ユーザの ~/maildir/new
ディレクトリである。一般ユーザに
戻ってこのディレクトリを確認する。
# suspend zsh: suspended sudo -s -H % cd (ホームディレクトリに戻る) % ls -l maildir/new -rw------- 1 i2006000 471 3 6 19:33 1141641237.19142.qm200.is.koeki-u.ac.jp
実際にこのファイルを直接見て、送った内容が正しく届いているか確認する。
% less maildir/new/*
個人のメイル配送先を決めるファイルは ~/.qmail
で
その中には ./maildir/
と書かれている。qmailを初めて導入する
ホストのユーザのホームディレクトリには通常 ~/.qmail
も
~/maildir/
も存在しないので、その場合手動で作らなければなら
ない。それには一般ユーザで以下のようにする。
% /var/qmail/bin/maildirmake ~/maildir % echo ./maildir/ > ~/.qmail
外からのメイルが届くようにSMTPサーバ(qmail-smtpd
)を
起動する。そのために ucspi-tcp
というパッケージを利用する。
ucspi-tcp-0.88.tar.gz
が /files
に置いてあるので
これを展開し、コンパイルする。
% cd ~/make % tar zxpf /files/ucspi-tcp-0.88.tar.gz % ls netqmail-1.05/ ucspi-tcp-0.88/ % cd ucspi-tcp-0.88
ucspi-tcp-0.88 はmakeの事前準備としては、
インストールするディレクトリを指定するだけである。インストールするディレ
クトリは conf-home
に記述しておく。
% vi conf-home
もともと /usr/local
と書かれているのでこれを
/var/local
に変える。修正が終わったら ZZ で保存&終了す
る。
スーパーユーザに戻り、ucspi-tcp-0.88
ディレクトリに
入ってmakeする。
% fg # pwd /var/qmail # dirs 0 /var/qmail 1 /home/i2006000/make/netqmail-1.05/netqmail-1.05 # pushd /home/i2006000/make/netqmail-1.05/netqmail-1.05 /var/qmail # cd ../../ucspi-tcp-0.88 # make setup check # ls /var/local/bin addcr* finger@* mconnect-io* tcpclient* who@* argv0* fixcrio* rblsmtpd* tcprules* date@* http@* recordio* tcprulescheck* delcr* mconnect* tcpcat* tcpserver*
/var/local/bin/tcpserver
を使って qmail-smtpd
を起動する。
smtpdの起動を管理するディレクトリを新規に作成し、そこに移動する。
# mkdir /var/qmail/qmail-smtpd # cd !$
tcpserver用のアクセス制御ファイルを smtp という名前で作成する。
# vi smtp
smtp
127.0.0.1:allow,RELAYCLIENT="" 172.19.5.:allow,RELAYCLIENT="" 172.21.90.10:allow,RELAYCLIENT="" :allow
アクセス制御ファイルをバイナリ形式(smtp.cdb
)に変換する。
# PATH=/var/local/bin:$PATH # tcprules smtp.cdb tmp < smtp # ls -l total 6 -rw-r--r-- 1 root qmail 69 3 7 11:55 smtp -rw-r--r-- 1 root qmail 2166 3 7 11:56 smtp.cdb
qmail-smtpd
起動用シェルスクリプトを作成する。
# vi start-smtpd.sh
/var/qmail/qmail-smtpd/start-smtpd.sh
#!/bin/sh mydir=`dirname $0` uid=`id -u qmaild` gid=`id -g qmaild` cd $mydir exec env - \ PATH=/var/local/bin:/var/qmail/bin:/bin:/sbin:/usr/bin:/usr/sbin \ tcpserver -vR -c40 -p -u $uid -g $gid -x smtp.cdb 0 \ smtp qmail-smtpd 2>&1 | splogger qmail-smtpd &
シェルスクリプトに実行属性を付ける。
# chmod +x start-smtpd.sh
このスクリプトを起動するとSMTP(25)ポートで待ち受ける形でsmtpサーバが 上がる。起動前と起動後の待ち受け状態は netstat と telnet で確認できる。
# netstat -n -a -p tcp Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 52 172.19.5.200.22 172.21.90.10.57534 ESTABLISHED tcp4 0 0 172.19.5.200.22 *.* LISTEN # telnet localhost smtp Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused telnet: Unable to connect to remote host
# ./start-smtpd.sh # netstat -n -a -p tcp Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 172.19.5.200.25 *.* LISTEN tcp4 0 52 172.19.5.200.22 172.21.90.10.57534 ESTABLISHED tcp4 0 0 172.19.5.200.22 *.* LISTEN # telnet localhost smtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 qm200.is.koeki-u.ac.jp ESMTP quit 221 qm200.is.koeki-u.ac.jp Connection closed by foreign host.
SMTPのプロトコルコマンドについては次回実験する。
実際に外部ホスト(irsv)からメイルを送ってみる。 irsvで起動しているktermのコマンドラインからメッセージを送信する。 Mailコマンドを利用する。
irsv% Mail -s test i2006XXX@qm**.is.koeki-u.ac.jp
とどくかな届くかな。
えいやっ。
C-d
最後の行は C-d をタイプする。
リブート後にも起動するよう /etc/rc.local
を
作成する。
# vi /etc/rc.local
/etc/rc.local
# # rc.local # # Starting qmail if [ -x /var/qmail/rc ]; then /var/qmail/rc; echo -n ' qmail' fi # Starting qmail-smtpd if [ -x /var/qmail/qmail-smtpd/start-smtpd.sh ]; then /var/qmail/qmail-smtpd/start-smtpd.sh; echo -n ' smtpd' fi
→ 目次へ