メールサーバー · 5 min read · Nov 06, 2025
Postalを使用して完全な機能を持つメールサーバーを作成する方法
Postalは、メールの送受信のための無料でオープンソースの完全なメールサーバーです。RubyとJavaScriptで書かれています。自分のサーバーにPostalを簡単にインストールできます。また、スパムメールを減らすために必要な正しいDNS情報を提供するのにも役立ちます。Postalは、多くの組織によって日常的にメールの送受信に使用されています。
このチュートリアルでは、Ubuntu 17.04にPostal Mail Serverをインストールします。
前提条件
- 最小限のUbuntu 17.04サーバー。8 GB RAMを推奨。
- ルート権限。このガイドはルートユーザーとして書かれています。sudoユーザーとしてログインしている場合は、sudo -iを実行してください。
- サーバーに向けられたドメイン名。
基本システムの更新
パッケージをインストールする前に、次のコマンドを使用してパッケージとリポジトリを更新することをお勧めします。
apt update && apt -y upgradeshutdown -r nowシステムが更新されたら、Rubyのインストールに進みます。
Rubyのインストール
PostalはRubyで書かれているため、システムにRuby 2.3以上をインストールする必要があります。このチュートリアルでは、RVMを使用して最新のRubyバージョンをインストールします。次のコマンドを実行して、サーバーにRVMのGPGキーを追加します。
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3次に、次のコマンドを使用してRVMをインストールします。
curl -sSL https://get.rvm.io | bash -s stableRVMをすぐに使用するには、次のコマンドを実行する必要があります。
source /etc/profile.d/rvm.sh次に、次のコマンドを使用してRubyのリストを取得します。
rvm list known次の出力が表示されます。
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head
次に、次のコマンドを使用してリスト内の最新のRubyバージョンをインストールします。
rvm install 2.4次のコマンドを使用してRubyバージョンを使用します。
rvm use 2.4次のコマンドを使用してRubyのバージョンを確認できます。
ruby -vRubyが正常にインストールされている場合、次の出力が表示されます。
root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
Ruby Gemsのインストール
サーバーでPostalを実行するには、bundlerとprocodileをインストールする必要があります。bundlerはRuby gemアプリケーションの依存関係マネージャーです。procodileはRubyアプリケーションのプロセスマネジメントツールです。次のコマンドを使用して両方のアプリケーションをインストールします。
gem install bundlergem install procodileMariaDBデータベースサーバーのインストール
MariaDBはMySQLデータベースサーバーのフォークです。MySQLは、データを表形式で保存するために使用されるリレーショナルデータベース管理システムソフトウェアです。サーバーにMariaDBをインストールするには、次のコマンドを実行します。
apt -y install mariadb-client mariadb-server libmysqlclient-dev次のコマンドを実行してMariaDBを起動し、ブート時に自動的に起動するようにします。
systemctl start mariadbsystemctl enable mariadb次のコマンドを実行してMariaDBインストールを保護します。
mysql_secure_installation上記のコマンドは、新しいMariaDBインストールを保護するためのスクリプトを実行します。スクリプトは既存のrootユーザーのパスワードを尋ねます。MariaDBをインストールしたばかりなので、rootパスワードは設定されていません。次に進むにはEnterを押してください。
スクリプトは、MariaDBインストールのためにrootパスワードを設定するかどうかを尋ねます。yを選択し、インストールのために強力なパスワードを設定してください。ほとんどの質問は自己説明的であり、すべての質問に対してはいまたはyと答えるべきです。
Postal用のデータベースのセットアップ
Postal用のデータベースを作成するには、まずMySQLコマンドラインにログインする必要があります。同じことをするために次のコマンドを実行します。
mysql -u root -p上記のコマンドは、rootユーザーのMySQLシェルにログインします。rootユーザーのパスワードを求められます。ログインするためにパスワードを入力してください。次に、Postalインストール用の新しいデータベースを作成するために次のクエリを実行します。
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;上記のクエリは、postalという名前の新しいデータベースを作成します。クエリは常にセミコロンで終了するため、各クエリの最後にセミコロンを使用していることを確認してください。
次に、作成したデータベースに対してデータベースユーザーにすべての権限を付与します。次のコマンドを実行します。
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
StrongPasswordを非常に強力で安全なパスワードに置き換えてください。
データベースはPostalによって自動的に書き込まれますが、そのためにはPostalユーザーに適切な権限を付与する必要があります。次のコマンドを実行して、postal-で始まるすべてのユーザーに権限を付与します。
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
次のコマンドを実行して、データベースの権限に対する変更を即座に適用します。
FLUSH PRIVILEGES;次のコマンドを使用してMySQLプロンプトから退出します。
EXIT;RabbitMQのインストール
RabbitMQはErlang言語で書かれています。このチュートリアルでは、サーバーに最新のErlangをインストールします。次のコマンドを使用してErlangをインストールします。
apt -y install erlang次のコマンドを実行してGPGキーをインポートします。
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -次のコマンドを実行してRabbitMQリポジトリを追加します。
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'次のコマンドを実行してリポジトリインデックスを更新します。
apt update次のコマンドを実行してRabbitMQをインストールできます。
apt -y install rabbitmq-serverRabbitMQは現在、システムにインストールされています。
RabbitMQのセットアップ
次のコマンドを実行してRabbitMQサーバープロセスを開始できます。
systemctl start rabbitmq-serverRabbitMQをブート時に自動的に開始するには、次のコマンドを実行します。
systemctl enable rabbitmq-server次のコマンドを実行してRabbitMQサーバーにPostal用の仮想ホストを作成します。
rabbitmqctl add_vhost /postal次のコマンドを実行してPostal用のRabbitMQユーザーを追加します。
rabbitmqctl add_user postal StrongPasswordStrongPasswordを非常に強力なパスワードに置き換えてください。
次に、RabbitMQ仮想ホストにRabbitMQユーザーに適切な権限を設定します。
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"GitとNode.jsのインストール
Gitはインストーラーパッケージといくつかの依存関係を取得するために使用されます。次のコマンドを使用してシステムにGitをインストールします。
apt -y install git次のコマンドを使用してバージョンを確認することで、Gitが正常にインストールされたかどうかを確認できます。
git --version次の出力が得られるはずです。
root@ubuntu:~# git --version
git version 2.11.0
Node.jsはJavaScriptライブラリをコンパイルするために使用されます。次のコマンドを使用してソフトウェアをインストールします。
apt -y install nodejs次のコマンドを実行してNode.jsが正常にインストールされたかどうかを確認できます。
nodejs -v次の出力が得られるはずです。
root@ubuntu:~# nodejs -v
v4.7.2
すべての依存関係が準備できたので、Postalをインストールできます。
Postalのインストール
Postalは独自の隔離されたユーザーとして実行する必要があります。次のコマンドを実行して新しいユーザーを作成します。
useradd -r -m -d /opt/postal -s /bin/bash postal上記のコマンドは、ユーザー名postalの新しいユーザーを作成し、ホームディレクトリを/opt/postalに設定します。
次のコマンドを実行して、Rubyが特権ポートをリッスンできるようにします。
setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/rubyすべてが準備できたので、最新のPostalアーカイブをダウンロードし、次のコマンドを使用してPostalユーザーとしてアーカイブを抽出します。
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal次のコマンドを実行してPostalバイナリファイルへのシンボリックリンクを作成します。
ln -s /opt/postal/bin/postal /usr/bin/postalこれで、任意のディレクトリからPostalサーバーと対話できます。次のコマンドを実行するには、postalユーザーとしてシェルにログインする必要があります。
su - postal次に、アプリケーションを実行するために必要なすべてのRuby依存関係をインストールする必要があります。
postal bundle /opt/postal/vendor/bundle依存関係がインストールされたら、デフォルトの構成ファイルを生成する必要があります。
postal initialize-config上記のコマンドは、さまざまなキーと証明書を含むPostalインストールに必要な構成を生成します。これにより、デフォルトのpostal.yml構成ファイルも生成されます。次の出力が得られるはずです。
postal@ubuntu:~$ postal initialize-config
Created example config file at /opt/postal/config/postal.yml
Created new private key for Let's Encrypt
Created new signing key for DKIM & HTTP requests
Created new private key for default fast server TLS connections
Created new self signed certificate for default fast server TLS connections
次に、postal.yml構成でいくつかのオプションを構成する必要があります。
nano /opt/postal/config/postal.yml次の行を見つけます。
web:
# 管理インターフェースが利用可能なホスト
host: postal.example.com
ホスト名を実際のドメイン名に変更します。さらに、次の行を見つけます。
main_db:
# MySQLデータベースの接続詳細を指定します
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
database: postal
message_db:
# メールサーバーのメッセージデータベースを保持するMySQLサーバーの接続詳細を指定します。
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
prefix: postal
作成したデータベースに応じて、ユーザー名、パスワード、データベース名を変更します。さらに、次の行を見つけます。
rabbitmq:
# RabbitMQサーバーの接続詳細を指定します。
host: 127.0.0.1
username: postal
password: StrongPassword
vhost: /postal
RabbitMQ用に作成したvhostとユーザーに応じて上記の構成を変更します。次に、DNS構成を見つけます。
dns:
# 構成したDNSレコードを指定します。詳細については、
# https://github.com/atech/postal/wiki/Domains-&-DNS-Configurationを参照してください。
mx_records:
- mx.postal.example.com
smtp_server_hostname: postal.example.com
spf_include: spf.postal.example.com
return_path: rp.postal.example.com
route_domain: routes.postal.example.com
track_domain: track.postal.example.com
上記のドメインを、メールサーバーで使用する実際のドメインに変更します。
ファイルを保存してエディタを終了します。次に、次のコマンドを実行してデータベースとその他の資産を初期化します。
postal initialize次のコマンドを実行してPostal管理者ユーザーを作成します。
postal make-user上記のコマンドは、メールアドレス、ユーザー名、パスワードを尋ねます。上記のコマンドは次の出力を生成します。
postal@ubuntu:~$ postal make-user
Postal User Creator
Enter the information required to create a new Postal user.
This tool is usually only used to create your initial admin user.
E-Mail Address : [email protected]
First Name : Liptan
Last Name : Biswas
Initial Password: : **************
User has been created with e-mail address [email protected]
Postalのコマンドラインセットアップはこれで終了です。次のコマンドを実行してサーバーを起動できます。
postal startサービスが正しく起動しているかどうかを確認するには、次のコマンドを実行します。
postal status次の出力が得られるはずです。
postal@ubuntu:~$ postal status
Procodile Version 1.0.17
Application Root /opt/postal
Supervisor PID 5319
Started 2017-07-21 07:26:19 +0000
|| web
|| Quantity 1
|| Command bundle exec puma -C config/puma.rb
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => web.1 Running 07:26 pid:5325 respawns:0 port:- tag:-
|| worker
|| Quantity 1
|| Command bundle exec ruby script/worker.rb
|| Respawning 5 every 3600 seconds
|| Restart mode start-term
|| Log path none specified
|| Address/Port none
|| => worker.1 Running 07:26 pid:5327 respawns:0 port:- tag:-
|| cron
|| Quantity 1
|| Command bundle exec rake postal:cron
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => cron.1 Running 07:26 pid:5329 respawns:0 port:- tag:-
|| smtp
|| Quantity 1
|| Command bundle exec rake postal:smtp_server
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => smtp.1 Running 07:26 pid:5332 respawns:0 port:- tag:-
|| requeuer
|| Quantity 1
|| Command bundle exec rake postal:requeuer
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => requeuer.1 Running 07:26 pid:5334 respawns:0 port:- tag:-
Postalを停止するには、次のコマンドを実行できます。
postal stopNginxをリバースプロキシとして構成する
セキュリティ上の理由から、PostalのWebインターフェースとAPIは、ApacheやNginxなどの本番Webサーバーの背後にあるべきです。このチュートリアルでは、Nginxをリバースプロキシとしてインストールおよび構成します。
次のコマンドを実行してNginx Webサーバーをインストールします。
apt -y install nginxNginxにアクセスするためにSSLを使用することをお勧めします。自己署名証明書、Let’s Encryptの無料SSL証明書、または商用証明書を使用できます。このチュートリアルでは、Let’s Encryptの無料SSLを使用します。
次のコマンドを実行してLet’s Encryptクライアント(certbotとしても知られています)をインストールします。
apt -y install certbotインストールが完了したら、次のコマンドを実行してLet’s Encrypt証明書機関から証明書を取得します。ドメイン名がサーバーに向けられていることを確認してください。certbotは証明書を提供する前にドメインの権限を確認します。mail.example.comを実際のドメイン名に置き換えてください。
certbot certonly --standalone -d mail.example.com証明書が生成されると、/etc/letsencrypt/live/mail.example.comに保存されます。
Let’s Encrypt SSLは90日で期限切れになるため、証明書の自動更新を設定することをお勧めします。次のコマンドを実行してcrontabファイルを開きます。
crontab -e次の行をcrontabファイルに入力します。
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log上記のcronジョブは、毎週月曜日の午前1時30分に自動的に実行され、証明書が期限切れになると自動的に更新されます。
次のコマンドを実行して、Webサイトの新しいサーバーブロックを作成します。
nano /etc/nginx/conf.d/mail.example.com.confファイルに次の内容を記入します。
server {
listen [::]:80;
listen 0.0.0.0:80;
server_name mail.example.com;
return 301 https://$host$request_uri;
}
server {
listen [::]:443 ssl;
listen 0.0.0.0:443 ssl;
root /opt/postal/public;
server_name mail.example.com;
ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
location / {
client_max_body_size 50M;
try_files $uri $uri/index.html $uri.html @puma;
}
location /assets {
add_header Cache-Control max-age=3600;
}
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://127.0.0.1:5000;
}
}
ファイルを保存してエディタを終了します。次のコマンドを実行してNginx Webサーバーを再起動します。
systemctl restart nginxNginxがブート時に自動的に開始されるようにするには、次のコマンドを実行します。
systemctl enable nginx次のWebサイトをブラウザで開くことでPostalにアクセスできます。
https://mail.example.comPostalの構成
上記のサイトをブラウズすると、次のインターフェースが表示されます。

