notqmailインストール
このページは古い内容です、2022年7月の最新版のページへ ここから
notqmaiのインストールは、事前にSSL証明書(インストールしたサーバー独自の)をインストールした環境で行います。
例えば、OpenSSLを使って、秘密鍵、サーバー証明書、公開鍵など。
qmailadminをインストールするために、Webサーバー(Apache)とSSL証明書を設定します。サーバーのIPアドレスでSSL証明書を使う場合はサーバー自身の証明書を使い、もし、ドメイン名でSSL証明書を使う場合は、Let’s Encryptの https://certbot.eff.org/ を設定してからインストールします。 今回はサーバーのIPアドレスを使う方法でインストールします。
参考にしたサイト:
- https://www.atmarkit.co.jp/ait/articles/0109/04/news002_2.html
- https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?%5BITPASS2018%5D2018%E5...
- https://www.bn-x.net/archives/note/2019/11/102/
- http://www.ryouto.jp/linux/linux_38.html
- https://notes.sagredo.eu/en/qmail-notes-185/netqmail-106-basic-setup-42....
- https://hoge.work/2018/06/10/2018-06-10-021338/
notqmailのインストール
インストール作業はrootアカウントです。OSはDebian 10 busterです。
自ホストを host.example.jp、自ドメインをexample.jp としています。メールサーバを運用する場合、DNSの設定が必須です。DNSに下記のようにドメインに対するMXを設定してください。
IN MX 10 host.example.jp.
とりあえず動かすだけならMXは必須ではありませんが、その場合[email protected]ではサーバへの配送は行われません。[email protected]のようなFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)を用いてテストしてください。また、その場合、host.example.jp自体はDNSに登録されている必要があります。
念のために、サーバーのホスト名 host.example.jp を /etc/hosts に設定します。
ユーザーグループやユーザー追加設定
コンパイルの前に、インストール先のディレクトリ作成(/var/qmail)とqmailを稼働させるのに必要なユーザーとグループの登録をします。
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails
コンパイル
自分のホームのワーキングディレクトリにソースをダウンロード
notqmailのダウンロード: wget https://github.com/notqmail/notqmail/archive/refs/tags/notqmail-1.08.tar.gz
解凍後、make してインストールします。 # make setup # make check
最初のメールサーバー名(host.example.jp)とそのドメイン設定(example.jp) # ./config-fast host.example.jp
# ./config-fast host.example.jp
Your fully qualified host name is example.jp.
Putting example.jp into control/me...
Putting example.jp into control/defaultdomain...
Putting example.jp into control/plusdomain...
Putting example.jp into control/locals...
Putting example.jp into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to example.jp.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
コントロールファイルの設定
/var/qmail/control にはqmailの動作で必要な設定として、以下のように記載します。
- defaultdomain
example.jp
to ヘッダなどにドメイン名が省略された場合に保管されるドメイン名
- locals
localhost
localhost.example.jp
host.example.jp
example.jp
受信するホスト名・ドメイン名の設定 qmail-send が使用します。
- rcpthosts
localhost
example.jp
.example.jp
受信するホスト名・ドメイン名の設定 qmail-smtpd が使用します。
- me
host.example.jp
インストールしたサーバーのFQDN
- plusdomain
example.jp
ドメイン名が+で終わっている場合に付加されるドメイン名。例えば、「user@host+」なら「[email protected]」と置換。 qmail-inject が使用します。
上記の設定で、不正中継対策も含んだ最小限の動作環境になります。
登録したドメイン名を確認できます。
起動の準備
初期の管理アカウント設定
# cd ~alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 .qmail*
postmaster、MAILER-DAEMON、rootあてのメールは/var/qmail/aliasに保存ではなく、別のメールアドレスへ送信する設定にします。各ファイルにメールアドレスを設定します。echoで代入すると文字のごみができることがあるので、ファイルをエディタで編集するほうが安全のようです。
# echo -n ‘[email protected]’ > .qmail-root
# echo -n ‘[email protected]’ > .qmail-postmaster
# echo -n ‘[email protected]’ > .qmail-mailer-daemon
Maildirへの移行設定
ユーザーごとにmboxかMaildirかを選択するよりは、Maildirをデフォルトで対応するように設定します。
rcファイルのコピー
# cp ./home /var/qmail/rc
# chmod 0755 /var/qmail/rc
コピーしたrcファイル /var/qmail/rc を書き替えます。
qmail-start ./Mailbox ---> ./Maildir/
mboxでは各ユーザーのホームディレクトリにMailboxファイルが作成されますが、各自のMaildirディレクトリは各自が手動で生成する必要があります。例えば、以下の手順で
# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias /var/qmail/alias/Maildir
# ls -la
total 24
drwxr-sr-x 3 alias qmail 4096 Aug 8 19:03 .
drwxr-xr-x 10 root qmail 4096 Aug 8 12:40 ..
-rw-r--r-- 1 root qmail 21 Aug 8 13:06 .qmail-mailer-daemon
-rw-r--r-- 1 root qmail 21 Aug 8 13:06 .qmail-postmaster
-rw-r--r-- 1 root qmail 21 Aug 8 13:06 .qmail-root
drwx--S--- 5 alias qmail 4096 Aug 8 19:03 Maildir
# ls -la Maildir/
total 20
drwx--S--- 5 alias qmail 4096 Aug 8 19:03 .
drwxr-sr-x 3 alias qmail 4096 Aug 8 19:03 ..
drwx--S--- 2 alias qmail 4096 Aug 8 19:03 cur
drwx--S--- 2 alias qmail 4096 Aug 8 19:03 new
drwx--S--- 2 alias qmail 4096 Aug 8 19:03 tmp
ただし、各自のMaildirディレクトリは各自が手動で生成する必要があります。各ユーザーのアカウントで、例えば、以下の手順
$ /var/qmail/bin/maildirmake ~/Maildir
各自でMaildirが出来ているか確認
$ cd
$ ls -la
total 40
drwxr-xr-x 6 hodota hodota 4096 Aug 8 19:06 .
drwxr-xr-x 3 root root 4096 Aug 6 16:09 ..
-rw------- 1 hodota hodota 176 Aug 8 13:52 .bash_history
-rw-r--r-- 1 hodota hodota 220 Aug 6 16:09 .bash_logout
-rw-r--r-- 1 hodota hodota 3526 Aug 6 16:09 .bashrc
drwx------ 3 hodota hodota 4096 Aug 7 15:39 .gnupg
-rw-r--r-- 1 hodota hodota 807 Aug 6 16:09 .profile
drwx------ 5 hodota hodota 4096 Aug 8 19:06 Maildir
drwxr-xr-x 3 hodota hodota 4096 Aug 6 17:12 snap
drwxr-xr-x 3 hodota hodota 4096 Aug 7 15:42 work
$ ls -la ./Maildir/
total 20
drwx------ 5 hodota hodota 4096 Aug 8 19:06 .
drwxr-xr-x 6 hodota hodota 4096 Aug 8 19:06 ..
drwx------ 2 hodota hodota 4096 Aug 8 19:06 cur
drwx------ 2 hodota hodota 4096 Aug 8 19:06 new
drwx------ 2 hodota hodota 4096 Aug 8 19:06 tmp
もし、root権限で実行した場合は、chownでMaildirディレクトリのオーナーが各ユーザーにに変更します。
また、新規のユーザーについては、/etc/skelディレクトリにMaildirのひな型を設定し、adduserコマンドなどでユーザーを作成した際に自動でMaildirディレクトリが生成するようにします。
# /var/qmail/bin/maildirmake /etc/skel/Maildir
# ls -la /etc/skel
total 24
drwxr-xr-x 3 root root 4096 Aug 8 19:29 .
drwxr-xr-x 77 root root 4096 Aug 7 16:16 ..
-rw-r--r-- 1 root root 220 Apr 18 2019 .bash_logout
-rw-r--r-- 1 root root 3526 Apr 18 2019 .bashrc
-rw-r--r-- 1 root root 807 Apr 18 2019 .profile
drwx------ 5 root root 4096 Aug 8 19:29 Maildir
qmailの動作確認
暫定的に動作確認するために、qmailサーバーを起動(pop3やsmtpは起動しない)します。実際は、 tcpserverを使って起動します。
仮のqmailの起動とメール配信の確認
# sh /var/qmail/rc &
動作確認
# ps -aef | grep qmail
qmails 1304 1098 0 12:50 pts/0 00:00:00 qmail-send
qmaill 1305 1304 0 12:50 pts/0 00:00:00 splogger qmail
root 1306 1304 0 12:50 pts/0 00:00:00 qmail-lspawn ./Maildir/
qmailr 1307 1304 0 12:50 pts/0 00:00:00 qmail-rspawn
qmailq 1308 1304 0 12:50 pts/0 00:00:00 qmail-clean
メールの送信
# echo to: [email protected] | /var/qmail/bin/qmail-inject
tcpserverのインストール
tcpserverは、qmailを起動するサービスプロセスとして、ucspi-tcpパッケージの一部として提供されています。ユーザー名・IPアドレス・ドメイン名を基に接続制限がかけられる、特定のIPアドレスでのみサービス受付できる、ハッシュを用いた独自データベースファイル(cdb)なので高速処理可能、設定編変更でもサービス再起動が必要ない、などのメリットがあります。
新規にディレクトリを作成してダウンロード: wget https://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
vi error.h で extern int errno; を #include <errno.h>に変更します。
make してインストールします。 # make setup check
インストール後に、/usr/local/bin/にtcpserver関連が設置されます。
# ls -la /usr/local/bin/tcpserver
-rwxr-xr-x 1 root root 55912 Aug 9 12:54 /usr/local/bin/tcpserver
cdbの基になるファイルの作成
/etc/tcp.smtp というファイルを作成し、設定します。
# vim /etc/tcp.smtp
IPアドレス.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
1行目の設定は「IPアドレスからの接続は環境変数RELAYCLIENTに設定し、接続を許可する」となります。
次に、cdbファイルを作成します。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# ls -la /etc/tcp.*
-rw-r--r-- 1 root root 65 Aug 9 13:02 /etc/tcp.smtp
-rw-r--r-- 1 root root 2144 Aug 9 16:10 /etc/tcp.smtp.cdb
tcpserverによるqmailの起動(動作検証中!)
qmailを暫定的に起動させます # sh /var/qmail/rc &
tcpserver経由でqmailを起動します。-u1002 はqmaildのユーザーID(UID)、-g1001はnofilesのユーザーID(GID)です。-x /etc/tcp.smtp.cdbはIPアドレス制御cdbファイルを使う場合です。
# tcpserver -v -u1002 -g1001 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
# tcpserver -v -u1002 -g1001 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
tcpserver から qmail-smtpd を起動する場合
# tcpserver -u 1002 -g 1001 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd &
tcpserverの代表的なオプション
vpopmailのインストール
vpopmailは、バーチャルドメインやバーチャルユーザーを実現し、APOP認証やPOP Before SMTPにも対応しています。
まず、vpopmailのアカウントを作成します。
# groupadd vchkpw
# useradd -g vchkpw -s /bin/false -M vpopmail
# mkdir /home/vpopmail
# chown vpopmail:vchkpw /home/vpopmail
# mkdir /home/vpopmail/etc
# chown vpopmail:vchkpw /home/vpopmail/etc
新規にディレクトリを作成してダウンロード: wget http://jaist.dl.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.33/...
解凍後、解凍したディレクトリに移動し、インストールします。POP Before SMTPに対応させるには、configure --enable-roaming-users=y の設定になります。 --enable-relay-clear-minutes=指定分数 は、POP Before SMTPで、最後のPOP接続からSMTPのRelayを許可する制限時間より短くする場合となります。
# ./configure -enable-roaming-users=y -enable-relay-clear-minutes=10
# make
# make install-strip
/etc/tcp.smtpや/etc/tcp.smtp.cdbファイルは、tcpserverのデフォルト位置のものではなく、vpopmailが用の/home/vpopmail/etc/tcp.smtpを追加作成し、/home/vpopmail/etc/tcp.smtp.cdbを作成し使用します。
# cat tcp.smtp
127.:allow,RELAYCLIENT=""
cabファイルの作成
# /usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
crontabに設定
POP Before SMTPの仕組みがrelay-ctrlと同じように、POP接続してきた端末IPアドレスの記録も同じように行われ、それを定期的に消す作業も同じく必要です。vpopmailでも、cronデーモンを利用し、crontabでpop before smtpのデータを10分ごとにリフレッシュします。
crontab -e で以下の行を追加します。毎時10分にIPアドレスを整理して、接続から3時間以上経過したものを除外します。configure時に「--enable-relay-clear-minutes」を付加した場合は、そこで指定された分数になります。
# crontab -e
10 * * * * /home/vpopmail/bin/clearopensmtp > /dev/null 2>&1
ドメインと仮想ドメインの追加
vpopmailにドメインを(xxx.com)追加します。仮想ドメイン(xxx.com)を作成します。
ここでは、正規ドメイン(xxx.com)を仮想ドメインとして作成しています。
そして、その仮想ドメイン内に、必要なメールアカウントを作成していきます。
この様にする事で、OSのユーザーとメールのユーザーを切り離して管理する事が可能になります。
# /home/vpopmail/bin/vadddomain xxx.com
Please enter password for postmaster: パスワード追加
※最初のドメインを登録すると、次のワーニングが出ます。Please enter password for postmaster:
enter password again:
NOTICE: Out of order entries found in /var/qmail/control/rcpthosts
Sorting...
vadddomainコマンドにより、次のファイルに設定が追加されます。設定ファイルが存在しない場合は自動的に作成されます。
/var/qmail/control/locals
/var/qmail/control/rcpthosts
(rcphostsが50行以上の場合は/var/qmail/control/morercpthostsになる)
/var/qmail/control/virtualdomains
/var/qmail/users/assign
/var/qmail/users/cdb
以下のファイルやディレクトリは新規に作成されます。
~vpopmail/domains/xxx.com
~vpopmail/domains/xxx.com/postmaster/Maildir
~vpopmail/domains/xxx.com/vpasswd
~vpopmail/domains/xxx.com/vpasswd.cdb
/var/qmail/control下のファイルを修正したので、変更を有効にするために、qmail-sendプロセスを再起動します。
# ps aux | grep qmail-send
qmails プロセスID 0.0 0.1 1088 368 ? S Jan31 0:00 qmail-send
# kill -HUP プロセスID
最初のバーチャルユーザーとしてpostmasterが用意され、.qmail-defaultには、の1行が追加され、あて先不明メールは「Sorry, no mailbox here by that name. vpopmail」というメッセージとともに返信されます。
# cat .qmail-default
| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
仮想ドメインのユーザー追加・削除(この時点では動作検証が未完成です!)
ユーザーを追加(ユーザー追加できませんでした)
# /home/vpopmail/bin/vadduser [email protected]
「@」以降のドメインが登録されたものでない場合はエラーになります。ここで設定したパスワードを変更する場合は、vpasswdコマンドを使用します。
バーチャルユーザーを削除する場合は、vdeluserコマンドを使用します。
# cd ~vpopmail/bin
# ./vdeluser [email protected]
バーチャルドメインを削除する場合は、vdeldomainコマンドを使用します。
# cd ~vpopmail/bin
# ./vdeldomain xxx.com
※一般的には「@」以前がユーザー名になりますが、vpopmailを使用した場合は「メールアドレスそのものがユーザー名」になります。
//////////////////// 以下は未検証です、作業中
vpopmailのユーザーでログイン # su – vpopmail
postmasterの設定
$ cd /home/vpopmail/domains/example.com/postmaster/
$ echo -n ‘[email protected]’ > .qmail
パーミッションは vpopmail vchkpw になっているか確認し、なっていなければ
chown -R vpopmail:vchkpw .qmail
chmod -R 600 .qmail
もしこの設定がない場合は、/home/vpopmail/domains/example.com/postmaster/Maildir/ へのローカル配送される
rootアカウントのメールの設定
$ cd /home/vpopmail/domains/example.com/
$ echo -n ‘[email protected]’ > .qmail-root
パーミッションは vpopmail vchkpw になっているか確認し、なっていなければ
chown -R vpopmail:vchkpw .qmail-root
chmod -R 600 .qmail-root
///////////////////////////// <---- ここまで
exim4 やPostfixのアンインストールとqmail設定
dpkg -l | grep exim dpkg -l | grep postfix
もし存在すれば # apt-get remove --purge exim4
メール関連のコマンドをシンボリックリンクで設定
# ln -s /var/qmail/bin/qmail-qstat /usr/bin/mailq
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
内部メール送信のテスト
暫定的qmailを起動: # sh /var/qmail/rc & 停止 psコマンドでプロセス確認、kill コマンドで停止
テスト、ローカルのメール配信で内部の配信が動いてるか確認します。
echo to: [email protected] | /var/qmail/bin/qmail-inject
echo "Hallo" | /var/qmail/bin/sendmail -v [email protected]
Daemontoolsインストール
展開したディレクトリが実行ファイルの環境になり、/command/からシンボリックリンクとなるため、ダウンロードは/usr/local/にする。
cd /usr/local
ダウンロード # wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
/usr/local/admin/daemontools-0.76/src/error.h を編集 extern int errno; を #include <errno.h> に変更
cd /usr/local/admin/daemontools-0.76
daemontools-0.76.tar.gz の場合は、コンパイル(Make)は必要ないようです。 package/install の実行
以上の作業で、以下のディレクトリとファイルが作成されます。
新たに作成されるディレクトリ
/service
/command
作成されるファイルおよびそのシンボリックリンク
/usr/local/admin/daemontools/下に実行ファイル
/command/下にそのシンボリックリンク
/usr/local/bin/下にさらにシンボリックリンク
systemctl 用のdaemontools を設定します
/etc/systemd/system/daemontools.service 以下の内容でファイルdaemontools.serviceを新規作成
[Unit]
Description=daemontools Start supervise
After=getty.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/command/svscanboot /dev/ttyS0
TimeoutSec=0
[Install]
WantedBy=multi-user.target
サービスとして登録と起動
# systemctl enable daemontools
# systemctl start daemontools
Daemontoolsで smtp:qmail/pop3:vpoopmail の待ち受けのtcpserverを設定します。
/var/superviseに以下のディレクトリを作成します。
# mkdir -p /var/supervise/qmail
# mkdir -p /var/supervise/smtpd
# mkdir -p /var/supervise/pop3
/var/supervise/qmail/run runファイルを作成し、以下の内容を追加します。
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail
/var/supervise/smtpd/run runファイルを作成し、以下の内容を追加します。
変更するところは、hostname、id -u vpopmail、id -g vpopmail です。hostnameは [サーバのFQDN]、vpopmailのユーザーIDとグループIDは、/etc/passwd で確認します。-u xxxx -g xxxx と明記します。
#!/bin/sh
/usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb \
/home/vpopmail/etc/tcp.smtp.tmp \
< /home/vpopmail/etc/tcp.smtp
exec env - PATH="/var/qmail/bin:$PATH" \
/usr/local/bin/tcpserver -HRl `hostname` -v -x /home/vpopmail/etc/tcp.smtp.cdb -u `id -u vpopmail` -g `id -g vpopmail` 0 smtp \
qmail-smtpd 2>&1 | splogger smtp 3
/var/supervise/pop3/run runファイルを作成し、以下の内容を追加します。 hostnameは [サーバのFQDN]
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
/usr/local/bin/tcpserver -HRl `hostname` -v 0 pop3 qmail-popup `hostname` /home/
vpopmail/bin/vchkpw \
qmail-pop3d Maildir 2>&1 | splogger pop3 3
実行権のパーミッションを設定します。
# chmod 0755 /var/supervise/qmail/run
# chmod 0755 /var/supervise/smtpd/run
# chmod 0755 /var/supervise/pop3/run
/serviceにリンボリックリンクを設定します。
# cd /service
# ln -s /var/supervise/qmail .
# ln -s /var/supervise/smtpd .
# ln -s /var/supervise/pop3 .
サービスで起動されているか確認するには
# svstat /service/*
/service/pop3: up (pid 359) 3944 seconds
/service/qmail: up (pid 361) 3944 seconds
/service/smtpd: up (pid 360) 3944 seconds
念のために、システム再起動して、動作確認します。
以上のメールは受信できましたが、POP、SMTPは検証中です。まだ未完成