メールサーバー · 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 upgrade
shutdown -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 stable

RVMをすぐに使用するには、次のコマンドを実行する必要があります。

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 -v

Rubyが正常にインストールされている場合、次の出力が表示されます。

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 bundler
gem install procodile

MariaDBデータベースサーバーのインストール

MariaDBはMySQLデータベースサーバーのフォークです。MySQLは、データを表形式で保存するために使用されるリレーショナルデータベース管理システムソフトウェアです。サーバーにMariaDBをインストールするには、次のコマンドを実行します。

apt -y install mariadb-client mariadb-server libmysqlclient-dev

次のコマンドを実行してMariaDBを起動し、ブート時に自動的に起動するようにします。

systemctl start mariadb
systemctl 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-server

RabbitMQは現在、システムにインストールされています。

RabbitMQのセットアップ

次のコマンドを実行してRabbitMQサーバープロセスを開始できます。

systemctl start rabbitmq-server

RabbitMQをブート時に自動的に開始するには、次のコマンドを実行します。

systemctl enable rabbitmq-server

次のコマンドを実行してRabbitMQサーバーにPostal用の仮想ホストを作成します。

rabbitmqctl add_vhost /postal

次のコマンドを実行してPostal用のRabbitMQユーザーを追加します。

rabbitmqctl add_user postal StrongPassword

StrongPasswordを非常に強力なパスワードに置き換えてください。

次に、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 stop

Nginxをリバースプロキシとして構成する

セキュリティ上の理由から、PostalのWebインターフェースとAPIは、ApacheやNginxなどの本番Webサーバーの背後にあるべきです。このチュートリアルでは、Nginxをリバースプロキシとしてインストールおよび構成します。

次のコマンドを実行してNginx Webサーバーをインストールします。

apt -y install nginx

Nginxにアクセスするために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 nginx

Nginxがブート時に自動的に開始されるようにするには、次のコマンドを実行します。

systemctl enable nginx

次のWebサイトをブラウザで開くことでPostalにアクセスできます。

https://mail.example.com

Postalの構成

上記のサイトをブラウズすると、次のインターフェースが表示されます。

Postal Login

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

Add Organization in Postal

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

Enter Organization name

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

Add Mail Server

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

Build a new Mail Server

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

Add Domain

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

Configure MX record

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

SMTP details

タイプをSMTPまたはAPIとして選択します。SMTP資格情報の名前を提供し、メールアドレスの取り扱い方法を選択します。

完了したら、Overviewタブに戻ると、メールアドレスの送受信に必要な情報が表示されます。

Sending email with Postal

結論

このチュートリアルでは、Ubuntu 17.04上でPostalを使用して完全な機能を持つメールサーバーを正常にセットアップしました。組織のメールを送受信するためにメールサーバーを使用できます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。