ユーザーのメールアドレスとパスワードを入力します。ログインすると、新しい組織を作成するように求められます。

組織の名前を提供します。自動生成された短い名前を使用するか、自分で指定することができます。短い名前は、SMTPサーバーで認証する際のユーザー名として使用されます。文字、数字、ハイフンのみを含む必要があります。

組織が作成されると、新しいメールサーバーを作成するように求められます。

メールサーバーの名前、短い名前、およびモードを提供します。ライブモードでは、すべてのメールが通常通りルーティングされて配信されますが、開発モードでは、Webインターフェースでのみ表示されます。

メールサーバーを追加したら、メールサーバーに新しいドメインを追加する必要があります。Domainsタブをクリックして新しいドメイン名を作成します。

ドメイン名を追加したら、ドメインのDNSを構成する必要があります。SPFとDKIMのために2つのTXTレコードを追加する必要があります。また、リターンパスとメール配信のためにCNAMEレコードとMXレコードを追加する必要があります。DNSを構成したら、Check my records are correctボタンをクリックしてDNS構成を確認します。

次に、メールの送受信のためのSMTP資格情報を作成する必要があります。

タイプをSMTPまたはAPIとして選択します。SMTP資格情報の名前を提供し、メールアドレスの取り扱い方法を選択します。
完了したら、Overviewタブに戻ると、メールアドレスの送受信に必要な情報が表示されます。

結論
このチュートリアルでは、Ubuntu 17.04上でPostalを使用して完全な機能を持つメールサーバーを正常にセットアップしました。組織のメールを送受信するためにメールサーバーを使用できます。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。