CentOS7にpostfixを使ってメールサーバを構築する手順です。
PostfixはSMTPサーバとしての機能を提供します。受信サーバとしてはDovecotを利用しますが、それは別の投稿で扱います。
ユーザ名は【hoge】
ドメインは【jdbc.tokyo】
ホスト名は【mail.jdbc.tokyo】
だと仮定して説明します。
SSL/TLSの利用を前提としているのでまずサーバ証明書を用意してください。
証明書を作成するディレクトリを作成・移動し、適当なファイルを作成します。
1 2 3 4 |
mkdir /etc/pki/tls/certs/mail/ cd /etc/pki/tls/certs/mail/ # /home/hoge/*の部分は、いろんなファイルが存在する実在のディレクトリに置き換えてください。 openssl md5 /home/hoge/* > rand.txt |
(以前このサイトでは、viでファイルを作成して、適当な文字列を入力する方法を紹介していました。しかし、当サイトをコピペしてしまうと同一のファイルが出来上がることに気づいたため、ハッシュ値を用いる方法に変更しています。)
3DESで2048bitの秘密鍵を作成します。
1 2 3 |
openssl genrsa -rand rand.txt -des3 2048 > private.key Enter pass phrase: ## 秘密鍵のパスフレーズを入力 Verifying - Enter pass phrase: ## 再入力 |
秘密鍵のパスフレーズを解除して、パスフレーズなしで読み込めるようにしておきます。
1 2 |
openssl rsa -in private.key -out private.key Enter pass phrase: ## 先ほど作った秘密鍵のパスフレーズを入力 |
有効期限10年の自己証明書を作成し、パーミッションを変更しておきます。
1 2 3 4 5 6 7 8 9 |
openssl req -new -x509 -days 3650 -key private.key -out self.crt Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Chuo-ku Organization Name (eg, company) [Default Company Ltd]:jdbc.tokyo Organizational Unit Name (eg, section) []:jdbc project Common Name (eg, your name or your server's hostname) []:mail.jdbc.tokyo Email Address []:samplename@jdbc.tokyo chmod 400 ./* |
※もし、自己証明書ではなく認証局を用いる場合はこちらを参考にしてください。
※その場合中間証明書は、サーバ証明書→中間証明書の順番で、サーバ証明書のファイル内に記載してください。
必要なパッケージをインストールします。
(たぶんCentOS7には標準で入っています。最小構成でインストールとかしていたら無いかもしれないので念の為)
1 2 |
yum install procmail yum install postfix |
procmailの設定ファイルの作成
1 |
vi /etc/procmailrc |
1 2 3 4 5 6 7 |
# 記入 SHELL=/bin/bash PATH=/bin:/usr/bin DROPPRIVS=yes MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOGFILE=$MAILDIR/procmail.log |
Unixパスワード認証ではなくCyrus SASLパスワードファイルを利用する設定
1 |
vi /etc/sasl2/smtpd.conf |
1 2 |
pwcheck_method: auxprop #変更する mech_list: plain #plainがあることを確認する(SSL/TLSを使うので平文認証でOK) |
SMTP認証用のパスワードを作成します。※パスワードを求められるので入力してください。
1 |
saslpasswd2 -c -u jdbc.tokyo hoge |
パスワードファイルをpostfixが読みに行けるよう、所有権とパーミッションの変更
1 2 |
chgrp postfix /etc/sasldb2 chmod 640 /etc/sasldb2 |
いよいよpostfixの設定
1 |
vi /etc/postfix/main.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# ここから暫くはコメント解除や変更すべき項目 myhostname = mail.jdbc.tokyo mydomain = jdbc.tokyo #↓送信するアドレスに付与するドメイン名 今回は@jdbc.tokyoにする myorigin = $mydomain #↓すべてのメールを受け取る inet_interfaces = all #↓$mydomainを追加して@jdbc.tokyoもローカル配送先として扱う mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # リレーを許可するドメインの設定 relay_domains = $mydestination #↓メールボックスのディレクトリはMaildir home_mailbox = Maildir/ #↓procmailまでのパスが間違っているので正しておく mailbox_command = /usr/bin/procmail # これ以降はすべて追記 #vrfyコマンドを無効化する。 disable_vrfy_command = yes #HELOコマンドを要求する。 smtpd_helo_required = yes #saslを使ってSMTP AUTHする smtpd_sasl_auth_enable = yes # $mydomainのリレー許可 smtpd_sasl_local_domain = $mydomain # anonymousログインは拒否 smtpd_sasl_security_options = noanonymous # 古いメールクライアント用に、AUTH=を返答する broken_sasl_auth_clients = yes # SSL/TLSで暗号化する smtpd_use_tls = yes # サーバ証明書までのパスを指定 smtpd_tls_cert_file = /etc/pki/tls/certs/mail/self.crt # サーバ証明書の秘密鍵までのパスを指定 smtpd_tls_key_file = /etc/pki/tls/certs/mail/private.key # TLSセッションのキャッシュDB smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache # 添付ファイルのサイズを10MBまでに message_size_limit = 10485760 # この後指定するRBLでリジェクトするときのSMTP応答コードの設定 maps_rbl_reject_code = 550 # RBLでリジェクトした際のメッセージをuser unknownに設定 default_rbl_reply = $rbl_code <$recipient>: Recipient address rejected: User unknown in local recipient tables # MAIL FROM(送信者)アドレス制限 smtpd_sender_restrictions = reject_non_fqdn_sender, reject_invalid_hostname, reject_unknown_sender_domain, permit # クライアントホスト名・IPアドレス制限 smtpd_client_restrictions = permit_mynetworks, reject_rbl_client b.barracudacentral.org, reject_rbl_client bb.barracudacentral.org, reject_rbl_client all.rbl.jp, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, reject_rhsbl_client multi.uribl.com, reject_rhsbl_client dbl.spamhaus.org, permit # RCPT TO(受信者)アドレス制限 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, permit_auth_destination, reject |
途中で出てきたreject_rbl_clientやreject_rhsbl_client等で指定しているサーバは、不正な送信元ドメインやIPのブラックリストを提供する団体のアドレスです。
(不正中継やスパムを送ったことのある不届き者たちが登録されている)
・・・が、不正を働く方以外にも、サーバを乗っ取られたり不正にSMTPログインされてスパムの中継に使われたりしたかわいそうな(?)サーバが登録されている可能性があります。
つまり正当なサーバであってもブラックリストに登録されている可能性があるということです。
なので、万が一業務で使うサーバなどにこの設定を利用したいと考えていらっしゃる方がいましたら慎重に検討してください。
master.cfの編集
1 |
vi /etc/postfix/master.cf |
1 2 3 4 |
# 下記項目のコメント削除 smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes |
メールディレクトリの作成
1 2 3 4 5 6 |
mkdir -p /home/hoge/Maildir/{cur,new,tmp} chmod -R 700 /home/hoge/Maildir chown -R hoge:hoge /home/hoge/Maildir mkdir -p /etc/skel/Maildir/{cur,new,tmp} chmod -R 700 /etc/skel/Maildir/ |
postfixを自動起動する設定
1 2 |
systemctl start postfix.service systemctl enable postfix.service |
ポートを開放
1 2 3 4 |
firewall-cmd --zone=public --add-service=smtp --permanent #↓service=smtpsは用意されていないぽいので代わりにポート指定。。 firewall-cmd --zone=public --add-port=465/tcp --permanent firewall-cmd --reload |
以上で設定完了です。
続いてdovecotの設定に移ります!
[…] ← 前 […]