序章

このチュートリアルでは、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_certssl_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を使用してメールサーバーを正常にセットアップしました!