現在運用中のメインサーバーからは毎日2回 Logcheck の結果が送信されてくる。現在、それ以外に Samba ad dc サーバーと ルーター を稼働させているが、これらには Postfix を導入しておらず、Logcheck が動作しないために無管理状態になっている。
そこで、この2つのサーバーから Logchek の結果を送信できるようにする。
やったこと。
既にPostfixがNo configurationで導入されている場合
Samba ad dc サーバーに Postfix を導入する。25番ポートが塞がれても今は問題ない。
Postfixの状況確認
Samba ad dc サーバーは何かの都合(よく覚えていない)で Postfix を導入していた。main.cf がないので動作していない。
$ sudo systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Fri 2019-08-16 20:28:54 JST; 7s ago
mq ConditionPathExists=/etc/postfix/main.cf was not met
Postfixの再設定
再設定を実施。
DigitalOcean / How to Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 16.04
$ sudo dpkg-reconfigure postfix
1つめ Internet Site を選択。
2つめ hogeserver.hogeddns.jp とする。実際には addc.hogeserver.hogeddns.jp という FQDN だが、普段利用しているドメイン名でいいみたい。
3つめ hogeuser@hogeserver.hogeddns.jp とした。
Google 先生に翻訳してもらった結果は以下。
「postmaster」、「root」、およびその他のシステムアカウントのメールは、実際のシステム管理者のユーザーアカウントにリダイレクトする必要があります。
この値を空のままにすると、そのようなメールは/ var / mail / nobodyに保存されますが、これは推奨されません。
メールは、ルートとして外部配信エージェントに配信されません。
既に/ etc / aliasesファイルがあり、ルートのエントリがない場合は、このエントリを追加する必要があります。 空白のままにして、追加しないでください。
ルートおよびポストマスターのメール受信者:
ただ、この入力は反映されなかった模様。/etc/aliases が既にあるため。
4つめ $myhostname とした。
当初、localhost.$mydomain, $mydomain も指定していたが、結果として余計なメールを受け取ろうとしてしまう。
5つめ No とした。
Google 先生に翻訳してもらった結果は以下。
同期更新が強制されると、メールの処理が遅くなります。 強制されていない場合、システムが不適切な時間にクラッシュし、ジャーナルされたファイルシステム(ext3など)を使用していない場合、リモートでメールを失う可能性があります。
メールキューで同期更新を強制しますか?
6つめ 自ホストのみとした。
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
7つめ 0とした。
Google 先生の翻訳結果は以下。
暴走したソフトウェアエラーを防ぐために、Postfixがメールボックスファイルに置くべき制限を指定してください。 値ゼロ(0)は、制限がないことを意味します。 アップストリームのデフォルトは51200000です。
メールボックスのサイズ制限(バイト):
8つめ +とした。
9つめ all とした。
ここまで設定したところで、以下が表示される。
$ sudo dpkg-reconfigure postfix
setting synchronous mail queue updates: false
setting myhostname: addc.hogeserver.hogeddns.jp
setting alias maps
setting alias database
changing /etc/mailname to hogeserver.hogeddns.jp
setting myorigin
setting destinations: $myhostname
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all
setting inet_protocols: all
WARNING: /etc/aliases exists, but does not have a root alias.
Postfix (main.cf) is now set up with a default configuration. If you need to
make changes, edit /etc/postfix/main.cf (and others) as needed. To view
Postfix configuration values, see postconf(1).
After modifying main.cf, be sure to run 'service postfix reload'.
Running newaliases
Processing triggers for libc-bin (2.27-3ubuntu1) ...
/etc/aliases について、削除して試してみたところ、以下のファイルができた。
いままで知らなかったけど、root に来るメールは他の誰かを作って送るのが正しかったのね…。
/etc/aliases
# See man 5 aliases for format
postmaster: root
root: hogeuser
main.cf をちょっとだけ手直し。
/etc/postfix/main.cf
relayhost = [hogeserver.hogeserver.hogeddns.jp]
※赤文字箇所を変更。
relayhost として上位サーバー、つまり、自宅で日頃運用しているメールサーバーを指定。IP アドレスを指定できないため、上位サーバーのローカル IP アドレスが特定できる(名前解決できる)ホスト名を指定する。この時、[]で囲むことによって MX レコードを見に行かなくなる。
設定反映。
$ sudo systemctl restart postfix
テスト
メール送信テスト。
Qiita / SMTP コマンドを自分で打ってメールを送信する
$ telnet localhost 25
Trying ::1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 addc.hogeserver.hogeddns.jp ESMTP Postfix (Ubuntu)
HELO localhost
250 addc.hogeserver.hogeddns.jp
MAIL FROM:hogeuser@addc.hogeserver.hogeddns.jp
250 2.1.0 Ok
RCPT TO:root@hogeserver.hogeddns.jp
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test Mail
From: hogeuser@addc.hogeserver.hogeddns.jp
To: root@hogeserver.hogeddns.jp
Test message...
.
250 2.0.0 Ok: queued as D43423000F94
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
これでメールが届けばまずはOK。
Logcheck をインストールし、テストする。
$ sudo apt install logcheck
$ sudo -u logcheck logcheck -t
これで、Logcheck からレポートメールが届けばOK。
Postfixを新規にインストールする場合
ルーターに Postfix をインストールする。25番ポートはサーバーに転送するため塞ぐわけには行かない。
Postfixのインストール
Logcheck のスクリプトを見てみたら、mime-construct というコマンドでメールを送っているらしいことが分かった。これは MTA 必須だ。
最初、loopbackをサーバーにリダイレクトしようかと思ったが、iptables では DNAT まではできそうなんだけど、SNATがどうにも思いつかず断念。
Qiita / iptables で ポート転送
Qiita / 80番ポートへ届いたパケットをiptablesでローカルの上位ポートに転送する
Qiita / 色々なport forwarding方法
StackExchange / iptables redirect outside requests to 127.0.0.1
StackExchange / Iptables redirect to localhost?
どうにもならないので、Postfix を loopback だけで受け付けるようにしてみる。
$ sudo apt install postfix
1つめ Internet Site とした。
2つめ router2 とした。
※最初間違えて hogeuser@hogeserver.hogeddns.jp を指定してしまい、From メールアドレスがおかしなことになった。間違えたら、/etc/mailname を修正する。
これでインストールが終わり、Postfix が起動する。
そこで、すぐにサービスを止める。
$ sudo systemctl stop postfix
main.cf を設定する。
ホスト向けのメールと上位ホストを設定し、利用するインターフェースを loopback のみにする。また、/etc/hosts を参照させたいので、その設定を追加。
Qiita / Postfixでメール送信する際に/etc/hostsを参照させる方法
/etc/postfix/main.cf
…
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = v4router
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = router2
relayhost = [hogeserver.hogeserver.hogeddns.jp]
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
smtp_host_lookup = native
ルーターなので、別の pppoe 接続をしており、名前解決には宅内のDNSを利用していない。よって、hogeserver の名前解決ができない。そこで、hosts にIPアドレスを書いておく。
/etc/hosts
…
172.16.1.100 hogeserver.hogeserver.hogeddns.jp
自ホストの FQDN は以下で確認。問題なし。
$ hostname --fqdn
router2
rootに対するメールは管理者に送ることにする。
/etc/aliases
# See man 5 aliases for format
postmaster: root
root: hogeuser@hogeserver.hogeddns.jp
ここまで設定できたところで Postfix を起動してポートの利用状況を確認する。
$ sudo newaliases
$ sudo systemctl start postfix
$ sudo lsof -i:25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 10379 root 13u IPv4 210615 0t0 TCP localhost.localdomain:smtp (LISTEN)
loopback で LISTEN しているらしいことが分かる。
テスト
外からメールを送信して問題ないことを試す。
これは、例えば Gmail とかからメールを送ってみれば良い。
メールが着信するなら、ルーターとして 25 ポートは生きていると分かるから安心。
Logcheck をインストールし、テストする。
$ sudo apt install logcheck
$ sudo -u logcheck logcheck -t
これで、Logcheck からレポートメールが届けばOK。
なお、Logcheck と一緒に mime-construct がインストールされるので、メール送信部分だけであれば以下のコマンドでテストができる。
$ mime-construct --to "hogeuser@hogeserver.hogeddns.jp" --subject "test subject" --string "test body"
設定完了。
さいごに
ごくごく当たり前のことだけれど、国内で広く使われている技術についてはこれでもか!という程に日本語の検索結果が出てくる(WordPress関連なんてホント凄い)。だけど、少し変わったことをやろうと思うと途端に日本語の情報量が減って、英語との格闘になる。
だいたい面倒な話になった場合の情報源は Q&A な訳だが、ここに国民性が出るのか、日本語による質問はあまり見かけない。で、情報を見つけたらそれをキーに英語のマニュアルとを調べていく…。
そこで Google 先生のページ翻訳出動。これがあるおかげでどうにか理解ができて話を先に進められる。これはだいぶ助かる、っていうかなかったら大変すぎる。とても良い時代だなぁ。
とはいえ、今回は紆余曲折したものの、結果としては日本語の検索結果だけを組み合わせれば実現できた。翻訳しながら調べるのと比べてどれだけ楽か。情報を提供してくださる皆様、どうもありがとうございます。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他