読者です 読者をやめる 読者になる 読者になる

ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

バーチャルホストのメールサーバ④

CentOS7 Dovecot 哲学 PostfixAdmin Postfix MariaDB Apache2 firewalld selinux

(枕話)哲学入門

まずはこれを見て欲しい。

史上最強の哲学入門 (河出文庫)

史上最強の哲学入門 (河出文庫)


先日この本を入手した。
また積んである状態だが、読む本リスト・エントリーNo.2で控えている。
現在は西洋哲学史 下巻を読んでいる最中である。

史上最強の哲学入門の作者、飲茶氏は言う。

今までの哲学入門書には何が足りなかったのか。
そう、「バキ」成分である。

ボクは激しく同意した。
すべての学問は哲学が源流である。
つまりすべての学問には「範馬」の名に相当するような、最強の血が流れているわけである。
彼らは数々の猛者との論争たたかいを繰り広げ、より最強の真実を、より最強の正しさを求めて続けた。
ソクラテス然り、
プラトン然り、
デカルト然り、
カント然り、
フッサール然り、
ハイデガー然り、
ジャック・ハンマー然りである。
累々たる理論に対して、破壊、混沌、分類、再構築、ドーピングを繰り返し、現代でも正しさや、生き方についての疑問を投じる手段として使用される。

もちろんそれは我々のような武器を持たざるもの拳や戦闘技術が安易に手を出せるものではないのだが、史上最強の哲学入門は、初めて持つ武器、となってくれることであろう。

この世には、地上最強の腕力、史上最強の哲学、そしてもう一つの最強がある。
電子上最強のOS(無理矢理過ぎて哀愁)。
現存する正式なUNIXにはデニス・リッチー(Dennis MacAlistair Ritchie)の血が流れている。
いずれボクも、彼から正式な血を引く息子(のような気持ちでいる者)として、「電子上最強のOS入門」とかいう本を書けたら良いなと思う。

前回からの続き

tokixy56.hatenablog.com
tokixy56.hatenablog.com
tokixy56.hatenablog.com

PostfixAdminの設定

PostfixAdminの入手

本家サイト: Postfix Admin - Web based administration interface

PostfixAdminソフトは下記からダウンロード可能。
ダイレクトリンク

PostfixAdmin入手、解凍、移動
$ wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz
$ tar xzvf postfixadmin-2.92.tar.gz
$ sudo mv postfixadmin-2.93 /var/www/html/postfixadmin
/var/www/html/postfixadmin/config.local.php

移動したディレクトリ内に、新規にこのファイルを作成する。

<?php
$CONF['configured'] = true;
//setup.phpで作成された文字列を設定する。
$CONF['setup_password'] = 'ハッシュ値';
$CONF['default_language'] = 'ja';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'パスワード';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'メールアドレス';
$CONF['alias_domain'] = 'YES';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['show_password'] = 'YES';
$CONF['show_footer_text'] = 'NO';
$CONF['emailcheck_resolve_domain']='NO';
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['new_quota_table'] = 'YES';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
$CONF['aliases'] = '100';
$CONF['maxquota'] = '0';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
$CONF['encrypt'] = 'md5crypt';
$CONF['user_footer_link'] = "http://ドメイン/postfixAdmin/users/main.php";
$CONF['mailbox_postcreation_script'] = 'sudo /var/www/html/postfixadmin/postfixadmin-mailbox-postcreation.sh';
$CONF['mailbox_postdeletion_script']='sudo /var/www/html/postfixadmin/postfixadmin-mailbox-postdeletion.sh';
$CONF['domain_postdeletion_script']='sudo /var/www/html/postfixadmin/postfixadmin-domain-postdeletion.sh';
?>

上記が設定し終わったら、http://ドメイン/postfixadmin/setup.phpへアクセスする。
このページを表示すると、何が足りないとかメッセージが出る。
必要なモジュールのインストールや、MariaDBへのデータベースの作成など、エラーが無くなるまで実施する。

