小技プログラミング

Postfix+FMLでGUI管理できるメーリングリストサーバを構築

【環境】
CentOS 5.10 x86_64
postfix 2.3.3
FML 4.0

【前提条件】
postfixインストールセットアップ済であること

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

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

# useradd fml
# chmod 755 /home/fml

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

# mkdir /usr/local/fml
# chown fml.fml /usr/local/fml

MLディレクトリ作成

# mkdir /var/spool/ml
# chown fml.fml /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

【perlパスを一括置換する】

perl makefml install実行後に、何かしらの理由があってインストール先ソースのperlパスが変更されず、ML作成時などにperlのエラーが出る場合にperlパスを一括置換する方法です。
インストール先の中身を全て削除or移動して、makefml install からやり直すと解決するかもしれません。
install実行前にパーミッションなども見直してみてください。

事前に対象数がどの位あるかチェック

# find /usr/local/fml -name "*"|xargs grep "#\!/usr/local/bin/perl"| wc -l
72
# find /usr/local/fml -name "*"|xargs grep "#\!/usr/bin/perl"| wc -l
2

/usr/local/fml内の拡張子(pl,cgi)とconfigファイル全て一括置換

# find /usr/local/fml \( -name "*.pl" -o -name "*.cgi" -o -name "config" \) | xargs sed -i -e "s/#\!\/usr\/local\/bin\/perl/#\!\/usr\/bin\/perl/"

置換数がどの位あるかチェック

# find /usr/local/fml -name "*"|xargs grep "#\!/usr/local/bin/perl"| wc -l
8
# find /usr/local/fml -name "*"|xargs grep "#\!/usr/bin/perl"| wc -l
66

インストールの実行

$ 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] [ ENTERキー ]
FQDN [example.localdomain] [ ENTERキー ]
EXEC FILES DIRECTORY [/usr/local/fml] [ ENTERキー ]
TOP LEVEL ML DIRECTORY [/var/spool/ml] [ ENTERキー ]

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

TimeZone (TZ: e.g. +0900, -0300) [+0900] [ ENTERキー ] // 日本は「+0900」

--- summary ---
DOMAIN: example.localdomain
FQDN: example.localdomain
EXEC_DIR: /usr/local/fml
ML_DIR: /var/spool/ml
Language: Japanese
TimeZone: +0900

04/04/14 01:31:18 makefml::mkdir /usr/local/fml/.fml (fml)
The current configuration is saved in /usr/local/fml/.fml/system

---Install the Fml system to /usr/local/fml. (y/n) [n] y

FML管理ユーザが一人の場合としてPersonalを選択しています。
複数ユーザで管理する場合はGroupやFmlservを指定します。
インストール先やMLの場所は特に理由が無ければデフォルトで問題ありません。

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

$ touch /var/spool/ml/etc/aliases

エイリアスを作成

$ postalias /var/spool/ml/etc/aliases

root権限に戻る

$ exit

postfixの設定を変更します

# vi /etc/postfix/main.cf

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

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

設定のリロード

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

3.CGIセットアップ

fmlユーザで実行します

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

以下のコマンドラインベースメニューが表示されます。

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

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

0 END
1 USE_MOD_SSL YES
2 REAL_CGI_PATH /usr/local/fml/www/share/cgi-bin/fml
3 CGI_AUTHDB_DIR /usr/local/fml/www/authdb
4 CHANGE PASSWORD
5 REMAKE CGI SCRIPTS
6 MTA sendmail
7 HOW TO UPDATE ALIAS newaliases

which ? (0-7) [0]

○USE_MOD_SSL設定
SSL利用しなければ n で変更

which ? (0-7) [0] 1

Q: DO YOU USE SSL? (y/n) [y] n

○REAL_CGI_PATH設定
ブラウザでアクセスするcgi設置場所を指定
デフォルトでも問題ありませんが、解りやすくする為にfmlユーザのhomeディレクトリ配下に変更します。

which ? (0-7) [0] 2

Q: REAL_CGI_PATH (directory) [/usr/local/fml/www/share/cgi-bin/fml] /home/fml/public_html/cgi-bin/fml

○CHANGE PASSWORD設定
管理者のBASIC認証設定

which ? (0-7) [0] 4

user (fml) [fml] [ ENTERキー ]

% /usr/bin/htpasswd /usr/local/fml/www/authdb/admin/htpasswd fml
New password:[ パスワード入力 ]
Re-type new password:[ パスワード入力 ]

○MTA設定
sendmailからPostfixに変更

which ? (0-7) [0] 6

0 END
1 sendmail
2 postfix

which ? (0-2) [0] 2

○HOW TO UPDATE ALIAS設定
postfix用に変更

which ? (0-7) [0] 7

0 END
1 newaliases
2 postalias /var/spool/ml/etc/aliases

which ? (0-2) [0] 2

REAL_CGI_PATHを変更した場合、一度設定を反映させる為に終了します
終了時にスクリプトの作成を聞いてきますが n を返答します

which ? (0-7) [0] 0

CGI configuration is saved in /usr/local/fml/.fml/cgi.conf

Q: Can I recreate cgi scripts? (y/n) [n] n

再度configを起動します

$ perl makefml admin.cgi config

○REMAKE CGI SCRIPTS
cgiを設置します。

which ? (0-7) [0] 5

* create /home/fml/public_html/cgi-bin/fml/admin/.htaccess
* create CGI scripts in /home/fml/public_html/cgi-bin/fml/admin/
menu.cgi makefml.cgi mlmenu.cgi menubar.cgi index.cgi newml.cgi rmml.cgi

configメニューを終了してroot権限に戻ります

which ? (0-7) [0] 0
$ exit

4.apache設定

# vi /etc/httpd/conf.d/fml.conf

(apache設定例)

Alias /fml/ /home/fml/public_html/cgi-bin/fml/
<Directory /home/fml/public_html/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
# chown apache.apache -R /home/fml/public_html/cgi-bin/fml

httpdリロード

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

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

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

http://[サーバIP]/fml/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 ←本文を指定
. ←メールの作成が完了した事を送信

ローカルからのML送信テストまでであれば、ドメインがDNSに登録されていなくても問題ありません。
検証で利用するドメイン名をMLサーバのホスト名やhostsやpostfixの設定ファイル上に記載しておけば動作検証可能です。

MLサーバのhosts設定

# vi /etc/hosts

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
#MLサーバのIPと検証用ドメイン名を設定
192.168.1.111 example.localdomain

MLサーバのホスト名を設定

# hostname example.localdomain

※再起動後も設定を残すのであれば、設定ファイルにも記載

# vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=example.localdomain

postfixの設定ファイル

# vi /etc/postfix/main.cf

以下、ドメイン設定に関して見直した方が良い設定値
#DNSに設定するメールホスト名を設定
myhostname = example.localdomain

#メールアドレスで利用するドメイン名を設定する
mydomain = example.localdomain

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

複数ドメインをFMLで利用する場合

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

最終更新日:2014/12/12