Vmware の Ubuntu で Postfix を使ってメール送信サーバーを立てるが、ethernet がダウンしていた
why
Ubuntu が vm に無事入ったので、サーバーとネットワークの勉強にメールサーバーを立ててみる。
参考
これをやってみる
root@localhost に送れば、ドメインを契約しなくてもいけるようにみえる。
一応 www.kaede.dev は保有しているが、実際にうごかすのは難しそうなので、ローカルでやりたい。
なにをするのか
postfix というライブラリでメールの送信ができるそうなので、いれて、Qiita の先ほどの記事を参考にして、設定ファイルを同様にしてみる
install postfix
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
version があがって、smtp tls の設定ファイルが分離されたようだ。
main.cf.dist を編集 してメールサーバーの設定を決めていく
この設定の通りに dist のほうをひとつひとつ編集してみる
sudo cp main.cf.dist copyOfMain.cf.dist
念のため、コピーをとってから。
各設定の意味は、このサイトがかなりわかりやすい
ドメインと 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.com の gmail.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 と
このメールシステムがメールを受け取るネットワークインターフェース アドレス。"all" を指定すると、すべてのネットワークインターフェースで メールを受け取り (デフォルト)、"loopback-only" を指定するとループバック ネットワークインターフェースのみでメールを受け取ります (Postfix 2.2以降)。 このパラメータは user@[ip.address] 宛のメール配送も制御します。
inet interface とは メールの配送の制御の設定で、ループバックのみにもすることができるようだ。
ループバックアドレスとは react を動かしたりすると走る、localhost のこと。
127.0.0.1 が IPv4 の規格での正式な 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
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 しているので、仮想マシンでやる記事をみないといけないとアドバイスをもらった
別の設定の記事を読む