KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Vmware の Ubuntu で Postfix を使ってメール送信サーバーを立てるが、ethernet がダウンしていた

why

Ubuntuvm に無事入ったので、サーバーとネットワークの勉強にメールサーバーを立ててみる。

参考

qiita.com

これをやってみる

root@localhost に送れば、ドメインを契約しなくてもいけるようにみえる。

一応 www.kaede.dev は保有しているが、実際にうごかすのは難しそうなので、ローカルでやりたい。

なにをするのか

postfix というライブラリでメールの送信ができるそうなので、いれて、Qiita の先ほどの記事を参考にして、設定ファイルを同様にしてみる

install postfix

f:id:kei_s_lifehack:20210504182830p:plain

Postfix をいれてみる

No config を選択

lib/postfix/ に main.cf がない

main.cf という設定ファイルを編集する必要がある

先ほどの記事では

$ sudo cp 
/usr/lib/postfix/main.cf 
/etc/postfix/main.cf

で lib/ にあるのをコピーすると書いてあるが

/usr/lib/postfix$ ls
configure-instance.sh  libpostfix-global.so  libpostfix-util.so  sbin
libmilter.a            libpostfix-master.so  libxsasl.a
libpostfix-dns.so      libpostfix-tls.so     postfix_groups.pl

lib/ には .so file があるだけで、.cf file の config ファイルはない

which postfix
/usr/sbin/postfix

which で探してみても

usr/ のしたの sbin/ にあるのはバイナリのみだった。

usr/share/config に 設定ファイルを発見

kaede0902@ubuntu:/usr/share/postfix$ ls
dynamicmaps.cf  main.cf.dist  makedefs.out    postinst.functions
main.cf.debian  main.cf.tls   master.cf.dist

/usr/share/postfix/ にあった

しかし、main.cf というものはなく、main.cf.dist と main.cf.tls がある。

dist と tls の中身を比較してみる

main.cf.dist を開いてみる -- メール設定のパス

# The following parameters are used when installing a new Postfix version.
#
# sendmail_path: The full pathname of the Postfix sendmail command.
# This is the Sendmail-compatible mail posting interface.
#
sendmail_path =

# newaliases_path: The full pathname of the Postfix newaliases command.
# This is the Sendmail-compatible command to build alias databases.
#
newaliases_path =

# mailq_path: The full pathname of the Postfix mailq command.  This
# is the Sendmail-compatible mail queue listing command.
# 
mailq_path =

# setgid_group: The group for mail submission and queue management
# commands.  This must be a group name with a numerical group ID that
# is not shared with other accounts, not even with the Postfix account.
#
setgid_group =

こうなっていて、ほとんど空でコメントアウトされている

tls を開く -- smtpd の設定

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

tls には smtp tls の値が組み込まれている。

version があがって、smtp tls の設定ファイルが分離されたようだ。

main.cf.dist を編集 してメールサーバーの設定を決めていく

https://qiita.com/mizuki_takahashi/items/1b33e1f679359827c17d#postfix%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E7%B7%A8%E9%9B%86

この設定の通りに dist のほうをひとつひとつ編集してみる

sudo cp main.cf.dist copyOfMain.cf.dist

念のため、コピーをとってから。

www.postfix-jp.info

各設定の意味は、このサイトがかなりわかりやすい


ドメインDNS と URL と IP Address

事前知識として、DNS の知識を整理しておく

https://www.nic.ad.jp/ja/basics/beginners/dns.html

DNS は Domain Name System の略。

ドメイン管理のシステム。

私たちが URL として認識している文字列は、そこの文字列ではなく 192.xx.192.xxx のような数字の羅列である IP アドレス にアクセスしているらしい。

その IP アドレスと ドメイン名を結びつけるのが、DNS (ドメイン名システム) らしい。

しかしこれを自宅から動かすためには通信機器の IP アドレスを固定したり、オンラインでうごくサーバーを借りなければいけないので、ローカルでの送受信に限定して作業するので、今回は Google Domain などのサービスは使わなくていいいものと解釈する。


myhostname を mail.xxx 、 mydomain を xxx に変更

mail_owner = postfix

メールの所有者を postfix に設定 (コメントアウト解除)

myhostname = mail.hogehuga.com

自分の(メール送信サーバーの)ホスト名 を 記事のとおり、 mail.hogefuga.com として

mydomain = hogehuga.com

自分のドメインを hogehuga.com とする

これはドメイン持っていないと当然使えない。

これはドメインを持っていなくても、ローカルでの動きなので、問題なく使えると解釈する

https://www.youtube.com/watch?v=Q0o0VF3Lgec

