将欲奪之、必固與之。

いろいろなこと

メールサーバの構築

概要

・先日作成した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