exim4 関連のパッケージを確認する.
$ dpkg -l | grep exim
rc exim4-daemon-light 4.96-15+deb12u5 amd64 lightweight Exim MTA (v4) daemon |
上の実行結果の一番初めのカラムが"rc" の場合は「パッケージは削除されたが, 設定ファイルは残っている」状態のこと."ii" の場合は「パッケージインストール済み」状態のこと. exim 関連パッケージを設定ファイルからアンインストールする.
神戸大学のサイトを参考に作業を進める。
ディレクトリを作成する。
# mkdir /var/qmailユーザ・グループを追加する。qmail は専用のアカウントとグループを作成してその権限で起動する。
# groupadd -g 200 nofiles # adduser --system --ingroup nofiles --home /var/qmail/alias alias # adduser --system --ingroup nofiles --home /var/qmail qmaild # adduser --system --ingroup nofiles --home /var/qmail qmaill # adduser --system --ingroup nofiles --home /var/qmail qmailp # groupadd -g 201 qmail # adduser --system --ingroup qmail --home /var/qmail qmailq # adduser --system --ingroup qmail --home /var/qmail qmailr # adduser --system --ingroup qmail --home /var/qmail qmailsソース、パッチの取得と展開を行う。 あてるpatch は以下のとおりである.
# cd /usr/local/src # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2022/qmail/netqmail-1.06.tar.gz # tar zxvf netqmail-1.06.tar.gz # wget http://www.ckdhr.com/ckd/qmail-103.patch # wget http://cobe.dogmap.org/qmail/qmail-1.03-realrcptto-2006.12.10.patch # wget wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2022/qmail/qmail-date-localtime.patch # wget http://www.itpass.scitec.kobe-u.ac.jp/~itpass/server/2022/qmail/qmail-smtpd-relay-reject # wget http://www.itpass.scitec.kobe-u.ac.jp/~itpass/server/2022/qmail/qmail-smtpd-auth-0.31.tar.gz # tar zxvf qmail-smtpd-auth-0.31.tar.gzqmail にパッチをあて, ビルド/インストールする.
# cd netqmail-1.06 # patch -p1 < ../qmail-103.patch # patch -p1 < ../qmail-1.03-realrcptto-2006.12.10 # patch -p1 < ../qmail-date-localtime.patch # patch -p1 < ../qmail-smtpd-relay-reject # make man # make # make setup check
qmail 制御ファイルに設定を書き込む. 制御ファイルは /var/qmail/control/ 以下に作成. それぞれの制御ファイルへ以下の情報を書き込む.
/var/qmail/control/defaultdomain -> ep.sci.hokudai.ac.jp /var/qmail/control/defaulthost -> ep.sci.hokudai.ac.jp /var/qmail/control/locals -> localhost usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/me -> usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/plusdomain -> ac.jp /var/qmail/control/rcpthosts -> localhost usuzumi.ep.sci.hokudai.ac.jp |
DNS に登録がなされていないと正しく動作しないことに注意. (よくわからないのでとりあえず無視)
orange によって, ep.sci.hokudai.ac.jp の MX を向けられている場合,
ローカル処理すべきドメイン名に ep.sci.hokudai.ac.jp を追加する.
orange によって ep.sci.hokudai.ac.jp の・・・の記述がよくわからないが,
とりあえず追加した。
# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/locals # echo ep.sci.hokudai.ac.jp >> /var/qmail/control/rcpthosts
databytes と queuelifetime を作り, パーミッションを変更.
# echo 20000000 > /var/qmail/control/databytes # chmod 644 /var/qmail/control/databytes # echo 259200 > /var/qmail/control/queuelifetime # chmod 644 /var/qmail/control/queuelifetime # chmod 644 /var/qmail/control/defaulthost
設定がちゃんとされているか確認する.
# /var/qmail/bin/qmail-showctl
それぞれのファイルには最終的に以下のように書き込まれていればよい.
/var/qmail/control/databytes -> 20000000 /var/qmail/control/defaultdomain -> ep.sci.hokudai.ac.jp /var/qmail/control/defaulthost -> ep.sci.hokudai.ac.jp /var/qmail/control/locals -> localhost usuzumi.ep.sci.hokudai.ac.jp ep.sci.hokudai.ac.jp /var/qmail/control/me -> usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/plusdomain -> ac.jp /var/qmail/control/queuelifetime -> 259200 /var/qmail/control/rcpthosts -> localhost usuzumi.ep.sci.hokudai.ac.jp ep.sci.hokudai.ac.jp |
上記の設定ファイルはサーバ入れ替え時にusuzumi => grey に変える必要がある. 今回はsilver => usuzumi にした。 詳細はサーバ入れ替え手順書を参照.
システムのアドレスを設定する(自動で以下のコマンドを実行するスクリプトalias.shがあるのでメールサーバに持ってきてルートで実行する).
# wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2024/dvlop/script/alias.sh
# chmod u+x alias.sh # ./alias.sh
wget するとエラーが出る場合は, alias.sh を作成するか、以下を実行する.
# cd /var/qmail/alias # echo '&epmail' > .qmail-root # echo '&root' > .qmail-postmaster # echo '&root' > .qmail-mailer-daemon # echo '&root' > .qmail-bin # echo '&root' > .qmail-daemon # echo '&root' > .qmail-games # echo '&root' > .qmail-ingres # echo '&root' > .qmail-nobody # echo '&root' > .qmail-system # echo '&root' > .qmail-toor # echo '&root' > .qmail-uucp # echo '&root' > .qmail-usenet # echo '&root' > .qmail-anonymous # echo '&root' > .qmail-mail # echo '&epwww' > .qmail-www # echo '&epdns' > .qmail-dns # chmod 644 .qmail-*
以上により,
postmaster, mailer-daemon, bin, daemon, games, ingres,
nobody, system, toor, uucp, usenet, anonymous, mail
あてのメールは root に転送され,root あてのメールは epmail に転送される.
詳細は dot-qmail(5) .
Mailbox へ配送するために /etc/profile に以下を書き加える.
# vim /etc/profile
MAIL="$HOME/Mailbox" MAILDROP="$HOME/Mailbox" export MAIL MAILDROP |
同様に /etc/csh.cshrc に以下を書き加える.
# vim /etc/csh.cshrc
setenv MAIL $HOME/Mailbox setenv MAILDROP $HOME/Mailbox |
なお,各ユーザのホームディレクトリのパーミッションは
755 でないとメール配送時にエラーが出るらしい.
/var/qmail/bin 以下のコマンドにパスを通す.
bash ユーザのために/etc/profile のPATH= の行(2 行存在)に/var/qmail/bin を付け加える.
# vim /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/qmail/bin" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/qmail/bin" |
csh ユーザのために, /etc/csh.cshrc を編集し, 同様に付け加える. PATH を記述した行が存在しなかったため, 以下をすべて書いた.
# vim /etc/csh.cshrc
setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin |
/etc/manpath.config を編集し以下の赤い部分を付け加える.
# vim /etc/manpath.config
#MANDATORY_MANPATH /usr/src/pvm3/man ... ... MANDATORY_MANPATH /usr/local/share/man MANDATORY_MANPATH /var/qmail/man ... # *PATH* *MANPATH* ... ... ... MANPATH_MAP /opt/sbin /opt/man MANPATH_MAP /var/qmail/bin /var/qmail/man ... # *PATH* *CATPATH* ... ... ... MANDB_MAP /snap/man /var/cache/man/snap MANDB_MAP /var/qmail/man /var/qmail/man
qmail を起動する.その際, スタートスクリプトが必要だが,www サーバから取得する.
# cp /var/qmail/boot/home /var/qmail/rc # wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2024/dvlop/script/qmail # cp qmail /etc/init.d/qmail # chmod +x /etc/init.d/qmail
qmail の中身は以下のとおりである. コメントアウトの箇所は後の作業で外すことになる.
#!/bin/bash # # /etc/init.d/qmail : start or stop the qmail mail subsystem. # # source from http://www.atmarkit.co.jp/ait/articles/0211/02/news001.html # # # updated by MIKAMI Takashi (2015/12/15) # updated by MIKAMI Takashi (2014/06/12) # created by MIKAMI Takashi (2014/06/11) ### BEGIN INIT INFO # Provides: qmail # Required-Start: $remote_fs # Required-Stop: $remote_fs # Should-Start: $network $syslog # Should-Stop: $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop qmail # Description: qmail is qmail ### END INIT INFO PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin #[ -f /var/qmail/rc ] || exit 0 [ -f /var/qmail/bin/qmail-start ] || exit 0 [ -f /var/qmail/bin/qmail-send ] || exit 0 case "$1" in start) # Start daemons. echo "Startig mail-transfer agent: qmail." sh -c '/var/qmail/rc &' # For SMTP # sh -c " /sbin/start-stop-daemon --start --quiet --user qmaild \ # --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \ # --exec /usr/local/bin/tcpserver -- -HRv -u ` id -u qmaild ` \ # -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb 0 smtp \ # /usr/local/bin/rblsmtpd -r bl.spamcop.net \ # /var/qmail/bin/qmail-smtpd 2>&1 \ # | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &" # For SMTP over SSL # sh -c "/sbin/start-stop-daemon --start --quiet --user qmaild \ # --pidfile /var/run/tcpserver_ssmtp.pid --make-pidfile \ # --exec /usr/local/bin/tcpserver-ssl -- -s -HRv -u \ # ` id -u qmaild ` -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb \ # -n /var/qmail/server.key/qmail.pem 0 ssmtp \ # /usr/local/bin/rblsmtpd -r bl.spamcop.net \ # /var/qmail/bin/qmail-smtpd-auth usuzumi.ep.sci.hokudai.ac.jp \ # /bin/checklocalpwd /bin/true 2>&1 \ # | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &" # For POP3 # sh -c "/sbin/start-stop-daemon --start --quiet --user root \ # --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \ # --exec /usr/local/bin/tcpserver -- -v -u 0 -g 0 0 pop3 \ # /var/qmail/bin/qmail-popup \ # usuzumi.ep.sci.hokudai.ac.jp /bin/checkapoppw \ # /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ # | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &" # For POP3 over SSL # sh -c "/sbin/start-stop-daemon --start --quiet --user root \ # --pidfile /var/run/tcpserver_pop3s.pid --make-pidfile \ # --exec /usr/local/bin/tcpserver-ssl -- -s \ # -n /var/qmail/server.key/qmail.pem \ # -v -u 0 -g 0 0 pop3s \ # /var/qmail/bin/qmail-popup \ # usuzumi.ep.sci.hokudai.ac.jp /bin/checkapoppw \ # /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ # | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &" ;; stop) # Stop daemons. echo "Stopping mail-transfer agent: qmail" PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'` if [ ! -z "$PID" ] ; then /bin/kill ${PID} 1> /dev/null 2>&1 fi # /sbin/start-stop-daemon --user qmails --stop --quiet --oknodo --exec /var/qmail/bin/qmail-send # qmail-send # /sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_smtpd.pid --exec /usr/local/bin/tcpserver # smtp # /sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/local/bin/tcpserver # pop3 # /sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_ssmtp.pid --exec /usr/local/bin/tcpserver-ssl # smtp over SSL # /sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3s.pid --exec /usr/local/bin/tcpserver-ssl # pop3s ;; # ===modified by Mikami Takashi (2014/06/11)=== restart) $0 stop $0 start ;; # ===modified by Mikami Takashi (2014/06/11)=== cdb) echo "Rebuilding tcp.smtp.cdb" cd /etc /usr/local/bin/tcprules /etc/tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp ;; *) echo 'Usage: /etc/init.d/qmail {start|stop|restart|cdb}' exit 1 esac exit 0 |
ブート時に自動的に起動させるため, 以下のコマンドで各/etc/rc.X ディレクトリからシンボリックリンクを貼る.
# update-rc.d qmail defaults
再起動し,実際にqmail を起動する.
# reboot # /etc/init.d/qmail start
qmail の状態の確認にはps aux やservice コマンドを用いる.
$ ps aux | grep qmail # service qmail status
配送テスト(ローカル配送,リモート送り出しテスト) を行う. 以下ではルートを抜け自分のアカウントで作業を行う.
自分に送る準備をする.
$ cd ~ $ echo ./Mailbox > ~/.qmail $ touch ~/Mailbox
自分へメールを送ってみる.
hoge は自分のユーザ名に変え,以下のコマンドを実行する.
~hoge/Mailbox にメールが送られることを確認.
$ echo to: hoge | qmail-inject
確認する
$ lv ~/Mailbox
From mondo4@usuzumi.ep.sci.hokudai.ac.jp Mon Nov 30 11:24:48 2015 Return-Path: |
存在しない宛先に送ってみる. バウンスメールが~hoge/Mailbox に送られてくるのなら OK.
$ echo to: nonexisten | qmail-inject $ lv ~/Mailbox
From MAILER-DAEMON Mon Nov 30 11:34:46 2015 Return-Path: <> Delivered-To: mondo4@usuzumi.ep.sci.hokudai.ac.jp Received: (qmail 7387 invoked for bounce); 30 Nov 2015 11:34:45 -0000 Date: 30 Nov 2015 11:34:45 -0000 From: MAILER-DAEMON@usuzumi.ep.sci.hokudai.ac.jp To: mondo4@usuzumi.ep.sci.hokudai.ac.jp Subject: failure notice Hi. This is the qmail-send program at usuzumi.ep.sci.hokudai.ac.jp. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out. |
他のホスト上のアカウントへ送ってみる.届いていれば OK . 届かなければ,/var/log/syslog を参照して原因を追求する.
$ echo to: hoge@gfd-dennou.org | qmail-injectもし届いていなければsyslog を見て確認. 今回はgreyに配送.送信先がhoge@ep.sci.hokudai.ac.jp だと送れなかったので,hoge@grey.ep.sci.hokudai.ac.jp として送信した.
# lv /var/log/syslog
pop はtcpserver から起動する(2014 年度まではinetd/xinetd で起動確認した後,tcpserver へ
起動を移管していた).
また, pop でメールを読む際のパスワードの暗号化をするためにapop のインストールを行う.
http://jaist.dl.sourceforge.net/sourceforge/checkpw/より,checkpw-1.03.tar.gz を取得,展開.
checkpw-1.03/INSTALL に従ってコンパイルする.
$ wget http://sourceforge.net/projects/checkpw/files/checkpw/checkpw-1.03/checkpw-1.03.tar.gz $ tar zxvf checkpw-1.03.tar.gz $ cd chekpw-1.03/ $ make # make setup check
/bin/checkapoppw ができる.
tcpserver をインストールする. tcpserver を起動するために最後に再起動を行う.
# wget http://www.emaillab.org/djb/tools/ucspi-tcp/ucspi-tcp-0.88.tar.gz # wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch # tar zxvf ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88 # patch < ../ucspi-tcp-0.88.errno.patch # make # make setup check # reboot
tcpserver からpop を呼び出すためには起動スクリプト /etc/init.d/qmail のpop の行のコメントアウトを外す
# vim /etc/init.d/qmail
以下のコメントアウトを外す
# For POP3 sh -c "/sbin/start-stop-daemon --start --quiet --user root \ --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \ --exec /usr/bin/tcpserver -- -v -u 0 -g 0 0 pop3 \ /var/qmail/bin/qmail-popup \ grey.ep.sci.hokudai.ac.jp /bin/checkapoppw \ /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &" |
stop の部分のコメントアウトも外す
/sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/bin/tcpserver # pop3 |
さらに,コマンド群を以下のように修正.
# For POP3 sh -c "/sbin/start-stop-daemon --start --quiet --user root \ --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \ --exec /usr/local/bin/tcpserver -- -v -u 0 -g 0 0 pop3 \ /var/qmail/bin/qmail-popup \ usuzumi.ep.sci.hokudai.ac.jp /bin/checkapoppw \ /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &" |
stop の部分も修正.
/sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/local/bin/tcpserver # pop3 |
qmail を再起動
# /etc/init.d/qmail restart
動作の確認(pop3 のプロセスがあれば問題なく起動している)
# ps aux | grep qmail
/usr/local/bin/tcpserver -v -u 0 -g 0 0 pop3 /var/qmail/bin/qmail-popup usuzumi.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir |
すでに ~/Mailbox へ配送するための環境変数は設定した.
pop によるメールの読み出しは EP サーバでは maildir 形式を用いる.
はじめに,環境変数 MAILDIR を設定する.
環境変数の設定は ~/Mailbox への配送でも行ったが,
bash は /etc/profile,csh は /etc/csh.cshrc に書き込む.
/etc/profile に次の 2 行を加える.
# vim /etc/profile
MAILDIR="$HOME/Maildir/" export MAILDIR |
/etc/csh.cshrc には次の 1 行を加える.
# vim /etc/csh.cshrc
setenv MAILDIR $HOME/Maildir/ |
次に配送テストのために一般ユーザで次の設定を行う.
maildirmake のスクリプトでディレクトリを作成する. Maildir を作成する
$ maildirmake ~/Maildir
次に ~/Maildir への配送を qmail に指示する (.qmail へ配送先ディレクトリを記述する).
$ echo ./Maildir/ >> ~/.qmail $ chmod 600 ~/.qmail
.qmail のパーミッションは,600 か 644 でなければならない.
要は,実行許可が出ていないことと
オーナー以外に書き込みが許可されていないことが要求される.
以上の作業は各ユーザごとに行わねばならないが, /etc/skel/ 以下
に, .qmail や Maildir/ を置いておけば, adduser コマンドを用いてアカウ
ントを新規に作ったときにできるホームディレクトリ内にこれらは自動で入る.
こうすることによって, 新規にアカウントを取得する一般ユーザは, 以上の作
業が不要になる.
~/Maildir/.password ファイルを作る. APOPPASSWORDの部分は 自分で考えた適切なパスワードに変えること.
$ echo 'APOPPASSWORD' > ~/Maildir/.password $ chmod 600 ~/Maildir/.password
この中身(APOPPASSWORD)が, pop でメールを読むときの認証パスワードとなる. パーミッションを600としないとpopが働かない.
usuzumi の外のホストから pop 対応メーラー(例. Thunderbird)を用いて pop サーバを usuzumi に指定して usuzumi 上の自分のアカウントあてに届いたメールを読んでみる.
EPMailサーバではimap サーバソフトとして Dovecot を使用する.
Dovecot をパッケージからインストールする
# apt install dovecot-imapd
Dovecot の設定は /etc/dovecot/conf.d 以下のファイルで行う.
# cd /etc/dovecot/conf.d
以下のように各ファイルにおいて設定する. 必要な部分のコメントアウトを外して設定する (なお, 初めからコメントアウトされている値はデフォルトの値となっている).
# vim 10-auth.conf
disable_plaintext_auth = no #平文でのログインを許す |
# vim 10-mail.conf
mail_location = mbox:~/:INBOX=~/Mailbox #保存形式 |
# vim 10-master.conf
service imap-login |
# vim 10-logging.conf
log_timestamp = "%Y-%m-%d %H:%M:%S " |
# vim auth-passwdfile.conf.ext
passdb args = scheme=CRAM-MD5 username_format=%u /etc/dovecot.cram-md5 #パスワードの認証方法. dovecot.crma-md5というパスワードファイルからパスワードを読み込む |
dovecot を再起動する.
# service dovecot restart
dovecot の挙動を確認
# service dovecot status
● dovecot.service - Dovecot IMAP/POP3 email server Loaded: loaded (/lib/systemd/system/dovecot.service; enabled) Active: active (running) since 火 2015-12-01 13:55:13 JST; 2s ago Main PID: 15534 (dovecot) CGroup: /system.slice/dovecot.service ├─15534 /usr/sbin/dovecot -F ├─15536 dovecot/anvil ├─15537 dovecot/log └─15539 dovecot/config 12月 01 13:55:13 usuzumi dovecot[15534]: master: Dovecot v2.2.13 starting up for imap (cor...ed) Hint: Some lines were ellipsized, use -l to show in full. |
パスワードファイルである /etc/dovecot.cram-md5 を書く.
これが CRAM_MD5 の認証データベースファイルとなる. 以下がその書式.であり, passwd ファイルと同じ形式で書く.
[acount]:{パスワードの形式(plainなら平文,CRAM-MD5ならCRAM_MD5で暗号化されたパスワード}[PASSWORD]:[uid]:[gid]::[home] |
[acount]には自分のアカウント名.
PASSWORDが imap 用パスワード. そのまえの{}によって書き方が変わる.
[uid] と [gid] にはそれぞれ自分の uid と gid を入れる.
最後の[home]は自分のホーム領域のパス.
具体的に書いてみる. 赤く強調されているところが実際のパスワードとユーザ情報である. xxxxxxxはパスワード.
# vim /etc/dovecot.cram-md5
# CRAM-MD5 authentication database # Entries are in form <user>:{plain}<password>:<uid>:>gid<::>Home dir< # or <user>:{CRAM-MD5}<cram_md5 password>:<uid>:>gid<::>Home dir< # Lines starting with "#" are comments mondo1:{plain}xxxxxx:40001:40001::/home/mondo1 |
# chmod 600 /etc/dovecot.cram-md5 # chown dovecot:dovecot /etc/dovecot.cram-md5
このままだと /etc/dovecot.cram-md5 に直接見える形でパスワードが書かれてしまう.
しかし, このパスワードを暗号化して書くこともできる.
なお, これをやるときは以前に書いた{plain}でのパスワードは消すこと.
# pass=`doveadm pw -s CRAM-MD5 -p xxxxxx` # echo "mondo4:${pass}:40004:40004::/home/mondo4" >> /etc/dovecot.cram-md5
doveadm pw は引数を暗号化するコマンドである. それを用いてdovecot.cram-md5 に直接暗号化したパスワードを書き込んでいる.
パーミッションを変更する.
# chmod 400 /etc/dovecot.cram-md5
CRAM_MD5 の認証データベースファイル /etc/dovecot.cram-md5 の書き込みには
root 権限が要る.
そのため imap 認証のパスワードを各ユーザが編集することはできない.
そこで apop 認証パスワード ~/Maildir/.password を読み出して
/etc/cram-md5.pwd を生成するスクリプト dovecotpwdbg
を書いた.
これを root 権限で定期的に実行すれば(遅れはあるものの)
/etc/dovecot.cram-md5 が更新される(毎時50分).
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2024/dvlop/script/dovecotpwdbg $ sudo -s # cp dovecotpwdbg /etc/cron.daily/dovecotpwdbg
パーミッションを755にするのを忘れないこと!
(以前の構築作業では追加したスクリプトに対して実行許可を与えるのを忘れて
エラーが出ることが多かった)
# chmod 755 /etc/cron.daily/dovecotpwdbg
より頻繁にこのデータベースを更新するために cron を用いる. root で以下作業を行う.
# crontab -e
以下の 1 行を追加する.
50 * * * * /etc/cron.daily/dovecotpwdbg |
パスワードファイル /etc/dovecot.cram-md5 は新しいものにどんどん書き換えられるため, 一定時間でパスワードが消えることに注意(毎時50分)
usuzumi の外のホストから, imap 対応メーラー(例. Thunderbird)を用いて imap サーバを usuzumi に指定して, usuzumi 上の自分のアカウントあてに届いたメールを読んでみる. メーラの設定や.qmail の設定などは読み書きのするためのメールサーバでの準備を参照.
まとめてテストするため後回し
imap でのメール読みだしは ~/Mailbox から行なわれる.
ここでテストメール受信を行なうため, 管理者自身のホームディレクトリの
~/.qmail を編集する.
~/.qmail を編集. ./Mailbox を追加する.
(ただし過去に.qmail に./Mailbox を追加した場合はやらない)
$ echo "./Mailbox" >> ~/.qmail
メールが ~/Mailbox へ配送されるようになる.
dovecot は ntpdate 等で時刻を調節する際に,5 秒ほどずれているとサービスを停止してしまう. そのため,cron.daly でntpdate を実行させる場合にはdovecot が停止しても restart できるようにする.具体的には/etc/cron.daily/ntpdate に以下の行を追加する.
service dovecot restart > /dev/null 2>&1 |
smtp はtcpserver から起動する.
smtp 中継(smtpを使ったメールの送信)を許可するホストを指定する.
/etc/tcp.smtp を書く.
# vim /etc/tcp.smtp
この後の作業ではグローバルIP が必要となるので, epcore 宛に申請を行ったのちに 以下の作業を行う. 本年度はグローバル IP を持つ情報実験機の 3N 機 (joho24) を用いた. 例えば,133.87.45.76 という IP アドレスのホストからの smtp 中継を許可するためには, 次の 1 行目のように書く. 2 行目の 127. はローカルホストを指す. これは常に書くこと.
133.87.45.76:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" |
次に以下のコマンドを実行する.tcp.smtp を元に /etc/tcp.smtp.cdb ができる.
# /etc/init.d/qmail cdb
起動スクリプトを編集(コメントアウト)する.
# vim /etc/init.d/qmail
以下の行のコメントアウトをとる. また, /usr/bin を /usr/local/bin に修正する.
start) ... # For SMTP sh -c " /sbin/start-stop-daemon --start --quiet --user qmaild \ --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \ --exec /usr/local/bin/tcpserver -- -HRv -u ` id -u qmaild ` \ -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb 0 smtp \ /usr/local/bin/rblsmtpd -r bl.spamcop.net \ /var/qmail/bin/qmail-smtpd 2>&1 \ | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &" ... stop) ... /sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_smtpd.pid --exec /usr/local/bin/tcpserver # smtp |
qmail を restart して tcpserver の起動を確認する.
# /etc/init.d/qmail restart
ping を打ち, ネットワークが繋がっていることを確認した. ネットワークに繋がらない場合, 以下のコマンドで確認する.
# ip addr show # less /etc/network/interfaces
tcpserver が起動しているか確認する.
# ps aux | grep tcpserver
smtp が起動していない. user qmaild のジョブも確認できない. #コマッタ
とりあえずの再起動.
# reboot # ps aux | grep tcpserver
smtp が起動してしまった. とりあえず先に進む.
/usr/local/bin/tcpserver -HRv -u 108 -g 200 -x /etc/tcp.smtp.cdb 0 smtp /usr/local/bin/rblsmtpd -r bl.spamcop.net /var/qmail/bin/qmail-smtpd |
メーラーを使った受信・送信テストを行う. 本年度は Thunderbird を用いる. 先ほど /etc/tcp.smtp に書いたグローバル IP アドレスを持つパソコン (本年度は joho24) に Thunderbird をインストールする.
hogehoge@joho24:~$ sudo apt install thunderbird hogehoge@joho24:~$ thunderbird &apop, imap, smtp サーバを usuzumi に設定し, usuzumi 以外の任意のサーバ (本年度は grey) にあるアカウントと メールを送受信してみる. それぞれ, hogehoge@grey.ep.sci.hokudai. ac.jp, herogero@usuzumi.ep.sci.hokudai.ac.jp と書く. @ep.sci.hokudai.ac.jp だと (grey, usuzumi がないと) 各々は自身のアドレス だと認識し、メール配送がうまくいかない.
apop の場合
imap の場合
imap のアカウント設定は上手くいかない. これは, dovecotpwdbg が uid が 1000 より大きく 29999 以下のユーザの apop パスワードのみ dovecot.cram-md5 に書き込むためだと推測される. #たぶん
(追記) 手作業で CRAM-MD5 で暗号化して書き込んでもログイン できない ... plain で書き込んだらログインできたが ... #コマッタ
手作業で imap 用パスワードを書き込んでも良いが, 本年度は省略.
grey, usuzumi 間でメールの送受信が行えることを確認した.
/var/log/syslog に残るログは, 以下のようなものとなる事を確認する.
#less /var/log/syslog
2015-12-02 17:46:39.816372500 tcpserver: status: 1/40 2015-12-02 17:46:39.816508500 tcpserver: pid 20808 from 133.87.45.12 2015-12-02 17:46:39.816537500 tcpserver: ok 20808 usuzumi.ep.sci.hokudai.ac.jp:133.50.160.52:25 :133.87.45.12::53705 2015-12-02 17:46:39.816948500 qmail-smtpd: pid 20808 from 133.87.45.12: New session 2015-12-02 17:46:39.861504500 qmail-smtpd: pid 20808 from 133.87.45.12: Received EHLO [127.0.0.1] 2015-12-02 17:46:39.924697500 qmail-smtpd: pid 20808 from 133.87.45.12: Sender |
gate-system から登録 IP アドレス一覧を受け渡してもらい /etc/tcp.smtp.cdb を自動生成する.
そのために, 標準入力から IP アドレスリストを読み込み,
/etc/tcp.smtp に書き込むスクリプトを書いた.
これを /usr/local/sbin/list-2-tcp (2015/12/02 更新)とする.
root への実行許可を忘れずに.
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2024/dvlop/script/list-2-tcp $ sudo -s # cp ./list-2-tcp /usr/local/sbin/list-2-tcp # chmod 755 /usr/local/sbin/list-2-tcp
上で作成したtcp.smtp をデータベース化する必要がある. root への実行許可を忘れずに. gate の ip データベース更新時には, gate-system によってこの スクリプトが呼び出される.
tcp_smtp_cdb$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2023/dvlop/script/tcp_smtp_cdb $ sudo -s # cp ./tcp_smtp_cdb /usr/local/sbin/tcp_smtp_cdb # chmod 755 /usr/local/sbin/tcp_smtp_cdb
gate-ip-show, gate-ip-list は gate-system のコマンドである.
上4つのコマンドを実行し、先に進むことにした.gateデーターベースの作成云々かんぬんと書いてあるのだが、今それをやるべきなのかが分からない.おそらくgateの運用を開始してから、gateのip更新が行われたときに、上の二つのスクリプトが動くようになればよいだろうと判断し、この段階ではこれ以上何もせず先に進むことにした.
http://cr.yp.to/software/ezmlm-0.53.tar.gzを取得,展開する. ezmlm-0.53/INSTALL に従って作業を行う.
$ wget http://cr.yp.to/software/ezmlm-0.53.tar.gz $ tar zxvf ezmlm-0.53.tar.gz $ cd ezmlm-0.53
そのままmake すると,エラーが出る.
auto-str エラー とでたら, error.h の
extern int errno; を
#include <errno.h> に書き換える.
ezmlm-manage.o エラー もしくは
ezmlm-return.o エラー とでたら,
ezmlm-manage.c またはezmlm-return.c の
先頭に #include "log.h" を書き込む.
具体的には以下のようにする.
$ vim ./error.h
extern int errno; を以下に書き換える
#include <errno.h> |
$ vim ./ezmlm-manage.c
先頭に以下を追加する
#include "log.h" |
$ vim ./ezmlm-return.c
先頭に以下を追加する
#include "log.h" |
$ make $ make man # make setup
/usr/local/bin/ezmlm/ 以下の ezmlm のコマンドバイナリ群にパス通す.
(具体的には PATH=... の行に/usr/local/bin/ezmlm を追加するだけ)
bash にパスを通す.
# vim /etc/profile
PATH=...の一番最後に:でつないで以下を書く
/usr/local/bin/ezmlm |
反映する.
$ source /etc/profile
csh にもパスを通す
# vim /etc/csh.cshrc
setenv PATH の一番最後に:でつないで以下を書く
/usr/local/bin/ezmlm |
メーリングリスト(ML)を作成する.詳細はezmlm-make の man 参照.
メーリングリストである test を作成する(testはメーリングリスト名).
$ ezmlm-make ~/test ~/.qmail-test username-test usuzumi.ep.sci.hokudai.ac.jp
testには適当なメーリングリストの名前を,usernameには適当な作業ユーザのアカウント名を入れる(今回はmondo7).
次に作成した ML に ML 主催者が手動で購読者を追加する.詳細は ezmlm-sub の man 参照.
$ ezmlm-sub ~/test username@usuzumi.ep.sci.hokudai.ac.jp
登録が終了したら ML へ投稿してみる.先程登録したアドレスへ届くか確かめる.
$ echo subject:testing | qmail-inject usrname-test@usuzumi.ep.sci.hokudai.ac.jp
次に ML の自動処理コマンドを確かめる.
始めに投稿アーカイブから記事のコピーを取り出すコマンドを試す.
記事が送られてくるかを確認する.
$ qmail-inject username-test-get.1@usuzumi.ep.sci.hokudai.ac.jp < /dev/null
次に ML 参加者による自動登録抹消を試す. 確認メールが送られてくるので その指示に従い登録抹消する. (指定されたアドレスに空メールを送る指示が あるハズ)
$ qmail-inject username-test-unsubscribe@usuzumi.ep.sci.hokudai.ac.jp < /dev/null
Mailbox に来たメールに従って登録を消す.
$ lv Mailbox
メールの内容の以下の部分に従う.
removed from this mailing list, please send an empty reply to this address: username-test-uc.1691131688.mfllkpaenammmladliji-username=usuzumi.ep.sci.hokudai.ac.jp@usuzumi.ep.sci.hokudai.ac.jp |
$ qmail-inject username-test-uc.1691131688.mfllkpaenammmladliji-username=usuzumi.ep.sci.hokudai.ac.jp@usuzumi.ep.sci.hokudai.ac.jp < /dev/null
メーラーを使う場合は, 宛名中のドメイン名が usuzumi.ep.sci. ... に なっているか注意すること.
登録を抹消できたかどうかの確認は ML 登録アドレス一覧を見る. 詳細は ezmlm-list の man を見よ.
$ ezmlm-list ~/test
http://untroubled.org/ezmlm/archive/7.2.2/ezmlm-idx-7.2.2.tar.gz
を取得,展開する.
$ wget http://untroubled.org/ezmlm/archive/7.2.2/ezmlm-idx-7.2.2.tar.gz $ tar zxvf ezmlm-idx-7.2.2.tar.gz
ezmlm をビルドした時のディレクトリにもっていく.
$ cp -r ezmlm-idx-7.2.2/* ezmlm-0.53/ $ cd ezmlm-0.53
makeする.
$ make clean $ make; make man
ユーザ eztest を作って ezmlm-idx のコマンドバイナリ群が実行できるか確かめる
(ezmlm-testコマンド).
テストユーザを作成する.
$ chmod 777 ~hoge $ chmod 777 ~hoge/ezmlm-0.53 $ cd ~hoge/ezmlm-0.53 ezmlm-0.53$ sudo -s ezmlm-0.53# adduser eztest ezmlm-0.53# su eztest eztest@:~hoge/ezmlm-0.53$ source /etc/profile eztest@:~hoge/ezmlm-0.53$ cd ~hoge/ezmlm-0.53/ eztest@:~hoge/ezmlm-0.53$ ./ezmlm-test
以下のように表示された.
getconfopt library: OK ezmlm-make: OK Using subdb plugin: std ezmlm-reject: OK ezmlm-[un|is]sub[n]: OK ezmlm-checksub: OK ezmlm-send: OK ezmlm-tstdig: OK ezmlm-weed: OK ezmlmrc contents: OK ezmlm-clean: OK ezmlm-store: OK ezmlm-return: OK ezmlm-warn (1/2): OK ezmlm-manage (1/2): OK ezmlm-request: OK ezmlm-split: OK ezmlm-gate: OK ezmlm-idx: OK ezmlm-get (index): OK ezmlm-get (get): OK ezmlm-get (thread): OK ezmlm-get (digest): OK ezmlm-manage (2/2): OK ezmlm-moderate: OK ezmlm-warn (2/2): OK ezmlm-archive: OK ezmlm-dispatch: OK dispatch editor: OK decode sender: OK Verifying message header and body contents... flags: OK substitutions: OK messages: OK subscribe nop: OK unsubscribe nop: OK subscribe probe: OK subscribe: OK unsubscribe: OK moderated subscribe: OK moderated sub: OK subscribe by mod: OK unsubscribe by mod: OK copylines: OK ezmlm-send: Header is missing or wrong From: line: From: "test1.example.org via __tstlist" <__tstlist@example.com> .............: Header is missing or wrong From: line: From: "test2.example.org via __tstlist" <__tstlist@example.com> .............: Headers contained extra lines: Cc: test2@example.org OK ezmlm-send (from): OK ezmlm-send trailer: OK omitbottom (-manage): OK omitbottom (-get): OK Cleaning up... The headers generated by one or more ezmlm-idx programs did not match their expected values. Please see above for more details. |
ezmlm-send がおかしい. #(泣)
一旦作業を中断.
ここで su eztest と行ったが sudo コマンドを用いる場合はデフォルトでは環境変数 $HOME が
ログインしたユーザとなったままとなり正しく実行されないので -H オプションをつけて実行する.
テストユーザを削除する.
# userdel -r eztest
最終更新日:2023/09/21 (髙橋 聖輝) | Copyright © 2000-2023 epcore |