notqmail install

notqmailインストール

このページは古い内容です、2022年7月の最新版のページへ ここから

notqmaiのインストールは、事前にSSL証明書(インストールしたサーバー独自の)をインストールした環境で行います。

例えば、OpenSSLを使って、秘密鍵、サーバー証明書、公開鍵など。

qmailadminをインストールするために、Webサーバー(Apache)とSSL証明書を設定します。サーバーのIPアドレスでSSL証明書を使う場合はサーバー自身の証明書を使い、もし、ドメイン名でSSL証明書を使う場合は、Let’s Encryptの   https://certbot.eff.org/  を設定してからインストールします。 今回はサーバーのIPアドレスを使う方法でインストールします。

参考にしたサイト: 

 

notqmailのインストール

インストール作業はrootアカウントです。OSはDebian 10 busterです。

自ホストを host.example.jp、自ドメインをexample.jp としています。メールサーバを運用する場合、DNSの設定が必須です。DNSに下記のようにドメインに対するMXを設定してください。

IN      MX      10    host.example.jp. 

とりあえず動かすだけならMXは必須ではありませんが、その場合user@example.jpではサーバへの配送は行われません。user@host.example.jpのような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+」なら「user@host.example.jp」と置換。 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 ‘xxx@example.com’ > .qmail-root
# echo -n ‘xxx@example.com’ > .qmail-postmaster
# echo -n ‘xxx@example.com’ > .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: root@host.example.jp | /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の代表的なオプション

-v  すべてのメッセージを出す
-u  uid ユーザーIDをuidに切り替える
-g  gid グループIDをgidに切り替える
-H  逆引きをしない(リモートホスト名を調べない)
-R  ident(接続したサーバのユーザー情報について、付加的な情報を返す)しない
-x  /etc/tcp.cdb cdbデータベース(/etc/tcp.cdb)で制御する
-c  limit 最大同時接続数をlimitに設定する(デフォルトは40)
-P  逆引き、正引きで相手の正当性を調査する

 

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 user@xxx.com

「@」以降のドメインが登録されたものでない場合はエラーになります。ここで設定したパスワードを変更する場合は、vpasswdコマンドを使用します。

バーチャルユーザーを削除する場合は、vdeluserコマンドを使用します。

# cd ~vpopmail/bin
# ./vdeluser xxx@xxx.com

バーチャルドメインを削除する場合は、vdeldomainコマンドを使用します。

# cd ~vpopmail/bin
# ./vdeldomain xxx.com

※一般的には「@」以前がユーザー名になりますが、vpopmailを使用した場合は「メールアドレスそのものがユーザー名」になります。

 

 

貼り付け

////////////////////  以下は未検証です、作業中 

vpopmailのユーザーでログイン  # su – vpopmail

postmasterの設定

$ cd /home/vpopmail/domains/example.com/postmaster/
$ echo -n ‘xxx@example.com’ > .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 ‘xxx@example.com’ > .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: xxx@xxxx.com | /var/qmail/bin/qmail-inject

echo "Hallo" | /var/qmail/bin/sendmail  -v xxxx@xxx.com

 

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は検証中です。まだ未完成

 

 

 

タグ: 

オープンソースソフトウェア: