小技プログラミング

Postfix+FMLでGUI管理の複数ドメインメーリングリストサーバ構築

【環境】
CentOS 5.10 x86_64
postfix 2.3.3
FML 4.0

【前提条件】
postfixインストールセットアップ済
MLのみとして利用する
DNSで名前解決が出来るドメインが2つ以上ある

【設定内容例】
○ドメイン1
ドメイン:example.localdomain
ドメインMXレコード:example.localdomain
インストール先:/usr/local/fml/example.localdomain
MLディレクトリ:/var/spool/ml/example.localdomain


○ドメイン2
ドメイン:example2.localdomain
ドメインMXレコード:example2.localdomain
インストール先:/usr/local/fml/example2.localdomain
MLディレクトリ:/var/spool/ml/example2.localdomain

1.FMLインストール環境を準備

インストール作業は一般ユーザで行う事が公式では推奨されています。
一般ユーザ(fml)を作成しておきます。

# useradd fml

FMLインストールディレクトリ作成

# mkdir /usr/local/fml
# mkdir /usr/local/fml/example.localdomain
# mkdir /usr/local/fml/example2.localdomain

MLディレクトリ作成

# mkdir /var/spool/ml/example.localdomain
# mkdir /var/spool/ml/example2.localdomain
# chown fml.fml -R /usr/local/fml
# chown fml.fml -R /var/spool/ml

2.FMLインストール

公式からソースを取得して展開

# cd /usr/local/src
# wget ftp://ftp.fml.org/pub/fml/stable/fml-4.0-stable-20040215.tar.gz
# tar vzxf fml-4.0-stable-20040215.tar.gz
# chown fml.fml -R fml-4.0-stable-20040215

インストールはfmlユーザで実行

# su fml
$ cd fml-4.0-stable-20040215

perlのパスを自環境に合わせて修正

$ vi makefml

#!/usr/local/bin/perl
↓変更
#!/usr/bin/perl

ドメイン1用FMLインストール

$ perl makefml install
:
Personal Use or ML-Admin-Group-Shared or fmlserv you use?
Personal, Group, Fmlserv (personal/group/fmlserv) [personal][ ENTERキー ]

DOMAIN NAME [example.localdomain] example.localdomain
FQDN [example.localdomain] example.localdomain
EXEC FILES DIRECTORY [/usr/local/fml] /usr/local/fml/example.localdomain
TOP LEVEL ML DIRECTORY [/var/spool/ml] /var/spool/ml/example.localdomain

Language (Japanese or English) [Japanese] [ ENTERキー ]

TimeZone (TZ: e.g. +0900, -0300) [+0900] [ ENTERキー ] // 日本は+0900
:
---Install the Fml system to /usr/local/fml. (y/n) [n] y

ドメイン2用FMLインストール

$ perl makefml install
:
Personal Use or ML-Admin-Group-Shared or fmlserv you use?
Personal, Group, Fmlserv (personal/group/fmlserv) [personal][ ENTERキー ]

DOMAIN NAME [example.localdomain] example2.localdomain
FQDN [example.localdomain] example2.localdomain
EXEC FILES DIRECTORY [/usr/local/fml] /usr/local/fml/example2.localdomain
TOP LEVEL ML DIRECTORY [/var/spool/ml] /var/spool/ml/example2.localdomain

Language (Japanese or English) [Japanese] [ ENTERキー ]

TimeZone (TZ: e.g. +0900, -0300) [+0900] [ ENTERキー ] // 日本は+0900
:
---Install the Fml system to /usr/local/fml. (y/n) [n] y

※Generate nroff manuals:でフリーズする場合。
/etc/postfix/main.cfに古いエイリアス設定もしくは、未作成のエイリアス設定が残っていないかチェック。
初期設定値は alias_maps = hash:/etc/aliases です。

エイリアスファイルを作成

$ touch /var/spool/ml/example.localdomain/etc/aliases
$ touch /var/spool/ml/example2.localdomain/etc/aliases

エイリアスを作成

$ postalias /var/spool/ml/example.localdomain/etc/aliases
$ postalias /var/spool/ml/example2.localdomain/etc/aliases

root権限に戻る

$ exit

postfixの設定を変更します

# vi /etc/postfix/main.cf

#メールをローカルで受信許可するドメイン名を指定
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
example.localdomain, example2.localdomain

#alias_mapsにエイリアスデータベースを追加設定
alias_maps = hash:/etc/aliases,
hash:/var/spool/ml/example.localdomain/etc/aliases,
hash:/var/spool/ml/example2.localdomain/etc/aliases

#includeを追加して:include:ファイルでのコマンドを許可
allow_mail_to_commands = alias, forward, include

設定のリロード

$ exit
# /etc/rc.d/init.d/postfix reload

3.GUIセットアップ

ドメイン1用CGI設定

# cd /usr/local/fml/example.localdomain
# su fml
$ perl makefml admin.cgi config

コマンドラインベースメニューが表示されるので以下の様に変更

************************************************************

<<< makefml --- FML CGI Configuration Interface --- >>>

