Goal

個人用のメーリングリストを構築する

Install

はじめに

個人で安く抑えたい場合には digital Ocean (https://www.digitalocean.com/pricing/) が快適で結構オススメです。$5/moで1core,521MB,20GB(SSD Disk),1T Transferなのでメーリングリスト等の簡易な用途であれば十分にこなしてくれそうです。今回はこれ意外にもOwnCloudなどを入れたかったのでSoftLayer (http://www.softlayer.com) のCloud Compute Instanceで利用してみました。一番安いノードで$25/moで 1core,1GB,25Gですね、すこし高いです。

ドメイン名

メーリングリストを始めるためにあたり今回は独自ドメインが欲しかったので色々あるので安いところから購入するのが良いかと思います。注意が必要なのはドメインを取得すると利用者の住所などの情報がwhoisで公開されるのですがこれをレジストラの業者が代行して表示してくれるサービスがあります。この対象となるドメインが業者により異なるので気をつけましょう。

DNSへの登録

SoftLayerのDNSサービスがありますのでこちらを利用していきます。ドメイン業者側のコントロールパネルなどの設定でNSを以下の2つに変更します。

  • ns1.softlayer.com
  • ns2.softlayer.com

すこし待てばSoftlayer側のDNS登録画面で登録した情報が利用されます。 次に、Softlayer側で構築するサーバを登録します。ネットワーク設定の画面でドメイン名(mailabcd.net)と対象となるサーバのIPアドレス(119.81.xxx.xx1)を入れると自動で幾つかの値がセットされます。不要な項目を消して消して置けば良いと思います。TTLは短くしておけば最初に伝搬されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ORIGIN mailabcd.net.
$TTL 900
@ IN SOA ns1.softlayer.com. support.softlayer.com. (
                       2014070307        ; Serial
                       7200              ; Refresh
                       600               ; Retry
                       1728000           ; Expire
                       43200)            ; Minimum

@                      900      IN NS    ns1.softlayer.com.
@                      900      IN NS    ns2.softlayer.com.

@                      900      IN MX 10 study.mailabcd.net.

@                      900      IN A     119.81.xxx.xx1
mail                   86400    IN A     119.81.xxx.xx1
study                  86400    IN A     119.81.xxx.xx1

こんな感じにしておきます。感覚的に結構はやく名前の情報は反映される印象。 これで準備は出来たので導入をしていきたいと思います。

Install

一度にmailman入れるとすこし変だったので一つづつ入れていきます。

Postfix

1
$ apt-get install postfix

導入時にConfigureで幾つか聞かれるので回答してします。 また設定は /etc/postfix/main.cf になります。

  1. General type : Internet Site
  2. Site Name : mailabcd.net
  3. 設定ファイルは以下の様になります。ただし alias_maps で指定している /var/lib/mailman/data/aliases はmailman導入後に出来るため現時点ではエラーになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = study.mailabcd.net
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mailabcd.net, study.mailabcd.net, localhost.mailabcd.net, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
owner_request_special = no
unknown_local_recipient_reject_code = 550

fcgiwrap

cgiを動かす必要がありますが今回はnginx経由で使うために fcgiwrap を利用します。

1
$ apt-get install fcgiwrap

サービスとして動作します

1
2
3
$ service fcgiwrap start
$ ps -ef | grep fcgiwrap
www-data 10577     1  0 Jul03 ?        00:00:00 /usr/sbin/fcgiwrap -f

Mailman

本命のmailmanを導入します。日本語がオカシイという情報がネットで見られましたが特に問題はなさそうに見えます。

1
2
$ apt-get install mailman
$ dpkg-reconfigure mailman

なぜか日本語が導入されませんので導入したら再構成します。その際に[ja]を選択します。

導入後の手順で check_perms をしている事がありますが今回は利用しません。特に問題なく使えるようです。

管理用パスワードの変更

1
2
3
4
$ mmsitepass
New site password:
Again to confirm password:
Password changed.

設定は /etc/mailman/mm_cfg.py で行います。 変更を行ったところだけピックアップして書いておきます。

1
2
3
4
5
6
MAILMAN_SITE_LIST = 'mailman'
DEFAULT_EMAIL_HOST = 'mailabcd.net'
EFAULT_URL_HOST   = 'mailabcd.net'
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
DEFAULT_SERVER_LANGUAGE = 'ja'
MTA='Postfix'

実際にはMTAの箇所をコメントアウトしただけかな。

1
2
3
4
$ newlist mailman
Enter the email of the person running the list: hogehoge@gmail.com
Initial mailman password:
Hit enter to notify mailman owner...

これを実行するとaliasesも変更される

1
2
3
# ls -l /var/lib/mailman/data/aliases*
-rw-rw---- 1 root list  1132 Jul  3 20:44 /var/lib/mailman/data/aliases
-rw-r----- 1 root list 12288 Jul  3 20:44 /var/lib/mailman/data/aliases.db

Postfixとmailmanを起動します。

1
2
$ service postfix start
$ service mailman start

エラーなどがある場合には、 /var/log/配下を確認します。

Nginx

最後にフロントエンドになるnginxを導入します

1
$ apt-get install nginx

設定ファイルを修正します。/etc/nginx/fastcgi_paramsに以下の行をコメントアウト

1
#fastcgi_param SCRIPT_FILENAME $request_filename;

一応WebサイトになってしまうのでRootのファイルを/var/www/mailabc.org/webにおけるようにディレクトリを作っておきます。

次に/etc/nginx/site-available/mailabcd.net.vhostにファイルを作る。また有効にするために /etc/nginx/sites-enabled/mailabcd.netにシンボリックリンクを作っておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
server {
       listen 80;
       server_name mailabcd.net;
       root /var/www/mailabcd.net/web;
       if ($http_host != "mailabcd.net") {
                 rewrite ^ http://mailabcd.net$request_uri permanent;
       }
       index index.php index.html;
       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }
       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }
       # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }
       location /cgi-bin/mailman {
               root /usr/lib/;
               fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
               include /etc/nginx/fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
               fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }
        location /images/mailman {
               alias /usr/share/images/mailman;
        }
        location /pipermail {
               alias /var/lib/mailman/archives/public;
               autoindex on;
        }
}

以下でい起動します

1
$ service nginx start 

使ってみる

サイトへは http://mailabcd.net/cgi-bin/mailman/admin でアクセス可能です。 その後は画面をみて利用する事ができるかと思います。

ハマった点

  • Gmailはメーリングリストへ投稿され記事(正確にはMessage-idが同じ記事)をリジェクト刷るようですね。したがってGmailから送信するとメーリングリストに投稿された後の記事が届かない感じになって動いてない〜って成りました。 強制的にSource変更して書き換えている人もいました my poc kt: Gmail でメーリングリストのメールが弾かれる件を自己環境だけでもとりあえず対処してみた
  • MX レコードが自動で mail.mailabcd.net に記載されていたけどホスト名を study.mailabcd.net にしていたのでスパム扱いされてメールがgoogleからRejectされて悩んだ。
  • メーリングリストのドメインを @study.mailabcd.net から @mailabcd.net に後でで変えたら動作が?な箇所もあり結局再導入した(SoftLayerの場合にはOSReloadすれば5分もいらずに初期化される)

まとめ

久しぶりにメーリングリストとか入れるとハマりました。Facebookとか色々共有するツールはあるのですがメールはほぼどの端末でも環境でも使えるのが良いですね。