PostfixAdmin setup.php画面

f:id:tokixy56:20160721114953p:plain

"Setup Password"にパスワードを入力して「管理者追加」ボタン押す。

簡単過ぎるパスワードを入れると、

Your password must contain at least 3 character(s).

とか

Your password must contain at least 2 digit(s).

とか表示されるので、違うパスワードを入力する。

適切なパスワードを入力していると下記のような表示が出力される。

PostfixAdmin ハッシュ値出力

f:id:tokixy56:20160721115031p:plain
ここに表示されているハッシュ値config.local.php'ハッシュ値'の部分にコピーする。

ハッシュ値記載後、"Setup Password"には上記で使用したパスワードを入力し、"管理者"、"パスワード"、"パスワード(確認)"のすべての項目を入力し、「管理者追加」ボタン押すと、下記のように管理者作成が完了した旨が表示される。

PostfixAdmin 管理者作成完了

f:id:tokixy56:20160721120337p:plain

設定が終わったらsetup.phpはリネームするなどして、実行できないようにしよう。

上記作業が終わったら、次はhttp://ドメイン/postfixadmin/login.phpへアクセスする。

PostfixAdmin ログイン画面

f:id:tokixy56:20160721121446p:plain
ここで先ほど追加した管理者情報を入力すればログインすることができる。
だが、まだこの時点では正常に動作しないので注意

PostfixAdminディレクトリ内
$ cd /var/www/html/postfixadmin
$ sudo cp ./ADDTIONS/postfixadmin-domain-postdeletion.sh .
$ sudo cp ./ADDTIONS/postfixadmin-mailbox-postcreation.sh .
$ sudo cp ./ADDTIONS/postfixadmin-mailbox-postdeletion.sh .

$ sudo chmod 755 postfixadmin-domain-postdeletion.sh
$ sudo chmod 755 postfixadmin-mailbox-postcreation.sh
$ sudo chmod 755 postfixadmin-mailbox-postdeletion.sh

$ sudo chown apache:apache ./template_c
/etc/sudoers

上記でコピーしたスクリプトに管理者権限での実行権限を与える。

apache ALL=(ALL) NOPASSWD: /var/www/html/postfixadmin/postfixadmin-mailbox-postcreation.sh
apache ALL=(ALL) NOPASSWD: /var/www/html/postfixadmin/postfixadmin-mailbox-postdeletion.sh
apache ALL=(ALL) NOPASSWD: /var/www/html/postfixadmin/postfixadmin-domain-postdeletion.sh
/var/www/html/postfixadmin/postfixadmin-domain-postdeletion.sh
# Change this to where you keep your virtual mail users' maildirs.
basedir=/var/spool/vmailbox

# Change this to where you would like deleted maildirs to reside.
trashbase=/var/spool/vmailbox/.deleted-maildirs

