CentOS6.8 メールサーバー構築
レンタルサーバーだとあっさり使えるメール・・
自分で構築するとなると色々とセキュリティ面が心配になったり、私のような初心者には結構ハードルが高いです。
なので、一度作ってみて、ログを監視して経過観察する方向で構築したのでメモ。
・・まぁほぼ参考サイトの色んなところを取ってきただけなので、詳しい説明は参考サイトへどうぞ!
・バーチャルユーザー
・465ポート(smtps)での通信
◆参考サイト
https://blog.apar.jp/linux/3979/
http://oxynotes.com/?p=4684
https://centossrv.com/postfix.shtml
http://toriaezu-engineer.hatenablog.com/entry/2017/02/12/093509
◆ドメイン(DNS)の設定
TXT v=spf1 ip4:【サーバーのIP】/24 ~all
mail A 【サーバーのIP】
MX mail.【ドメイン】 50
◆Let’s Encryptで証明書取得
以前の記事にて紹介。
mail.【ドメイン】の証明書を使います。
◆メール用ユーザー作成
groupadd -g 10000 mailuser
useradd -u 10000 -g mailuser mailuser
◆メール保管場所作成
mkdir /var/spool/virtual
chown -R mailuser:mailuser /var/spool/virtual
◆postfix設定
yum -y install postfix
cp -p /etc/postfix/main.cf /etc/postfix/main.cf.bk
vi /etc/postfix/main.cf
myhostname = mail.【ドメイン】 mydomain = 【ドメイン】 inet_interfaces = all #inet_interfaces = localhost inet_protocols = all #mydestination = $myhostname, localhost.$mydomain, localhost #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # virtualドメイン利用時は不要 mydestination = mynetworks = 192.168.0.0/24, 127.0.0.0/8 relay_domains = $mydestination #home_mailbox = Mailbox home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown ########## TLS/SSL関連 ########## # TLSを有効化 smtpd_use_tls = yes # 宛先のメールサーバがTLSに対応していれば、通信を暗号化する smtp_tls_security_level = may # サーバ証明書と秘密鍵を指定 smtpd_tls_cert_file = /etc/letsencrypt/live/【ドメイン】/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/【ドメイン】/privkey.pem # TLSログレベルの設定 # 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て smtpd_tls_loglevel = 1 # 暗号に関する情報を "Received:" メッセージヘッダに含める smtpd_tls_received_header = yes # 認証を通過したものはリレーを許可する(permit_sasl_authenticated) smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination smtpd_sasl_security_options = noanonymous message_size_limit = 10485760 # 仮想的なユーザーが所属するドメイン。mydestinationと同様にカンマor半角スペース区切りで複数指定可能。 virtual_mailbox_domains = 【ドメイン】 # メールの保存先 virtual_mailbox_base = /var/spool/virtual # 仮想的なユーザーとメールの保存先・ディレクトリがマッピングhash形式のファイル virtual_mailbox_maps = hash:/etc/postfix/vmailbox # 保存するメールのOS上のオーナーとグループを指定 virtual_uid_maps = static:10000 virtual_gid_maps = static:10000
cp -p /etc/postfix/master.cf /etc/postfix/master.cf.bk
vi /etc/postfix/master.cf
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
◆dovecot設定
yum -y install dovecot
・dovecot基本設定
cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bk
vi /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp listen = *
・平文で通信する imap と pop3 は無効
cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.bk
vi /etc/dovecot/conf.d/10-master.conf
service imap-login { inet_listener imap { #port = 143 ↓ port = 0 } inet_listener imaps { #port = 993 #ssl = yes ↓ port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { #port = 110 ↓ port = 0 } inet_listener pop3s { #port = 995 #ssl = yes ↓ port = 995 ssl = yes } }
・暗号化設定
cp -p /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bk
vi /etc/dovecot/conf.d/10-auth.conf
#disable_plaintext_auth = yes disable_plaintext_auth = no #auth_mechanisms = plain #auth_mechanisms = plain login auth_mechanisms = cram-md5 plain login !include auth-passwdfile.conf.ext !include auth-static.conf.ext
・SSL設定
cp -p /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.bk
vi /etc/dovecot/conf.d/10-ssl.conf
ssl = yes #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem ssl_cert = </etc/letsencrypt/live/【ドメイン】/fullchain.pem ssl_key = </etc/letsencrypt/live/【ドメイン】/privkey.pem
・メールボックスをバーチャルユーザーの配下に設定
cp -p /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bk
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/spool/virtual/%d/%n
・dovecotユーザー設定(/etc/dovecot/passwdをユーザー設定として使用する)
cp -p /etc/dovecot/conf.d/auth-passwdfile.conf.ext /etc/dovecot/conf.d/auth-passwdfile.conf.ext.bk
vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb { driver = passwd-file args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd } userdb { driver = passwd-file args = username_format=%u /etc/dovecot/passwd }
cp -p /etc/dovecot/conf.d/auth-static.conf.ext /etc/dovecot/conf.d/auth-static.conf.ext.bk
vi /etc/dovecot/conf.d/auth-static.conf.ext
userdb { driver = static args = uid=10000 gid=10000 home=/var/spool/virtual/%d/%n }
◆自動起動&起動
chkconfig postfix on
chkconfig dovecot on
chkconfig saslauthd on
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/saslauthd start
◆メールエイリアスの変更
vi /etc/aliases
info: postmaster ↓ #info: postmaster # root宛のメールの送信先を変更 #root: marc root: 【自分のメールアドレス】
◆cyrus-saslインストール
yum -y install cyrus*
◆送信テスト
・telnetをテスト送信用にインストール
yum -y install telnet
http://ash.jp/net/telnet_smtp.htm
例
telnet localhost 25 HELO localhost MAIL FROM: foo@【ドメイン】 RCPT TO: 【自分のメールアドレス】 DATA From:root To:【自分のメールアドレス】 This is test mail from telnet . quit
◆ポート開放
smtps(465)ポートをあける、imaps(993)は必要であれば
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
/etc/init.d/iptables restart
◆権限変更
sasldb2のパーミッション・グループ変更
※初期時、一度設定
chmod 640 /etc/sasl2/
chgrp postfix /etc/sasl2/
◆受信ユーザー追加
・ユーザー追加
vi /etc/postfix/vmailbox
info@【ドメイン】 【ドメイン】/info/
・反映
postmap /etc/postfix/vmailbox
・パスワードのハッシュ値取得
doveadm pw
・ユーザーパスワード設定
vi /etc/dovecot/passwd
info@【ドメイン】:{CRAM-MD5}e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6:mailuser:mailuser::/var/spool/virtual/【ドメイン】/info
## フォーマット
## メールアドレス:パスワード:ユーザー:グループ:コメント(空でも可):メールパス
◆送信ユーザー追加
・一覧表示
sasldblistusers2
・追加
saslpasswd2 -u my_domain.jp -c username
・パスワード変更
saslpasswd2 -u my_domain.jp username
・削除
saslpasswd2 -u my_domain.jp -d username
構築してみたものの・・色々不安なので、/var/log/maillogをしっかりチェックして悪質なログがないかチェックしたいと思います。。
特にinfo@はよく攻撃くるので簡単なパスワードにはしないようにしませう。