Postfix、Dovecot、MySQL、およびSpamAssassinを使用してメールサーバーを構成する方法
序章
このチュートリアルでは、Ubuntu 12.04でPostfix、Dovecot、MySQL、SpamAssassinを使用してメールサーバーを構成します。
このチュートリアルに続いて、仮想ドメイン、ユーザー、およびエイリアスを追加できるようになります。 さらに、仮想サーバーはスパムハブから保護されます。
前提条件
メールサーバーを設定する前に、VPSに次のものが必要です。
- ドメインはサーバーに転送しています( setup domain )
- MySQLがインストールおよび構成されています( setup mysql )
*ユーザーroot権限(新規ユーザーのセットアップ-ステップ5を省略)* FQDNを構成および識別します(FQDNのセットアップ)
オプション:SSL証明書(無料の署名付きSSL証明書のセットアップ)
オプション(rootユーザーとしてログイン)
すべての権限があるため、rootユーザーとしてパッケージをインストールすると便利です。
sudo -i
ユーザーのパスワードを紹介します。 'が成功すると、$
の記号が#
に変わります。
ステップ1:パッケージをインストールする
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
Postfix設定のプロンプトが表示されたら、インターネットサイトを選択します。
Postfix設定はシステムメール名について尋ねます–あなたはあなたのFDQNまたはメインドメインを使うことができます。
ステップ2:MySQLデータベース、仮想ドメイン、ユーザー、エイリアスを作成する
インストールが完了したら、MySQLデータベースを作成して、3つの異なるテーブルを構成します。1つはドメイン用、1つはユーザー用、最後の1つはエイリアス用です。
データベースにservermail
という名前を付けますが、任意の名前を使用できます。
servermailデータベースを作成します。
mysqladmin -p create servermail
MySQLrootユーザーとしてログインします
mysql -u root -p
MySQLルートのパスワードを入力します。 成功した場合は、次のように表示されます。
mysql >
まず、メール認証に固有の新しいユーザーを作成する必要があります。次に、SELECT権限を付与します。
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword';
その後、MySQL権限をリロードして、それらの権限が正常に適用されるようにする必要があります。
mysql > FLUSH PRIVILEGES;
最後に、データベースを使用してテーブルを作成し、データを導入する必要があります。
mysql> USE servermail;
許可されたドメインとして認識された特定のドメインのテーブルを作成します。
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ユーザーを紹介するテーブルを作成します。 ここで、メールアドレスとパスワードを追加します。 各ユーザーをドメインに関連付ける必要があります。
CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
最後に、仮想エイリアステーブルを作成して、他の電子メールに転送するすべての電子メールを指定します。
CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3つのテーブルが正常に作成されました。 次に、データを紹介します。
仮想ドメイン
ここでは、virtual_domainsテーブル内にドメインを紹介します。 必要なすべてのドメインを追加できますが、このチュートリアルでは、プライマリドメイン(example.com)とFQDN(hostname.example.com)のみを紹介します。
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com');
仮想メール
各ドメインに関連付けられているメールアドレスとパスワードを紹介します。 すべての情報を特定の情報に変更してください。
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');
仮想エイリアス
他のメールアドレス(宛先)に転送するメールアドレス(送信元)を紹介します。
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', '[email protected]', '[email protected]');
MySQLを終了します
mysql > exit
ステップ3:Postfixを設定する
SMTP接続を処理し、MySQLデータベースに導入された各ユーザーにメッセージを送信するようにPostfixを設定します。
デフォルト構成に戻したい場合に備えて、最初にデフォルトファイルのコピーを作成する必要があります。
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
main.cfファイルを開いて変更します。
nano /etc/postfix/main.cf
まず、TLSパラメータにコメントを付け、他のパラメータを追加する必要があります。 このチュートリアルでは、無料のSSL証明書と、チュートリアルで提案されているパス( link )を使用していますが、個人の構成に応じて変更できます。
# TLS parameters #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes
次に、前の手順で変更したTLS設定の下に次のパラメーターを追加します。
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
mydestination
のデフォルト設定をコメント化し、localhost
に置き換える必要があります。 この変更により、VPSはMySQLテーブル内の仮想ドメインを使用できるようになります。
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost
myhostnameパラメーターがFQDNで設定されていることを確認します。
myhostname = hostname.example.com
MySQLテーブル内にリストされているすべての仮想ドメインへのローカルメール配信について、次の行を追加します。
virtual_transport = lmtp:unix:private/dovecot-lmtp
最後に、これら3つのパラメーターを追加して、仮想ドメイン、ユーザー、およびエイリアスを構成するようにPostfixに指示する必要があります。
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
PostfixにMySQLとの接続方法を指示するために、main.cfファイルに追加する最後の3つのファイルを作成します。
まず、mysql-virtual-mailbox-domains.cf
ファイルを作成する必要があります。 個人の設定に応じて値を変更する必要があります。
nano /etc/postfix/mysql-virtual-mailbox-domains.cf user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s'
次に、Postfixを再起動する必要があります。
service postfix restart
Postfixがドメインを検出することを確認する必要があるため、次のコマンドでドメインをテストする必要があります。 成功した場合は、1を返す必要があります。
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
次に、mysql-virtual-mailbox-maps.cfファイルを作成する必要があります。
nano /etc/postfix/mysql-virtual-mailbox-maps.cf user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s'
Postfixを再起動する必要があります。
service postfix restart
この時点で、Postfixが次のコマンドを使用して最初のメールアドレスを確実に検出するようにします。 成功した場合は1を返す必要があります。
postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
最後に、PostfixとMySQL間の接続を構成するための最後のファイルを作成します。
nano /etc/postfix/mysql-virtual-alias-maps.cf user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s'
Postfixを再起動します
service postfix restart
Postfixがエイリアスを検出できることを確認する必要があります。 次のコマンドを入力すると、エイリアスに転送されたメールが返されます。
postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf
ポート587が電子メールクライアントと安全に接続できるようにする場合は、/ etc / postfix/master.cfファイルを変更する必要があります
nano /etc/postfix/master.cf
これらの行のコメントを解除し、他のパラメーターを追加する必要があります。
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
場合によっては、ポート587が開いていることを確認するためにPostfixを再起動する必要があります。
service postfix restart
注:このツールを使用してドメインポートをスキャンし、ポート25と587が開いていることを確認できます( http://mxtoolbox.com/SuperTool.aspx )
ステップ4:Dovecotを構成する
変更する7つのファイルをコピーして、必要に応じてデフォルトに戻すことができるようにします。 次のコマンドを1つずつ入力します。
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
Dovecotから構成ファイルを編集します。
nano /etc/dovecot/dovecot.conf
このオプションのコメントが外されていることを確認します。
!include conf.d/*.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol line
の下でプロトコルを有効にします(必要に応じてpop3を追加します)。
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
次に、メール構成ファイルを編集します。
nano /etc/dovecot/conf.d/10-mail.conf
mail_location
行を見つけてコメントを外し、次のパラメーターを入力します。
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group
行を見つけてコメントを外し、次のようにメールパラメータを追加します。
mail_privileged_group = mail
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
権限を確認する
次のコマンドを入力します。
ls -ld /var/mail
権限が次のようになっていることを確認します。
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail
MySQLテーブルに登録するドメインごとにフォルダを作成します。
mkdir -p /var/mail/vhosts/example.com
IDが5000のvmailユーザーとグループを作成します
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail
/var/mail
フォルダーの所有者をvmailユーザーに変更する必要があります。
chown -R vmail:vmail /var/mail
次に、/etc/dovecot/conf.d/10-auth.conf
ファイルを編集する必要があります。
nano /etc/dovecot/conf.d/10-auth.conf
プレーンテキスト認証のコメントを解除し、次の行を追加します。
disable_plaintext_auth = yes
auth_mechanisms
パラメーターを変更します:
auth_mechanisms = plain login
この行にコメントします:
#!include auth-system.conf.ext
次の行のコメントを解除して、MySQL認証を有効にします。
!include auth-sql.conf.ext
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
認証用の情報を使用して/etc/dovecot/dovecot-sql.conf.extファイルを作成する必要があります。
nano /etc/dovecot/conf.d/auth-sql.conf.ext
ファイルに次のコードを入力します。
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
カスタムMySQL情報を使用して/etc/dovecot/dovecot-sql.conf.ext
ファイルを変更する必要があります。
nano /etc/dovecot/dovecot-sql.conf.ext
ドライバパラメータのコメントを解除し、mysqlをパラメータとして設定します。
driver = mysql
接続回線のコメントを解除し、MySQL固有の情報を紹介します。
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword
default_pass_scheme
行のコメントを解除し、SHA-512
に変更します。
default_pass_scheme = SHA512-CRYPT
password_query
行のコメントを解除し、次の情報を追加します。
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
dovecotフォルダーの所有者とグループをvmailユーザーに変更します。
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot
/etc/dovecot/conf.d/10-master.conf
ファイルを開いて変更します(異なるパラメーターが変更されるので注意してください)。
nano /etc/dovecot/conf.d/10-master.conf ##Uncomment inet_listener_imap and modify to port 0 service imap-login { inet_listener imap { port = 0 } #Create LMTP socket and this configurations service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} }
unix_listener
パラメータを次のようにservice_auth
に変更します。
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot }
service auth-worker
を次のように変更します。
service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail }
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
最後に、DovecotからSSL構成ファイルを変更します(デフォルト構成を使用する場合は、この手順をスキップしてください)。
# nano /etc/dovecot/conf.d/10-ssl.conf
sslパラメータを必須に変更します。
ssl = required
そして、ssl_cert
とssl_key
のパスを変更します。
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem
Dovecotを再起動します
service dovecot restart
ポート993が開いていて機能していることを確認する必要があります(pop3を有効にする場合は、ポート995も確認する必要があります)。
telnet example.com 993
おめでとうございます。メールサーバーが正常に構成され、メールクライアントを使用してアカウントをテストできます。
- Username: [email protected] - Password: email1's password - IMAP: example.com - SMTP: example.com
注:安全なIMAPにはポート993を使用し、SMTPにはポート587または25を使用します。
ステップ5:SpamAssassinを設定する
まず、SpamAssassinをインストールする必要があります。
apt-get install spamassassin spamc
次に、SpamAssassinのユーザーを作成する必要があります。
adduser spamd --disabled-login
SpamAssassinを正常に構成するには、構成設定を開いて変更する必要があります。
nano /etc/default/spamassassin
SpamAssassinデーモンを有効にするには、ENABLED
パラメーターを変更する必要があります。
ENABLED=1
ホームとオプションのパラメータを設定する必要があります。
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log"
次に、次のようにPID_File
パラメーターを指定する必要があります。
PIDFILE="${SPAMD_HOME}spamd.pid"
最後に、SpamAssassinのルールが自動的に更新されるように指定する必要があります。
CRON=1
注:これらの変更をこのファイルと比較して、間違いやエラーを検出してください。
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
スパム対策ルールを設定するには、/etc/spamassassin/local.cf
を開く必要があります。
nano /etc/spamassassin/local.cf
SpamAssassinは各メールにスコアを付け、このメールがスパムチェックで5.0より大きいと判断した場合、自動的にスパムと見なされます。 次のパラメータを使用して、スパム対策ルールを設定できます。
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0
Postfix /etc/postfix/master.cf
ファイルを変更して、各メールがSpamAssassinでチェックされるようにする必要があります。
nano /etc/postfix/master.cf
次に、次の行を見つけて、spamassassinフィルターを追加する必要があります。
smtp inet n - - - - smtpd -o content_filter=spamassassin
最後に、次のパラメータを追加する必要があります。
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
メールからのスパムの検証を開始するには、SpamAssassinを起動してPostfixを再起動する必要があります。
service spamassassin start service postfix restart
おめでとうございます! MySQL認証とSpamAssassinによるスパムフィルタリングを備えたPostfixとDovecotを使用してメールサーバーを正常にセットアップしました!