Postalは、電子メールを送受信するための無料のオープンソースの完全なメールサーバーです。 RubyとJavaScriptで書かれています。自分のサーバーにPostalを簡単にインストールできます。また、スパムメールを減らすために必要な正しいDNS情報を提供するのにも役立ちます。郵便は、多くの組織で毎日メールを送受信するために使用されています。
このチュートリアルでは、Ubuntu17.04にPostalMailServerをインストールします。
前提条件
- 最小限のUbuntu17.04サーバー。 8GBRAMを推奨します。
- root権限。このガイドはrootユーザーとして作成されています。sudoユーザーとしてログインしている場合は、sudo-iを実行してください。
- サーバーを指すドメイン名。
パッケージをインストールする前に、次のコマンドを使用してパッケージとリポジトリを更新することをお勧めします。
apt update && apt -y upgrade
shutdown -r now
システムが更新されたら、さらにRubyのインストールに進みます。
郵便はRubyで書かれているため、システムにRuby2.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が正常にインストールされると、次の出力が表示されます。
[email protected]:~# ruby -v ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
RubyGemsをインストールする
サーバーでPostelを実行するには、サーバーにバンドラーとプロコダイルをインストールする必要があります。 bundlerは、Rubygemアプリケーションの依存関係マネージャーです。 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インストールのルートパスワードを設定するかどうかを尋ねてきます。yを選択して、インストールに強力なパスワードを設定します。ほとんどの質問は自明であり、すべての質問に「はい」または「はい」と答える必要があります。
郵便用のデータベースを作成するには、最初に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は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サーバープロセスを開始できます。
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
次の出力が得られるはずです。
[email protected]:~# git --version git version 2.11.0
Node.jsは、JavaScriptライブラリのコンパイルに使用されます。次のコマンドを使用してソフトウェアをインストールします。
apt -y install nodejs
次のコマンドを実行すると、Node.jsが正常にインストールされているかどうかを確認できます。
nodejs -v
次の出力が得られるはずです。
[email protected]:~# nodejs -v v4.7.2
すべての依存関係の準備ができたので、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
すべての準備が整ったので、最新の郵便アーカイブをダウンロードし、次のコマンドを使用して郵便ユーザーとしてアーカイブを抽出します。
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
これで、任意のディレクトリから郵便サーバーと対話できます。次のコマンドを実行するには、郵便ユーザーとしてシェルにログインする必要があります。
su - postal
次に、アプリケーションの実行に必要なすべてのruby依存関係をインストールする必要があります。
postal bundle /opt/postal/vendor/bundle
依存関係をインストールしたら、デフォルトの構成ファイルを生成する必要があります。
postal initialize-config
上記のコマンドは、さまざまなキーと証明書を含む、Postalインストールに必要な構成を生成します。これにより、デフォルトのpostal.yml構成ファイルも生成されます。次の出力が得られるはずです。
[email protected]:~$ 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: # The host that the management interface will be available on host: postal.example.com
ホスト名を実際のドメイン名に変更します。さらに、次の行を見つけます。
main_db: # Specify the connection details for your MySQL database host: 127.0.0.1 username: postal password: p0stalpassw0rd database: postal message_db: # Specify the connection details for your MySQL server that will be house the # message databases for mail servers. host: 127.0.0.1 username: postal password: p0stalpassw0rd prefix: postal
作成したデータベースに応じて、ユーザー名、パスワード、データベース名を変更してください。さらに、次の行を見つけます:
rabbitmq: # Specify the connection details for your RabbitMQ server. host: 127.0.0.1 username: postal password: StrongPassword vhost: /postal
RabbitMQ用に作成されたvhostとユーザーに応じて、上記の構成を変更します。次に、DNS構成を見つけます。
dns: # Specifies the DNS record that you have configured. Refer to the documentation at # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further # information about these. 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
次のコマンドを実行して、PostalAdministratorユーザーを作成します。
postal make-user
上記のコマンドは、電子メールアドレス、ユーザー名、およびパスワードを要求します。上記のコマンドは、次の出力を生成します。
[email protected]:~$ 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
次の出力が得られるはずです。
[email protected]:~$ 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 stop
Nginxをリバースプロキシとして構成する
セキュリティ上の理由から、Postal WebインターフェイスとAPIは、ApacheやNginxなどの本番Webサーバーの背後にある必要があります。このチュートリアルでは、Nginxをリバースプロキシとしてインストールして構成します。
次のコマンドを実行して、NginxWebサーバーをインストールします。
apt -y install nginx
NginxへのアクセスにはSSLを使用することをお勧めします。自己署名証明書、Let’sEncryptの無料SSL証明書または商用証明書のいずれかを使用できます。このチュートリアルでは、Let’sEncryptの無料SSLを使用します。
次のコマンドを実行して、Certbotとも呼ばれるLet’sEncryptクライアントをインストールします。
apt -y install certbot
インストールが完了したら、次のコマンドを実行して、Let’sEncrypt認証局から証明書を取得します。 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; } }
ファイルを保存して、エディターを終了します。次に、実行してnginxWebサーバーを再起動します。
systemctl restart nginx
起動時にnginxを自動的に起動できるようにするには、次のコマンドを実行します。
systemctl enable nginx
これで、お気に入りのWebブラウザから次のWebサイトを参照して、Postalonにアクセスできます。
https://mail.example.com
上記のサイトを閲覧すると、次のインターフェースが表示されます。
先ほど作成したユーザーのメールアドレスとパスワードを入力してください。ログインすると、新しい組織を作成するように求められます。
組織の名前を入力します。自動生成された短い名前を使用するか、自分で指定するかを選択できます。ショートネームは、SMTPサーバーでの認証時にユーザー名として使用されます。文字、数字、ハイフンのみを含める必要があります。
組織が作成されると、新しいメールサーバーを作成するように求められます。
メールサーバーの名前、短縮名、モードを入力します。ライブモードでは、すべての電子メールは通常どおりルーティングおよび配信されますが、開発モードでは、Webインターフェイスにのみ表示されます。
メールサーバーを追加したら、メールサーバーに新しいドメインを追加する必要があります。 ドメインをクリックします タブをクリックして、新しいドメイン名を作成します。
ドメイン名を追加したら、ドメインのDNSを構成する必要があります。 SPFとDKIMの2つのTXTレコードを追加する必要があります。また、リターンパスとメール配信用にCNAMEレコードとMXレコードを追加する必要があります。 DNSを構成したら、[レコードが正しいことを確認する]をクリックします ボタンをクリックしてDNS構成を確認します。
次に、メールを送受信するためのSMTP認証情報を作成する必要があります。
タイプをSMTPまたはAPIとして選択します。 SMTPクレデンシャルの名前を入力し、メールアドレスの処理方法を選択します。
完了したら、概要に戻ることができます タブをクリックすると、メールアドレスを送受信するために必要な情報が表示されます。
このチュートリアルでは、Ubuntu17.04でPostalを使用してフル機能のメールサーバーを正常にセットアップしました。メールサーバーを使用して、組織のメールを送受信できます。