Postfix メール サーバーと Dovecot をデータベース (MariaDB) で安全にセットアップする方法 - パート 1
この 3 つの記事 シリーズでは、 CentOS 7 ボックスでウイルス対策とスパム保護を備えた Postfix メール サーバーをセットアップする方法について説明します。これらの手順は、RHEL/Fedora や Debian/Ubuntu などの他のディストリビューションでも機能することに注意してください。
私たちの計画は、電子メール アカウントとエイリアスを MariaDB データベースに保存することで構成されており、便宜上、phpMyAdmin を通じて管理されます。
phpMyAdmin をインストールしないことを選択した場合、または CLI のみのサーバーを使用している場合は、このシリーズ全体で使用されるデータベース テーブルを作成するための同等のコードも提供されます。
メール サーバーを稼動し続けることは、通常、システム管理者やエンジニアに割り当てられる重要なタスクの 1 つであるため、この重要なサービスを運用環境で効率的に実行するためのヒントもいくつか提供します。
DNS のドメインの A レコードと MX レコードを作成する
先に進む前に、いくつかの前提条件を満たす必要があります。
1. ドメイン レジストラを通じて登録された有効なドメインが必要です。このシリーズでは、GoDaddy を通じて登録された www.linuxnewz.com
を使用します。
2. このようなドメインは、VPS またはクラウド ホスティング プロバイダーの外部 IP を指す必要があります。メール サーバーを自己ホストしている場合は、FreeDNS が提供するサービスを使用できます (登録が必要です)。
いずれにしても、ドメインに対して A
レコードと MX
レコードも設定する必要があります (MX レコードの詳細については、Google のこの FAQ を参照してください)。
追加したら、MxToolbox や ViewDNS などのオンライン ツールを使用して検索し、正しく設定されていることを確認できます。
重要: DNS レコードが伝達され、ドメインが使用可能になるまでにしばらく時間がかかる場合があります (1 ~ 2 日) のでご注意ください。その間、IP アドレスを通じて VPS にアクセスして、以下に示すタスクを実行できます。
3. VPS のFQDN (完全修飾ドメイン名) を構成します。
hostnamectl set-hostname yourhostname
システムのホスト名を設定するには、/etc/hosts を次のように編集します (AAA.BBB.CCC.DDD、yourhostname、および は置き換えてください) > ドメインをサーバーのパブリック IP、ホスト名、登録済みドメインに置き換えます):
AAA.BBB.CCC.DDD yourhostname.yourdomain.com yourhostname
ここで、yourhostname は、hostnamectl コマンドを使用して以前に設定したシステムのホスト名です。
必要なソフトウェア パッケージのインストール
4. Apache、Postfix、Dovecot、MariaDB、PhpMyAdmin、SpamAssassin、ClamAV などの必要なソフトウェア パッケージをインストールするには、EPEL リポジトリを有効にする必要があります。
yum install epel-release
5. 上記の手順を実行したら、必要なパッケージをインストールします。
CentOS ベースのシステムの場合:
yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin
Debian およびその派生版では:
aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php5 phpMyAdmin
6. Web サーバーとデータベース サーバーを起動して有効にします。
CentOS ベースのシステムの場合:
systemctl enable httpd mariadb
systemctl start httpd mariadb
Debian およびその派生版では:
systemctl enable apache2 mariadb
systemctl start apache2 mariadb
インストールが完了し、上記のサービスが有効になって実行されたら、Postfix メール アカウントに関する情報を保存するデータベースとテーブルをセットアップすることから始めます。
Postfixメールアカウントデータベースの作成
簡単にするために、Web インターフェイスを通じて MySQL/MariaDB データベースの管理を処理することを目的としたツールである phpMyAdmin を使用して作成および管理します。電子メールデータベース。
ただし、このツールにログオンして使用するには、次の手順に従う必要があります。
7. MariaDB アカウントを有効にします (これを行うには、コマンド ラインから mysql_secure_installation
ユーティリティを実行し、ユーザー root にパスワードを割り当て、 「リモートでの root ログインを禁止しますか?」を除く、ツールによって提案されたデフォルト設定を設定します。
または、新しいデータベース ユーザーを作成します。
MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
証明書を使用して Apache を保護する
8. Web アプリケーションを使用して電子メール サーバー データベースを管理するため、サーバーへの接続を保護するために必要な予防措置を講じる必要があります。そうしないと、phpMyAdmin 認証情報がプレーン テキストでネットワーク上を送信されます。
サーバーにトランスポート層セキュリティ (TLS) を設定するには、RHCE シリーズのパート 8: TLS による HTTPS の実装で説明されている手順に従います。次に進む前に、Apache のネットワーク セキュリティ サービス (NSS) を使用してください。
注: サーバーのコンソールにアクセスできない場合は、キーの作成中に必要なエントロピーを生成する別の方法を見つける必要があります。その場合は、rng-tools をインストールし、rngd -r /dev/urandom を実行することを検討してください。
PhpMyAdmin の構成と保護
9. /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) または /etc/phpmyadmin/apache。 conf (Debian および派生製品) で、次の行が出現するすべての箇所を見つけて、それらの行がサーバーのパブリック IP を指していることを確認します。
Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD
さらに、デフォルトのエイリアスを無効にし、phpMyAdmin ログイン ページにアクセスするための新しいエイリアスを作成します。これは、www.yourdomain.com/phpmyadmin または www.yourdomain.com/phpMyAdmin をターゲットとするボットや外部攻撃者からサイトを保護するのに役立ちます。
#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin
また、
内に次の行を追加します。
Require all granted
ドメインの Apache VirtualHost を作成する
10. ドメインが有効なサイトに追加されていることを確認します。 /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) または /etc/apache2/sites-available/linuxnewz.com を作成します。 (Debian) に次の内容が含まれています (DocumentRoot、sites-available、sites-enabled が有効になっていることを確認してください) > ディレクトリが存在します):
<VirtualHost *:80>
ServerName www.linuxnewz.com
ServerAlias linuxnewz.com
DocumentRoot /var/www/linuxnewz.com/public_html
ErrorLog /var/www/linuxnewz.com/error.log
CustomLog /var/www/linuxnewz.com/requests.log combined
Options Indexes FollowSymLinks
</VirtualHost>
そしてシンボリックリンク:
CentOS の場合:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
Debian の場合:
a2ensite linuxnewz.com
これで完了です。
Postfix電子メールデータベースのセットアップ
11. これで、https://www.yourdomain.com/managedb
で phpMyAdmin インターフェースを開くことができます (managedb< であることに注意してください) は、phpMyAdmin データ ディレクトリ用に以前に設定したエイリアスです)。
これが機能しない場合は (伝播の遅延や DNS レコードの構成不足が原因である可能性があります)、当面は www.yourdomain.com の代わりにサーバーのパブリック IP アドレスを使用してみてください。 >:
いずれにしても、phpMyAdmin にログオンすると、次のインターフェイスが表示されます。左側のセクションで [新規] をクリックします。
データベースの名前 (この場合はEmailServer_db、照合順序を選択する必要はありません) を入力し、作成 をクリックします。
12. 次の画面で、最初のテーブル (このメール サーバーが管理するドメインを保存するテーブル) の 名前 を選択します。
このシリーズでは 1 つのドメインのみを管理する場合でも、後でさらに追加できることに注意してください) とそのドメインに必要なフィールドの数を指定して、[実行] をクリックします。これら 2 つのフィールドに名前を付けて構成するよう求められますが、次の図に示すように安全に続行できます。
ドメイン ID の [インデックス] で [プライマリ] を選択した場合は、デフォルト値を受け入れて [実行] をクリックします。
または、[SQL のプレビュー] をクリックして内部のコードを確認することもできます。
CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;
準備ができたら、[保存] をクリックして変更を確認します。 EmailServer_db の下の [New] をクリックしてテーブルの作成を続行できるようになります。
13. 次に、次の手順に従って残りのテーブルを作成します。 [SQL] タブをクリックし、各データベース オブジェクトに指定されたコードを入力します。
この場合、異なるテーブル間にリレーションシップを確立する必要があるため、SQL クエリを使用してテーブルを作成することを選択したことに注意してください。
ユーザー_tbl
CREATE TABLE `Users_tbl` (
`UserId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`password` VARCHAR(100) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`UserId`),
UNIQUE KEY `Email` (`Email`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
確認メッセージが表示されるはずです (そうでない場合は、phpMyAdmin が構文エラーのプロンプトを表示します)。
Alias_tbl
CREATE TABLE `Alias_tbl` (
`AliasId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`Source` varchar(100) NOT NULL,
`Destination` varchar(100) NOT NULL,
PRIMARY KEY (`AliasId`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
(テーブルの作成を続行するには、下部の [実行] をクリックします)。
この時点までに、次のデータベース構造が完成しているはずです。
つまり、次のセクションでレコードの追加を開始する準備ができています。
Postfix ドメイン、ユーザー、エイリアスの作成
14. 次に、次のレコードを 3 つのテーブルに挿入します。 [email および [email のパスワードと INSERT INTO Users_tbl ステートメントは暗号化されます。
また、[email に送信されたメールは [email にリダイレクトされることにも注意してください。
INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');
ドメイン、2 つのユーザー アカウント、および電子メール エイリアスを追加したら、このシリーズの次の記事で電子メール サーバーのセットアップを続ける準備が整いました。ここではDovecot と Postfix を構成します。強い>。
まとめ
この記事では、CentOS 7 VPS に Postfix 電子メール サーバーをインストールするために必要なパッケージをリストし、phpMyAdmin を使用して基盤となるデータベースを管理する方法を説明しました。
次の 2 つの記事では、ドメインの電子メール配信を処理する 2 つのプログラムの構成を確認し (パート 2)、スパムやウイルスに対する保護を追加する方法を示します ( > パート 3) をサーバーに適用します。
それまでの間、ご質問やご意見がございましたら、以下のフォームを使用してお気軽にお問い合わせください。