BLOGTIMES
» ArchiveList (Tag for "qmail" )
«Prev || 1 · 2 · | Next»
2019/08/29

モダンな qmail を目指す notqmail がスタート

qmail 

モダンな qmail を目指す notqmailというプロジェクトが始まったようです。

qmail はセキュアで設定しやすい MTA なのですが、今となっては現在のネット環境に必要な機能(SMTP Auth や TLS、IPv6、DKIM など)がほとんど実装されていないので、実際に使おうとするとあちこちから野良パッチをあてて試行錯誤しながらビルドする羽目になります。僕も 2000 年くらいから 2016 年の暮れまで運用していましたが、現在のサーバに移行するときにそれに嫌気が差したので、MTA は postfix に乗り換えてしまいましたが、必要な機能がつくのであれば出戻りしてもいいかなと思っています。

コミュニティ主導のqmailフォークプロジェクト「notqmail」が立ち上げられる | OSDN Magazine

qmailはDaniel Julius Bernstein(djb)氏が1990年代後半に作成したメッセージトランスファーエージェント。最後のアップデートは1998年で、その後qmailの流れをくむnetqmailが登場したものの、やはり2007年よりアップデートされておらず、それぞれがフォークを作成するという状態が続いている。notqmailはこれに対し、集合的な取り組みにしようと呼びかけている。


    at 13:31 |
    2017/01/07

    ezmlm-idx から Mailman に移行

    qmail  mailman  migration 

    MTA を qmail から postfix に変更したので、メーリングリストドライバも ezmlm-idx から Mailman に移行することにしました。

    メンバーの移行

    ezmlm からのメンバーの一覧は以下のコマンドで取り出すことができますので、このリストを Mailman に登録してやれば OK です。

    cd (MLのデータディレクトリ) ezmlm-list .

    アーカイブの移行

    ちょっと苦戦したのが、過去メールアーカイブの移行。

    過去メールを全て捨てても良いのであれば問題ありませんが、できればそのまま移行したいということで頑張ってみました。

    [mailman-users-jp 2880] fml から Mailman への移行手順」によると、mbox 形式があれば以下のコマンドでアーカイブの移行ができるようです。

    /usr/lib/mailman/bin/arch (ML名) (アーカイブのmbox)

    つまり、ezmlm のディレクトリから mbox 形式のファイルが生成できさえすれば、移行は簡単にできそうです。これを行ってくれるプログラムを探してみたところ perl で書かれた ezmlm2mbox が見つかったので、今回はこれを使わせてもらうことにします。オリジナルのスクリプトには From: と Date: を書き換えてしまう機能があるようなのですが、余計なことをして欲しくないのでこの機能を殺すように書き換えてから使っています。

    wget 'http://www.arctic.org/~dean/scripts/ezmlm2mbox' chmod 755 ezmlm2mbox vi ezmlm2mbox # 以下の diff のように編集 ./ezmlm2mbox (MLのデータディレクトリ) > hoge.mbox

    diff -u ezmlm2mbox{.org,}

    --- ezmlm2mbox.org 2005-06-29 21:02:02.000000000 +0900 +++ ezmlm2mbox 2017-01-07 01:33:04.000000000 +0900 @@ -80,8 +80,8 @@ my $out = ''; my %h; while (<$fh>) { - s/^From /X-Mail-From_: /; - s/^Date:/X-Original-Date:/i if $opts{'d'}; +# s/^From /X-Mail-From_: /; +# s/^Date:/X-Original-Date:/i if $opts{'d'}; $out .= $_; last if /^$/; if (my ($name, $value) = /^([^\s:]+):(.*)/) {

    最後に ML のカウンターを引き継ぎます。
    ezmlm のカウンターは num というファイルの : の左側の部分なので、以下のコマンドで数値を確認しておきます。

    cd (MLのデータディレクトリ) awk -F: '{print $1}' num

    以下のコマンドを打ち込むと mailman の設定を読み込んだ Python のコマンドラインが開きます。

    /usr/lib/mailman/bin/withlist (ML名) (アーカイブのmbox)

    以下の Pyton のコマンドを入力すればカウンタの引き継ぎは完了です。

    m.Lock() m.post_id = (上記で確認した数字) m.Save() m.Unlock() (ここでctrl+dを入力すると Python を終了できる)

      at 20:32 |
      2016/11/25

      dehydrated をつかって Let's Encript の証明書を取得(http-01編)

      ssl  systemmanagemant  letsencrypt  sh  tutorial  qmail 

      Let's Encrypt は誰でも無料で利用できる SSL 証明書ですが、有効期間が90日しかない*1ので定期的な更新の自動化が欠かせません。

      これを行うためのクライアントとしてはオフィシャルな Certbot がありますが、実行に sudo を要求するので、レンタルサーバなどで root 権限を持っていない場合には利用することができません。その他にも Python が必要だったりと使い勝手があまりよくありません。というわけで、sudo がなくても実行できるクライアントを探してみたところシェルスクリプトベースの dehydrated(letsencrypt.sh) を見つけました。

      自分のサーバやさくらのレンタルサーバでも以下の手順で動作させることができました。

      # ソースコードの取得 git clone https://github.com/lukas2511/dehydrated.git cd dehydrated/ # WELLKNOWN ディレクトリの作成 chmod o+x . mkdir -p wellknown/acme-challenge sed -e 's|#WELLKNOWN=.*|WELLKNOWN="\'`pwd`'/wellknown/acme-challenge"|' < docs/examples/config > config # 証明書のドメイン名を指定 (SANを使う場合には1行に空白で区切ってドメインを列挙) echo "example.com hoge.example.com fuga.example.com" > domains.txt # Apache 用の設定ファイルを追加 cat <<EOS > /etc/httpd/conf.d/acme-challenge.conf Alias /.well-known `pwd`/wellknown <Directory /opt/dehydrated/wellknown> AllowOverride None Require all granted </Directory> EOS # Apache の設定を再読込 systemctl reload httpd # 実際に証明書を取得 ./dehydrated -c --accept-terms # 自動更新用のスクリプトを生成 cat <<EOS > certautorenew #!/bin/bash cd `pwd` ./dehydrated -c EOS chmod 755 certautorenew # cronで一日一回定期更新されるようにする ln -s "`pwd`/certautorenew" /etc/cron.daily

      WELLKNOWN ディレクトリの中身のファイルについては HTTPd 経由で外部からアクセスできる必要があります。
      これらに問題なくアクセスできれば、 Let's Encript からの証明書が certs/(FQDN) に格納されます。
      具体的には

      • cert.pem(証明書)
      • chain.pem(中間証明書)
      • fullchain.pem(証明書+中間証明書)
      • privkey.pem(秘密鍵)

      というファイル群ができているはずなので、メールやウェブなどの各種デーモンの設定ファイルから生成された証明書や秘密鍵を使うように設定すればOK。

      更新の自動化

      証明書の更新は cron などで定期的に dehydrated -c を実行してやるだけですが、例えば更新したあとに httpd を graceful したい場合には以下のような hook.sh スクリプトを作って、config の HOOK に設定してやれば、証明書が更新された時だけサービスを再起動するようなことができます。

      service httpd graceful

      また、qmail-tls のファイルは以下のような感じで更新できます。

      cat /path/to/dehydrated/certs/FQDN/{privkey,fullchain}.pem > /var/qmail/control/clientcert.pem cat /path/to/dehydrated/certs/FQDN/{privkey,fullchain}.pem > /var/qmail/control/servercert.pem

      2017/02/05 追記


      at 21:41 |
      2014/03/05

      ezmlm で Subject が空でも配信できるようにする

      qmail 

      自分が管理しているメールサーバは未だに qmail を使っている関係でメーリングリストドライバが ezmlm だったりするのですが、最近「メールが読める(配信されている)けれども、送信しようとするとエラーになる」と相談を受けたので、念のため qmail-send のログをさらってみると下記のようなエラーログが吐かれているのを発見。

      @4000000053109fce0f1c280c info msg 51576884: bytes 603 from <somebody@example.jp> qp 27742 uid 89 @4000000053109fce0f4cd114 starting delivery 517184: msg 51576884 to local example.com-someml@example.com @4000000053109fce0f4cdccc status: local 1/10 remote 0/5 @4000000053109fce0f766984 delivery 517184: failure: ezmlm-reject:_fatal:_Sorry,_I_don't_accept_message_with_empty_Subject_(#5.7.0)/

      どうやら ezmlm-reject が Subject が空だとお怒りの様子
      これをどうにかして回避できないかと検索してみたら、ちょっと古めですが @IT の記事に下記のような Tips を発見。

      実用qmailサーバ運用・管理術(5):メーリングリストの構築と運用(後編) (2/3) - @IT

      Subjectが空白かどうかの判定は、editorファイルのezmlm-rejectで行われます(editorファイルは.qmail-ml2の実体)。ezmlm-rejectに-Sオプションを指定することで、空Subjectでの投稿が可能になります。
      |/usr/local/bin/ezmlm/ezmlm-reject '/var/ezmlm/ml2'

      修正前
      |/usr/local/bin/ezmlm/ezmlm-reject -S '/var/ezmlm/ml2'

      修正後

      これを参考に ezmlm-reject に -S をつけたのでもう大丈夫でしょう。


        at 20:56 |
        2011/11/21

        ghettoVCB.sh のメール通知と qmail

        esxi  qmail 

        先日、ghettoVCB.sh を設定して ESXi のホットバックアップが取れるようにしたときに、メール通知機能を設定してみたもののメールが飛んできませんでした。experimental と書いてあるのであまりツッコミ入れてはいけない部分なのでしょうが、やっぱり不便なのでちょっと原因を調べてみることにしました。

        まず、メール送信の部分をチェックして見ると、 nc の出力が /dev/null に捨てられているところがあったので、この部分をファイルにリダイレクトして内容を確かめてみます。

        220 example.com ESMTP 250 example.com 250 ok 250 ok 354 go ahead 451 See http://pobox.com/~djb/docs/smtplf.html.

        最後の行は qmail の吐いているエラーで、改行コードとしてLFだけ*1の行をみつけたので qmail がメールを飛ばしてくれないというオチでした。これを黙らせるには、改行コードを CR + LF に統一するしかないのですが、デフォルトでつかえるコマンドが極端に少ない ESXi だったので多少手こずりましたが、 awk を使ってこんな感じで改行コードを統一してみました。これで qmail を使っていても ghettoVCB.sh の処理結果をメール通知することができます

        --- ghettoVCB.sh.org Fri Jul 29 05:55:06 2011 +++ ghettoVCB.sh Mon Nov 21 21:14:30 2011 @@ -1080,7 +1080,8 @@ for i in ${EMAIL_TO}; do buildHeaders ${i} - "${NC_BIN}" "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" < "${EMAIL_LOG_CONTENT}" > /dev/null 2>&1 +# "${NC_BIN}" "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" < "${EMAIL_LOG_CONTENT}" > /dev/null 2>&1 + awk '{gsub(/\r/,""); gsub(/$/,"\r"); print $0;}' "${EMAIL_LOG_CONTENT}" | "${NC_BIN}" -v -C -i 1 "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" > /dev/null 2>&1 if [ $? -eq 1 ]; then logger "info" "ERROR: Failed to email log output to ${EMAIL_SERVER}:${EMAIL_SERVER_PORT} to ${EMAIL_TO}\n" fi @@ -1088,7 +1089,8 @@ unset IFS else buildHeaders ${EMAIL_TO} - "${NC_BIN}" "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" < "${EMAIL_LOG_CONTENT}" > /dev/null 2>&1 +# "${NC_BIN}" "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" < "${EMAIL_LOG_CONTENT}" > /dev/null 2>&1 + awk '{gsub(/\r/,""); gsub(/$/,"\r"); print $0;}' "${EMAIL_LOG_CONTENT}" | "${NC_BIN}" -C -v -i 1 "${EMAIL_SERVER}" "${EMAIL_SERVER_PORT}" > /dev/null 2>&1 if [ $? -eq 1 ]; then logger "info" "ERROR: Failed to email log output to ${EMAIL_SERVER}:${EMAIL_SERVER_PORT} to ${EMAIL_TO}\n" fi
        • *1: SMTP では改行コードは CR + LF である必要があるので。

        at 21:53 |
        2011/03/08

        STARTTLS 実装の問題は Qmail-TLS patch にも影響あるみたい

        qmail  cve 

        STARTTLS の実装に脆弱性が見つかった情報がJVNで公開されています。

        JVNVU#555316: 複数の STARTTLS 実装に脆弱性

        複数の STARTTLS 実装には、中間者攻撃 (man-in-the-middle attack) によって、コマンドを挿入される可能性があります。本脆弱性は、暗号文通信への切り替えがアプリケーションより下位の層で行われていることに起因しています。

        問題なのはこのJVNにはほとんど情報がでていないことで、元ネタの「US-CERT Vulnerability Note VU#555316」を読むと結構広範なプロダクトに影響がありそうな感じ。postfix にアップデートが出たりしてた*1のもどうやらこの問題に対するアップデートですね。

        で、もしやと思って探してみたのですが、Qmail-TLS patchにも影響ある*2ようです。 qmail で STARTTLS 対応している場合にはチェックしておいた方が良さそうな感じ。 qmailは どうしても拡張が全部パッチになってしまっているので、 qmail 自体にセキュリティ問題が生じなくても、あたっているか、あたっていないかをいちいち確認しながらパッチのセキュリティfixを追いかけていくのは正直しんどいです。やっぱりこういうの見てると qmail 終わりかなぁ。


        at 22:25 |
        2011/03/04

        qmail に DNS 用のパッチあたってますか?

        qmail  jprs 

        JPRS から qmail が DNS の応答サイズが大きい場合にうまく取り扱えない問題についてのお知らせが出ていたのでメモ。

        qmail/netqmailにおける512バイトを超えるDNS応答の不適切な取り扱いについて*1

        近年、DNSSECの本格運用開始やIPv6、SPFなどの技術の普及により、DNS応答のサイズが増大する傾向にあります。これにより、これまで潜在していた512バイトを超えるDNS応答の不適切な取り扱いが顕在化し、予期しない障害が発生する場合があります。
        現時点において、メール配送ソフトウェアの一つであるqmail、及びqmailにいくつかのバグ修正や機能拡張を実施したnetqmailには本件に該当するバグが存在することが判明しており、特定のドメイン名あての電子メールの配送ができなくなる障害の発生が確認されています。

        これ、確かDJBはバグと認めてなかったような気がしますが、かなり前から知られているバグですよね。
        最近になって騒がれだしたというのは、実際、メールがうまく送れないという事象が多発したりしているんだろうと思います。

        qmailは実際に使えるように運用しようとすると、かなりの数のパッチを当てる羽目になります。正直、これから新規にインストールするのはオススメできない状態になっているのですが、僕のところではまだ現役です。確認しましたが、このお知らせで触れられているパッチは既にあたっていました。次にサーバを借りる時には postfix にしようかなと思っています。別に qmail 自体はどうでもいいんですが、 postfix に vpopmail にあたるようなものがあるかどうかが問題なんですよね。


        at 22:18 |
        2010/11/23

        qmail で作る快適メールサーバー

        qmail  復刊 
        qmailで作る快適メールサーバー―qmailのインストールから活用までを徹底解説

        「qmail で作る快適メールサーバー」が公開されていたのでメモ。元ネタはおそらくこの書籍だと思いますが、こちらは既に絶版になっているようです。こうやって絶版本を復活させる試みは面白いですね。

        最近は qmail を新規に導入することは少ないと思いますが、既に導入されているサーバで .qmail を書かなければいけないようなときに「第7章 .qmail ファイルの利用」あたりは役に立つかもしれません。ざっと読んだ感じでは、パッチ関連は qmail を使っている(というか、netqmailでインストールしている)人であれば既知のものが多いと思います。


          at 16:31 |
          2009/11/08

          メールサーバがオープンリレーテストでないかチェックするサービス

          qmail  systemmanagemant 

          新しくメールサーバを作ったので、仕上げにオープンリレーになっていないかを下記のサービスでチェック。

           ・第三者中継チェック RBL.JP
           ・Mail relay testing

          今どきよっぽどおかしな設定をしなければ、メールサーバーがオープンリレーになる事はないと思いますが。


            at 23:44 |
            2009/04/11

            qmail-tlsでhandshake failureになるときは

            qmail  ssl 

            サーバで"yum update"を実行したら、(たぶん)opensslがアップデートされた副作用でqmailのSSL/TLS接続ができなくなってしまったのでトラブルシュートしてみました。

            手始めにopensslを使ってsmtpサーバに接続するとhandshake failureで接続できず。普通のSSLを使っていない場合には普通に接続できるのでSSL関連の障害であることは間違いがないようです。

            $ openssl s_client -connect localhost:smtps 14790:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:578:

            とりあえず、SSLのエラーが起きていることは分かりましたがこれだけでは何の手がかりにもならないので、プロトコルを変更してて色々試してみたところ、SSLv2に固定したときにエラーがno cipher listに変化することがわかりました。

            $ openssl s_client -connect localhost:smtps -ssl2 depth=1 /C=US/O=Equifax Secure Inc./CN=Equifax Secure Global eBusiness CA-1 verify return:1 depth=0 /C=JP/O=sailane.cles.net/OU=GT78429833/OU=See www.rapidssl.com/resources/cps (c)08/OU=Domain Control Validated - RapidSSL(R)/CN=sailane.cles.net verify return:1 14800:error:1406D0B8:SSL routines:GET_SERVER_HELLO:no cipher list:s2_clnt.c:450:

            Cipherに関する設定項目はqmail-smtpd.cとqmail-remote.cのソースを眺める限り、control/tlsserverciphers、control/tlsclientciphersしかありません。これまではファイルがなくてもうまく動いていたので気にしていませんでしたが、ひとまずこのファイルを作成してみることに。

            [qmail-tlsでhandshake failureになるときは の続きを読む]

              at 17:02 |
              «Prev || 1 · 2 · | Next»
              » ArchiveList (Tag for "qmail" )