メールサーバの構築
概要
・先日作成したRedmine用にMailサーバを構築する(Redmineと同じサーバ上)
・イントラ内のみでの利用となるので、smtp-authは特に使用しない構成とする
環境
・メールサーバ名:mail.hogehoge.com
・ドメイン名:hogehoge.com
・メールサーバIPアドレス:192.168.20.101
・SMTP:postfix
・POP3/IMAP:dovecot
・OS:CentOS6
postfix構築
1.postfixインストール
# yum install postfix
・通常はOSインストール時にインストールされている
2.main.cf編集
# vi /etc/postfix/main.cf myhostname = mail.hogehoge.com #自FQDNを指定 mydomain = hogehoge.com #自ドメインを指定 myorigin = $mydomain #ローカルからのメール送信時の送信元メールアドレス@以降にドメイン名を付加 inet_interfaces = all #外部からのメール受信を許可 inet_protocols = ipv4 #ipv4のみサポート mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain #自ドメイン宛メールを受信できるようにする mynetworks = 127.0.0.0/8,192.168.20.0/24 #自ネットワークを記載 home_mailbox = Maildir/ #メールボックス形式をMaildir形式にする header_checks = regexp:/etc/postfix/header_checks #メールヘッダをチェックするルールを記載するファイル指定 body_checks = regexp:/etc/postfix/body_checks #メール本文をチェックするルールを記載するファイル指定 smtpd_banner = $myhostname ESMTP unknown #メールサーバーソフト名の隠蔽化 #以下最終行へ追記 message_size_limit = 10485760 #送受信メールサイズを10Mに制限 mailbox_size_limit = 1073741824 #メールボックスサイズを1Gに制限 #SMTP-Auth用設定(smtp-auth使用時のみ :dovcotを使用する) smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
3.header_checks 編集
# vi /etc/postfix/header_checks
#アドレスなしメール拒否
/^From:.*<#.*@.*>/ REJECT
/^Return-Path:.*<#.*@.*>/ REJECT
4.body_checks 編集
# vi /etc/postfix/body_checks
# 本文にfugafuga.netが含まれていたら拒否
/^(|[^>].*)fuafuga.net/ REJECT
5.サービス起動
# service postfix start # chkconfig postfix on
dovcotインストール
1.インストール
# yum -y install dovecot
2.dovecot.conf 編集(ipv6無効化)
# cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak # sed -e /^#listen/c"listen = *" /etc/dovecot/dovecot.conf.bak > /etc/dovecot/dovecot.conf # diff /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak 26c26 < listen = * --- > #listen = *, ::
3.10-auth.conf編集(プレーンテキスト認証の許可)
# cp -p /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak # sed -e /^#disable/c"disable_plaintext_auth = no" /etc/dovecot/conf.d/10-auth.conf.bak > /etc/dovecot/conf.d/10-auth.conf # diff /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak 9c9 < disable_plaintext_auth = no --- > #disable_plaintext_auth = yes
4.10-mail.conf 編集(メールボックス形式をMaildir形式とする)
# cp -p /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak # sed -e /^#mail_location/c"mail_location = maildir:~/Maildir" /etc/dovecot/conf.d/10-mail.conf.bak > /etc/dovecot/conf.d/10-mail.conf # diff /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak 30c30 < mail_location = maildir:~/Maildir --- > #mail_location =
5.10-master.conf 編集(smtp-auth使用時のみ)
# vi /etc/dovecot/conf.d/10-master.conf
#コメント行を解除し、user/groupを追記
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
6.サービス起動
# service dovecot start # chkconfig dovecot on
メールユーザ追加
・sshログインは許可しない
・homeディレクトリはメール用にディレクトリを用意する
1.新規作成ユーザ設定
・新規ユーザ作成時に、ホームディレクトリにメールボックスが作成されるようにする
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir/
2.ユーザ作成
# groupadd -g 10001 mailtest # useradd -g 10001 -u 10001 -d /hogehoge/mailhome/mailtest -s /sbin/nologin mailtest # passwd mailtest
サンプルスクリプト
・作業用なので特にエラー処理とかなし!
・第一引数にユーザ名、第二引数にGID/UIDを与える。(GIDとUIDは同値とする)
#!/bin/sh LOGDIR=/var/log/add_mailhome LOGFILE=${LOGDIR}/${1}.log #################### # check LOGDIR #################### if [ -d ${LOGDIR} ];then : else mkdir -p ${LOGDIR} fi #################### # make LOGFILE #################### if [ -f ${LOGFILE} ];then : else touch ${LOGFILE} fi #################### # main #################### echo -e "==start add_mailuser.sh user:${1} `date +%Y.%m.%d\ %H:%M`==" >> ${LOGFILE} groupadd -g ${2} ${1} >> ${LOGFILE} 2>&1 ERROR1=${?} if [ ${ERROR1} != 0 ];then echo -e "==finish add_mailuser.sh user:${1} `date +%Y.%m.%d\ %H:%M`==\n" >> ${LOGFILE} echo -e "登録失敗 \nログファイル:${LOGFILE}" else useradd -u ${2} -g ${2} -d /hogehoge/mailhome/${1} -s /sbin/nologin ${1} >> ${LOGFILE} 2>&1 ERROR2=${?} if [ ${ERROR2} != 0 ];then echo -e "==finish add_mailuser.sh user:${1} `date +%Y.%m.%d\ %H:%M`==\n" >> ${LOGFILE} echo -e "登録失敗 \nログファイル:${LOGFILE}" else echo "${1}" | passwd --stdin ${1} >> ${LOGFILE} 2>&1 echo -e "==finish add_mailuser.sh user:${1} `date +%Y.%m.%d\ %H:%M`==\n" >> ${LOGFILE} echo -e "登録成功\nログファイル:${LOGFILE}" fi fi exit 0