if [ `echo $1 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi

if [ ! -e "$trashbase" ]; then
    echo "trashbase '$trashbase' does not exist; bailing out."
    exit 1
fi

trashdir="${trashbase}/`date +%F_%T`_$1"
domaindir="${basedir}/$1"

if [ ! -e "$domaindir" ]; then
    echo "Directory '$domaindir' does not exits; nothing to do."
    exit 0;
fi
if [ ! -d "$domaindir" ]; then
    echo "'$domaindir' is not a directory; bailing out."
    exit 1
fi
if [ -e "$trashdir" ]; then
    echo "Directory '$trashdir' already exits; bailing out."
    exit 1;
fi

mv $domaindir $trashdir

exit $?
/var/www/html/postfixadmin/postfixadmin-mailbox-postcreation.sh
# Change this to where you keep your virtual mail users' maildirs.
basedir=/var/spool/vmailbox

if [ ! -e "$basedir" ]; then
    echo "$0: basedir '$basedir' does not exist; bailing out."
    exit 1
fi

if [ `echo $3 | fgrep '..'` ]; then
    echo "$0: An argument contained a double-dot sequence; bailing out."
    exit 1
fi

maildir="${basedir}/$3"
parent=`dirname "$maildir"`
if [ ! -d "$parent" ]; then
    if [ -e "$parent" ]; then
        echo "$0: strange - directory '$parent' exists, but is not a directory; bailing out."
        exit 1
    else
        mkdir -p "${parent}"
        if [ $? -ne 0 ]; then
            echo "$0: mkdir -p '$parent' returned non-zero; bailing out."
            exit 1
        fi
    fi
fi

if [ -e "$maildir" ]; then
    echo "$0: Directory '$maildir' already exists! bailing out"
    exit 1
fi

#maildirmake "$maildir"
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi

# 以下を追記(maildirmakeの代わり) --->
mkdir "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

chown -R mailuser:mailuser "$maildir"
chmod -R 700 "$maildir"
#<---

exit 0
/var/www/html/postfixadmin/postfixadmin-mailbox-postdeletion.sh
# Change this to where you keep your virtual mail users' maildirs.
basedir=/var/spool/vmailbox

# Change this to where you would like deleted maildirs to reside.
trashbase=/var/spool/vmailbox/.deleted-maildirs

if [ ! -e "$trashbase" ]; then
    echo "trashbase '$trashbase' does not exist; bailing out."
    exit 1
fi

if [ `echo $1 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi
if [ `echo $2 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi

#subdir=`echo "$1" | sed 's/@.*//'`
subdir=$1

maildir="${basedir}/$2/${subdir}"
trashdir="${trashbase}/$2/`date +%F_%T`_${subdir}"
#maildir="${basedir}/${subdir}"
#trashdir="${trashbase}/`date +%F_%T`_${subdir}"

parent=`dirname "$trashdir"`
if [ ! -d "$parent" ]; then
    if [ -e "$parent" ]; then
        echo "Strainge - directory '$parent' exists, but is not a directory."
        echo "Bailing out."
        exit 1
    else
        mkdir -p "$parent"
        if [ $? -ne 0 ]; then
            echo "mkdir -p '$parent' returned non-zero; bailing out."
            exit 1
        fi
    fi
fi

if [ ! -e "$maildir" ]; then
    echo "maildir '$maildir' does not exist; nothing to do."
    exit 1
fi
if [ -e "$trashdir" ]; then
    echo "trashdir '$trashdir' already exists; bailing out."
    exit 1
fi

mv $maildir $trashdir

exit $?

と、まぁここまでやって初めてPostfixAdminが正常に動作する…はず!!w

あ、プロセス起動するの忘れてた

$ sudo systemctl start httpd
$ sudo systemctl start mariadb
$ sudo systemctl start postfix
$ sudo systemctl start dovecot

$ sudo systemctl enable httpd
$ sudo systemctl enable mariadb
$ sudo systemctl enable postfix
$ sudo systemctl enable dovecot

あ、そういえばselinux無効化とポート解放も忘れてた

SELinux無効化コマンド
$ sudo setenforce 0
/etc/selinux/config
...
SELINUX=disabled
...
firewalld設定ファイルコピー
$ sudo cp /usr/lib/firewalld/services/imaps.xml /etc/firewalld/services
$ sudo cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services
$ sudo cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services/submission.xml
/etc/firewalld/services/submission.xml
<port protocol="tcp" port="587">
firewall設定コマンド
$ sudo systemctl restart firewalld
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --add-service=imaps --zone=public --permanent
$ sudo firewall-cmd --add-service=smtp --zone=public --permanent
$ sudo firewall-cmd --add-service=submission --zone=public --permanent

はぁー今回長くなったな…。

次回

参考にさせて頂いたページと、RainloopというWebメールの設定をしたいと思う。

一応、ここまでで本筋の設定は完了する。
あとはThunderbirdなりiPhoneなりのメーラで設定すれば正常に動作するはずだ…。
自信ないけどw それ以外のネットワークに関する設定は