やわらかしかっけい

なんでもすぐに忘れてしまう自分のために

さくらVPS (CentOS6)で メールサーバー構築

メールサーバー構築する必要ある?

WordPressサイトだから、プラグインを使う方法もある
www.adminweb.jp

けど、まぁ構築の仕方を経験しておきたいというのもあり、やってみることにする

参考記事

qiita.com

1. DNSレコードを登録

  • Aレコード
    • mail.xxx.com
  • MX レコード
    • VALUE : mail.xxx.com
    • 優先度 10

help.onamae.com

2. ポートを開ける

  • SMPT(25)
  • SMTPS(465)
  • STARTTLS(587)
  • IMAPS(993)
  • POP3S(995)

knowledge.sakura.ad.jp

3. Let'sEncrypt サブドメイン追加

www.yoidukigembu.com

途中で certbot-autoちゃんが見つからず泣きそうになったが、

# find -name 'certbot-auto'

してみたら、/root/に入っていることが判明。
なので実行は、以下です

# /root/certbot-auto certonly

expandコマンド・・・?!

ドメイン追加うまくいかず、、
結局またrevokeして入れ直したわけだが、
どうやらサブドメイン追加用のexpandコマンドというのがあるらしい
qiita.com

次回試す

4. postfixdovecotの設定

ここからが大変なんだよね、、、、

blog.apar.jp
ほぼ完全にこれにしたがって進めていく

  • systemctl restart xxxxx になってるところは、
  • service xxxxx restart に置き換えて

ちまちま進めていく。

5. SMTP認証設定

システムのユーザーをメールの認証に使うためには、
これが必要だった

#  /etc/rc.d/init.d/saslauthd start (saslauthd起動)
# chkconfig saslauthd on (常に起動設定)

6. メールソフトの設定

gmail

links-creations.com

SMTP認証がされない、、、、、、
つづく

エラーにエラーの入り口

postfixのエラーっぽかったので、

cat /var/log/mail/maillog

でエラーコードを見てみたところ、
/etc/postfix/master.cf

  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

の -o が抜けてたことが判明、直す。
するとWordPressのコンタクトフォーム経由のメールは送れるようになった。

が、まだSMTP認証が通らない。

d.hatena.ne.jp


上記記事をみてエイリアスも確認したんだが、、

ウー

ポートが空いているかどうか調べる

# netstat -nap

ポートが空いてるか調べる – Linux memo

25も587も開いてる
www.cman.jp

やはり認証が通らない

あちこち(postfix/master.cfなどを)いじくり回していたら、
メールの受信だけはできるようになり、
mail/maillogのエラー文も様子が変わって来た。

SASL LOGIN authentication failed

GMailの送信画面で、

  • ポートは587
  • 接続方式はSSL

にしてみたら、通った!

Macメーラーでは

  • ポート 587
  • 認証:パスワード

にしてみたら、通った!

やった〜〜〜〜〜〜〜〜!

設定メモ

main.cf

myhostname = mail.xxxx.com
mydomain = xxxx.com
myorigin = $myhostname
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 168.100.189.0/28, 127.0.0.0/8, 192.168.0.0/24, 153.xxx.xxx.0/24 (これ全部必要かは不明)
relay_domains = $mydestination
relayhost =
home_mailbox = Maildir/

# SMTP-Auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes

# permit sasl authebticated
smtpd_recipient_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_unauth_destination

# receive mail size
mailbox_size_limit = 209715200
message_size_limit = 5242880

#### for spam
#client
smtpd_client_restrictions =
    check_client_access hash:/etc/postfix/access
    reject_rbl_client zen.spamhaus.org
    reject_non_fqdn_sender
    reject_unknown_sender_domain

#envelope address
smtpd_sender_restrictions =
        reject_rhsbl_sender zen.spamhaus.org
        reject_unknown_sender_domain

disable_vrfy_command = yes
smtpd_helo_required = yes

# SSL
smtp_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/aisa.site/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/aisa.site/privkey.pem

# tls log level 0_1_2
smtpd_tls_loglevel = 1

# about_tls received header
smtpd_tls_received_header = yes

# cache file
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s

master.cf

smtp	  inet  n	-	n	-	-	smtpd
submission inet n	-	n	-	-	smtpd
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_tls_wrappermode=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Let's Encrypt 入れ直し+複数ドメイン

Let's Encrypt 入れた&自動更新設定してある。
他のドメインを追加したい。

→証明書取り直しが手っ取り早かった


d.hatena.ne.jp

ほぼこれ通りに。

certbot の部分は certbot-autoで

失効処理 参考

yoshinorin.net

certbot 入れ直し 参考

ajicolor.hatenablog.jp

certbot-auto 実行

./certbot-auto certonly --webroot -w /var/www/html/フォルダ1 -d ドメイン1.com  -w /var/www/html/フォルダ2 -d ドメイン2.com

こういうことだそうです

Webサーバ(Apache や nginx など)が動作している環境において、
複数のドメイン名に対応する1枚の証明書を取得する場合:
複数のドメイン名に対応する1枚の SSL/TLS サーバ証明書を取得する場合には、ドメイン名ごとに DocumentRoot が異なる場合があるため、それぞれのドメイン名に対応する DocumentRoot を個別に指定することができます。
複数のドメイン名を指定した場合、それぞれのドメイン名に対して、最後に指定した DocumentRoot --webroot-path (省略形 -w )が適用されます。
例えば、
certbot certonly --webroot -w /var/www/example/ -d www.example.com -d example.com -w /var/www/other -d other.example.net -d another.other.example.net
と指定した場合、指定した全てのドメイン名(www.example.com, example.com, other.example.net, another.other.example.net)に使用可能な1枚の SSL/TLS サーバ証明書が発行されます。
ドメイン使用権者の認証の際には、ドメイン名 www.example.comexample.com に対しては DocumentRoot /var/www/example/ が使用され、ドメイン名 other.example.net と another.other.example.net に対しては DocumentRoot /var/www/other が使用されます。

https://letsencrypt.jp/usage/#ExecClientSoftware

実行する前に

使うドメインDNS設定とかをちゃんと済ませておくこと

vdeep.net

お名前.com で取ったドメインを使う

ひっかかりポイント

DNS レコードやAレコードに問題ありますよ・・・・」

みたいなエラーメッセージが出がち

.htaccess が原因だったので、
Basic認証HTTPSリダイレクトに関わる記述は全て取り除いておくこと!!

sole-color-blog.com

最後にVirtual Host

<VirtualHost *:443>
  ServerAdmin root@ドメイン3.com
  DocumentRoot /var/www/html/フォルダ3
  ServerName ドメイン3.com
<Directory "/var/www/html/フォルダ3">
AllowOverride All
</Directory>
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/ドメイン1.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン1.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/ドメイン1.com/chain.pem
</VirtualHost>

1枚の証明書で複数のドメインを証明するので、
SSL証明書のありかはいずれも1つめのドメイン名のフォルダを指定する

ベーシック認証によるアクセス制限

.htaccessの中身の書き方

特定のファイルに制限

<Files ファイル名.php>
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /任意の場所/.htpasswd
require valid-user
</Files>

その.htaccessがあるフォルダごと制限

AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /任意の場所/.htpasswd
require valid-user

.htpasswdの書き方

user1:passxxxxxxxxxxxxxxx
user2:passxxxxxxxxxxxxxxx

という感じで改行とコロンで区切って書く。変換はどうにかうまいことやる

IPアドレスでの制限

wp-admin内に置く.htaccess

Order deny,allow
Deny from all 00.000.00.000

    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none