2024/05/06(月)メモ:dma(8)を設定してみた。

先のポストで構築したメールサーバにもっぱら送信するだけのMTAを、FreeBSD 14.0-RELEASEでsendmail(8)を押しのけて入ってきたdma(8)で構築してみました。

/etc/rc.conf

既存のMTA等を殺しておく。うちのお試し用ホストならこんなもの。なお、dma(8)にはリモートからのメールを受信する機能はなく、そのせいか常駐していないので、ここに追加するネタは無い。
sendmail_enable="NONE"
postfix_enable="NO"
cyrus_imapd_enable="NO"
dovecot_enable="NO"

/etc/mail/mailer.conf

MTAとしてdma(8)を起動するよう書き換える。
# cp /usr/share/examples/dma/mailer.conf /etc/mail/mailer.conf
# chown root:wheel /etc/mail/mailer.conf
# chmod 0644 /etc/mail/mailer.conf

/etc/periodic.conf

作成して、sendmail(8)用のジョブを殺しておく。postfix(8)をインストールした人なら、お馴染みの作業。
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

/etc/dma/dma.conf

# メールサーバの実アドレス
SMARTHOST mail.example.jp
# imapサーバで受信するアドレスにしておくと、それなりに楽。
MASQUERADE a.example.jp
# ローカル受信禁止
NULLCLIENT

2024/05/06(月)メモ:cyrus-imapdとpostfixで複数ドメイン試してみた。

cyrus-imapd では、いつからか複数ドメインの扱いができるようになっていた。ちょっと試してみたので、その記録。例示用に書き換える過程で何か化けたかもしれないが、ごめんなさい。

環境

  • FreeBSD 14.0-RELEASE-p6
  • postfix-sasl-3.9.0,1 (FreeBSD package)
  • cyrus-imapd38-3.8.2 (FreeBSD package)

設定

postfix

複数ドメインを扱うので、virtual mailboxを使う。
  1. main.cf(よりぬき)
    myhostname = mbox.example.jp
    virtual_transport = lmtp:unix:/var/imap/socket/lmtp
    virtual_mailbox_domains = a.example.jp b.example.jp
    virtual_mailbox_maps = hash:imap_users
  2. imap_users
    foo@a.example.jp OK
    bar@a.example.jp OK
    hoge@b.example.jp OK
    fuga@b.example.jp OK
※master.cf のsubmissionの設定を生かしてもよい。

cyrus-imapd

  1. imapd.conf(よりぬき)
    unixhierarchysep: yes #FQDNには'.'が入るので、念のため。
    sasl_pwcheck_method: auxprop
    virtdomains: userid
    defaultdomain: a.example.jp
    admins: admin
  2. cyradm操作
    % cyradm --user=admin localhost
    localhost>cm user/foo           #'%'や'@'が無い場合、defaultdomainの下に入る。
    localhost>cm user/bar@a.example.jp   #FQDNで指定してもよい。
    localhost>cm user/hoge@b.example.jp
    localhost>cm user/fuga@b.example.jp
    localhost>quit
    %
    

cyrus-sasl

# saslpasswd2 -c foo               # defaultdomain したものは、既定のrealmで。
# saslpasswd2 -c bar
# saslpasswd2 -c hoge@b.example.jp # defaultdomain 以外はFQDNで。
# saslpasswd2 -c fuga@b.example.jp
※ submission認証@postfixにも同じID/passが使われる。

2023/05/01(月)トラブルのメモ

  • 現象:複数のサーバで、DNS権威サーバとUDPでの通信ができない。TCPでは疎通。
    • OSはFreeBSD 13.(1|2)-RELEASE
    • DNSサーバはnsd(from FreeBSD ports)
  • 対策?:現象を深掘りしようと、pfを設定して入ってくるパケットのログ取りをすると、疎通する。しなかった。
なんでやねん。

drill -t @[サーバ] では通るし、traceroute -P UDP -p [ポート番号] で読み捨てるところまでは確認できたんで、単純なIP53Bではなさそう。みると、IP53Bかけてる気配が。FreeBSDのtracerouteって、プローブパケット1つ出すとポート番号変えるのな。GWホストつなげている某プロバイダがこっそりポート番号フィルタリングしたのでは?NetNews盛んな頃こっそりtcp/119フィルタリングしたのを覚えているよ。

2023/01/07(土)またDMZこけた。

取りあえず落ち着いたので、書き留めておく。

1月3日の午後から兆候は出ていた。DMZホスト(FreeBSD13.1R on conoha)へのsshセッションが妙に切れる。postfixやらなにやらがいつの間にやら死んでいる。迷惑メール対策でいろいろ設定をいじっていたので再起動し忘れたかなと思ってた。深夜になると、いよいよつながらなくなる。VPSの制御コンソール経由で再起動かけてもダメ。それどころかブートシーケンスの途中で "out of swap space" とほざいて死んでいく。まだシングルユーザモードでは立ち上がるので、増設ディスク借りてスワップ増量してもだめ。「仕事始めの直前でこれかよ」と思ったよ。

そこで、諦めて次の手を打つ。
  1. 借りた増設ディスクにUFSパーティションを切る。
  2. インストールしたpackageのリストを "pkg info" でとって増設ディスクに保管。
  3. /home, /etc, /usr/local/etc, /usr/local/www (このサイトのデータ)をtarでバックアップして増設ディスクへ。
  4. dumpで / をフルダンプして増設ディスクへ。
  5. VPSの制御コンソールからサーバ再構築。
  6. restore かけてみる。→ 再発。
  7. も一度再構築。freebsd-updateでOSを最新に。
  8. tarとったデータとpackageデータ見ながら、DMZのサービスを1つずつ復元する。
    1. NTP
    2. DNS
    3. postfix
    4. apache
    5. let's encrypt(認証にapacheが必要なので、順序としてはここ。)
    6. Webアプリ
  9. バックアップを圧縮して自宅に待避 ←いまここ
  10. 待避完了したら増設ディスクを返して終了。
postfix復旧した時点で4日の朝3時すぎ。8時には家を出なければ。勘弁してくれよ。仕事始めを済ませてからWeb関連復旧して今日に至る。
xz -9 でdumpイメージ圧縮しているが、終わらない。圧縮後のファイルがまだ5%ぐらいだから、1ヶ月かかるのか。失敗した。先に自宅に移すべきだった。この日記書く裏で思い立って転送始めたが、書いているうちに自宅サーバへの転送終わっちゃった。さあ、増設ディスクを切り離して返却しないと。

2022/08/20(土)Panic!

何が起こったかよく分からないが、FreeBSD 13.1Rなホストの1台で、pkgngのパッケージ管理ファイルがぶっ飛んだ。バックアップを使っても復旧できない。
幸い、portupgrade経由でインストールしたもののログが残っていて、どんなpackageがどんなオプションつけて入っているかは分かっている。
そこで、次の手順で復旧かな。
  1. /var/db/pkg を初期化。
  2. ログを基に入れられるだけportsから再インストール。ただし、perl/ruby/pythonは現在のports正式採用分のみ。
  3. packageのautoremoveフラグを再設定。必要なアプリ以外はautoremoveフラグを立てる。
  4. pkg autoremoveで不要なpackageを削除。