mailman-2.1.17。専用のポート番号で公開用WEBサイトと分離し、SSLで保護する。

IPsec必須にするためのファイヤウォールの設定

ついでにIPsec経由でしかアクセスできないようにする。ここまでしなくても、SSL+認証で十分かも知れない。

iptables -A TCP_wan -p tcp --dport <port> -policy --pol ipsec --dir in -j ACCEPT

apacheのポート、SSL、認証

virtualhostにより、特定のポート番号に限定したサイトにする。 mailmanでは管理者ページに認証機能があるので、SSLを使用することにした。 apacheのdigest認証は、うちではmailmanの管理サイトを公開する必要がないため、入り口制限として行う。

/etc/apache2/modules.d/50_mailman.conf

追加したのは Listen Virtualhost Servername SSL...x3 <Directory "*"> (認証) </Directory>

Listen <port#>
<Virtualhost _default_:<port#>>
Servername SERVERNAME:<port#>
SSLEngine on
SSLCertificateFile /etc/ssl/apache2/server.crt
SSLCertificateKeyFile /etc/ssl/apache2/server.key
<IfDefine MAILMAN>

        <Directory "*">
                AuthType Digest
                AuthName "PaPaPaYa"
                AuthUserFile /var/www/localhost/_htdigest
                require valid-user
        </Directory>

        ScriptAlias /mailman/ "/usr/lib64/mailman/cgi-bin/"
        <Directory "/usr/lib64/mailman/cgi-bin/">
                AllowOverride None
                Options None
                Order allow,deny
                Allow from all
        </Directory>

        Alias /pipermail/ "/var/lib/mailman/archives/public/"
        <Directory "/var/lib/mailman/archives/public/">
                AllowOverride None
                Options ExecCGI FollowSymLinks
                Order allow,deny
                Allow from all
        </Directory>

        Alias /mailman-icons/ "/usr/lib64/mailman/icons/"
        <Directory "/usr/lib64/mailman/icons/">
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
</IfDefine>
</Virtualhost>

鍵・証明書に通常のものを使いまわしたところ、 apache立ち上げ時のerror.logにドメイン名不一致の警告がでる。(多分ポート番号を変えたため)

mailmanの設定

/etc/mailman/mm_cfg.py

ホスト部分にポート番号を含める必要がある。

# server settings
MTA='Postfix'
DEFAULT_SERVER_LANGUAGE = 'ja'
MAILMAN_SITE_LIST = 'ml-admin'
DEFAULT_EMAIL_HOST = '<orehost.domain.jp>'
DEFAULT_URL_HOST = '<orehost.domain.jp>:<port#>'
DEFAULT_URL_PATTERN = 'https://%s/mailman/'
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)

# common settings for mailinglists
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d] "

# pipermail
# default in Default.py seems not refer DEFAULT_URL_HOST
PUBLIC_ARCHIVE_URL = 'https:<orehost.domain.jp>:<port#>/pipermail/%(listname)s'

pipermailのURLは、DEFAULT_URL_HOSTを参照して欲しいのだが、うまくいかないので個別に設定した。

操作用html再生成

URLが変更になったときなどに必要。

withlist -l -r fix_url <ml name>