Postfix、Dovecot、MySQL、およびSpamAssassinを使用してメールサーバーを構成する方法
序章
このチュートリアルでは、Ubuntu 12.04でPostfix、Dovecot、MySQL、SpamAssassinを使用してメールサーバーを構成します。
このチュートリアルに続いて、仮想ドメイン、ユーザー、およびエイリアスを追加できるようになります。 さらに、仮想サーバーはスパムハブから保護されます。
前提条件
メールサーバーを設定する前に、VPSに次のものが必要です。
*ドメインはサーバーに転送しています(セットアップドメイン)
* 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
以下のプロトコルを有効にします(必要に応じてpop3を追加します)。 !include_try /usr/share/dovecot/protocols.d/*.protocol line
.
!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
}
変更する必要があります /etc/dovecot/dovecot-sql.conf.ext
カスタムMySQL情報を含むファイル:
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
変更する必要があります ENABLED
SpamAssassinデーモンを有効にするパラメータ。
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
接尾辞を変更する必要があります /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を使用してメールサーバーを正常にセットアップしました!