0 END
1 USE_MOD_SSL NO
2 REAL_CGI_PATH /usr/local/fml/example.localdomain/www/share/cgi-bin/fml
3 CGI_AUTHDB_DIR /usr/local/fml/example.localdomain/www/authdb
4 CHANGE PASSWORD
5 REMAKE CGI SCRIPTS
6 MTA postfix
7 HOW TO UPDATE ALIAS postalias /var/spool/ml/example.localdomain/etc/aliases

which ? (0-7) [0]

上記メニューでの操作は以下の4つのみ
1 SSLの利用状況を設定、今回はSSL利用しない
4 FML管理画面のBASIC認証ユーザとパスワードを設定
6 MTAをpostfixに変更
0 で終了、再度スクリプトを更新するか聞かれるので y を返答して終了

ドメイン2用CGI設定

# cd /usr/local/fml/example2.localdomain
# su fml
$ perl makefml admin.cgi config

コマンドラインベースメニューが表示されるので以下の様に変更

************************************************************

<<< makefml --- FML CGI Configuration Interface --- >>>

0 END
1 USE_MOD_SSL NO
2 REAL_CGI_PATH /usr/local/fml/example2.localdomain/www/share/cgi-bin/fml
3 CGI_AUTHDB_DIR /usr/local/fml/example2.localdomain/www/authdb
4 CHANGE PASSWORD
5 REMAKE CGI SCRIPTS
6 MTA postfix
7 HOW TO UPDATE ALIAS postalias /var/spool/ml/example2.localdomain/etc/aliases

which ? (0-7) [0]

上記メニューでの操作は以下の4つのみ
1 SSLの利用状況を設定、今回はSSL利用しない
4 FML管理画面のBASIC認証ユーザとパスワードを設定
6 MTAをpostfixに変更
0 で終了、再度スクリプトを更新するか聞かれるので y を返答して終了

root権限に戻ります

$ exit

4.apache設定

# vi /etc/httpd/conf.d/example.localdomain.conf

#ドメイン1用apache設定例
<VirtualHost *:80>
ServerName example.localdomain
DocumentRoot /usr/local/fml/example.localdomain/www/share/cgi-bin/fml
ErrorLog logs/example.localdomain-error_log
CustomLog logs/example.localdomain-access_log combined
</VirtualHost>
<Directory "/usr/local/fml/example.localdomain/www/share/cgi-bin/fml">
Options +ExecCGI
AddHandler cgi-script .cgi
AllowOverride All
Order allow,deny
Allow from all
</Directory>

# vi /etc/httpd/conf.d/example2.localdomain.conf

#ドメイン2用apache設定例
<VirtualHost *:80>
ServerName example2.localdomain
DocumentRoot /usr/local/fml/example2.localdomain/www/share/cgi-bin/fml
ErrorLog logs/example2.localdomain-error_log
CustomLog logs/example2.localdomain-access_log combined
</VirtualHost>
<Directory "/usr/local/fml/example2.localdomain/www/share/cgi-bin/fml">
Options +ExecCGI
AddHandler cgi-script .cgi
AllowOverride All
Order allow,deny
Allow from all
</Directory>

※WEBベースで管理する場合、MLディレクトリの所有者&グループをapacheにしておかないとMLが作成出来ません。
所有権を変更

# chown apache.apache -R /var/spool/ml/example.localdomain
# chown apache.apache -R /var/spool/ml/example2.localdomain
# chown apache.apache -R /usr/local/fml/example.localdomain/www/share/cgi-bin/fml
# chown apache.apache -R /usr/local/fml/example2.localdomain/www/share/cgi-bin/fml

httpdリロード

# /etc/rc.d/init.d/httpd reload

5.ブラウザでアクセスしてFMLにログイン確認

以下のアドレスのようにブラウザからアクセスします。MLを作成して、実際に存在するメールアドレスをMLに追加してみましょう。

http://example.localdomain/admin/menu.cgi
http://example2.localdomain/admin/menu.cgi

BASIC認証ダイアログが表示されるので、先ほど設定したIDとパスワードを入力します。
※BASIC認証のみでアクセス制限してある状態では危険です。
80番ポートへのアクセスをIPアドレスで制限するなどセキュリティを考慮する必要があります。

6.ML送信テスト

実際に作成したML宛にメールを送信してみます。

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 example.localdomain ESMTP unknown
HELO localhost
250 example.localdomain
MAIL FROM:<XXXXXXXX@msn.com>
250 2.1.0 Ok
RCPT TO:<testml@example.localdomain>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: XXXXXXXX@msn.com
Subject: testmail
testmail
.
250 2.0.0 Ok: queued as 9CB66660060

○上記の各コマンドを簡単に説明すると以下のような流れになります。
HELO localhost ←まずはHELOコマンドで挨拶
MAIL FROM:<XXXXXXXX@msn.com> ←MLに登録してあるアドレスを送信者に指定
RCPT TO:<testml@example.localdomain> ←作成したMLを宛先に指定
DATA ←メール作成開始
From: XXXXXXXX@msn.com ←MLに登録してあるアドレスを送信者に指定
Subject: testmail ←メールの件名を指定
testmail ←本文を指定
. ←メールの作成が完了した事を送信

ドメイン一つのみでFML設定する場合

(参考)
公式サイト http://www.fml.org/
公式サイト トラブルシューティング

最終更新日:2014/12/12