GNU/Linux >> Linux の 問題 >  >> Linux

郵便を使用して完全に機能するメールサーバーを作成する方法

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をインストールする

郵便は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をインストールする

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

次の出力が得られるはずです。

[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を使用してフル機能のメールサーバーを正常にセットアップしました。メールサーバーを使用して、組織のメールを送受信できます。


Linux
  1. UbuntuサーバーにDKIMをインストールする方法

  2. 別のサーバーを使用してサーバーにSSH接続する方法は??

  3. Linux サーバーに CVS をインストールして CVS リポジトリを作成する方法

  1. Windows10にSQLServerをインストールする方法

  2. RHEL 8 /CentOS8にpostfixメールサーバーをインストールする方法

  3. RundeckをDebian8(Jessie)サーバーにインストールする方法

  1. CentOS7でLAMPサーバーを作成する方法

  2. Ubuntuで包括的なメールサーバーを作成する方法

  3. LinuxでRubyOnRailsをインストールする方法