しかし、この動画の 3:03 では、実際に有効な所属ドメインを使えと書いてある。

hogehuga.com は他人のブログだが、有効なら他人のでもいいのだろうか?

FQDN として実際に所有しているドメインが必要なのか?

https://www.youtube.com/watch?v=Q0o0VF3Lgec

この動画の 2:41 ではマシン自身の FQDN が必要だと書いてある。

FQDN とは www. を含めた URL 部分 のことであり、IP adress も同じものを指す。

? IP adress とおなじということは、これを設定するには IP adress の固定が必要なのだろうか?

kaede0902@ubuntu:~$ hostname -f
ubuntu

ちなみに hostname -f でフルのドメイン名が確認出来て、この vm の場合は単に ubuntu だった。

今回は hogehuga にする


myorigin に $mydomain をいれる

myorigin は hoge@gmail.comgmail.com の部分と解釈する

# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.

my origin は一貫性をたもつため、ドメイン名を持たない受信者に付与されるものらしい

記事では

myorigin = $mydomain

これをコメントアウト解除しろとなっているが、実際は

#myorigin = /etc/mailname
#myorigin = $myhostname
#myorigin = $mydomain

の 3つがあった。

/etc/mailname になにがあるのかみてみると

ls /etc/ | grep mail
mailcap
mailcap.order

mailname というファイルやフォルダはない。つまりテキストファイルをつくればその中身が反映されるということだと仮定する。

$mydomain のほうが簡単そうなので、こちらを使用することにする


inet interface に all を採用

inet_interfaces = all

複数あるなかからこれをコメントアウト

inet interface とループバックと localhost

www.postfix-jp.info

このメールシステムがメールを受け取るネットワークインターフェース アドレス。"all" を指定すると、すべてのネットワークインターフェースで メールを受け取り (デフォルト)、"loopback-only" を指定するとループバック ネットワークインターフェースのみでメールを受け取ります (Postfix 2.2以降)。 このパラメータは user@[ip.address] 宛のメール配送も制御します。

inet interface とは メールの配送の制御の設定で、ループバックのみにもすることができるようだ。

e-words.jp

ループバックアドレスとは react を動かしたりすると走る、localhost のこと。

127.0.0.1IPv4 の規格での正式な IP アドレスであり、

::1 が IPv6 でのアドレスである

なので、all 以外は loopback-only も 127.0.0.1 も ::1 も同じ localhost の意味である。


mydestination に $myhostname, localhost.$mydomain, localhost, $mydomain, を記載

http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html#mydestination

たどり着くところ?

#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain

$myhostname, localhost.$mydomain, localhost は共通で

$mydomain と {mail, www, ftp,}.$mydomain を付けるかにわかれる

この記事では

$mydomain までつける設定を採用している

https://www.youtube.com/watch?v=Q0o0VF3Lgec

4:36 をみると、ほかのサーバーに配送(転送のこと?) をせずに、最終受信者としてこの Linux マシンにこれらにきたメールを格納するという意味だと書いてある。


local_recipient_maps

デフォルトでは empty

記事では

local_recipient_maps = unix:passwd.byname $alias_maps

alias maps から unix password で名前順で並べると解釈する

http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html#local_recipient_maps

ローカルに入っている受信者リスト

中身を空にするとどこからでもメールを受信できる

postfix は送信サーバーのはずなのに、どうして受信の話がでてくるんだろう?

まぁとりあえず、空でなければ登録されているアドレス以外を拒否するって解釈にする


mynetworks

www.postfix-jp.info

mynetworks は信頼できるメールの中継先と解釈する

空白や区切ることで複数のアドレスを入れられる

記事では

mynetworks = 127.0.0.0/8, 10.0.0.0/24

となっていて、localhost の 1~8 ? と

ifconfig で帰ってきた eth0 の inet adress を追加している

現在は ifconfig コマンドは非推奨で、ip コマンドが推奨になっている

やってみる

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:0a:00:xx:xx brd ff:ff:ff:ff:ff:ff
    altname enp2s1

link/ether は個人情報かもしれないから隠している

inet の ipv が 4 と 6 はでるが、eth0 とやらがでない。

link/ether のところは Mac Adress

そもそも ether とは

https://wa3.i-3-i.info/word15143.html

ethernet アドレスはパソコンの部品についているものだから変えられないが

ip アドレスは変えられると解釈する

ens33 が ethernet 的なもの

しかし、この結果は ethernet が DOWN しているので、仮想マシンでやる記事をみないといけないとアドバイスをもらった

別の設定の記事を読む