ラズパイで作る自宅WEBサーバ構築
第7回 メールサーバ(Postfix/Dovecot) 設定・前編 2025.06.16
今回はメールサーバー(Postfix)の設定を行います。
送信サーバーとしてPostfix、受信サーバーとして dovecot(ダヴコット) を使用します。
実際には、Postfix がメールの送信と着信監視も行っていて、着信するとサーバ内にメールを保存します。
それを取り出して提供するのが、dovecot です。

本文では上記のような構成で説明しています。
Postfix の設定は多岐に渡り、また記述方法も多様ですので、参考にみてください。
また、複数ドメイン名に対応したVirtual設定は解説していません。
パッケージの有無を確認します
$ dpkg --get-selections | grep postfix
利用できるパッケージのバージョンの確認します
$ apt-cache show postfix
Package: postfix
Architecture: arm64
Version: 3.6.4-1ubuntu1.3
Postfix のインストール
$ sudo apt-get install postfix

メール設定の一般形式:[インターネットサイト] を選択します

システムメール名:example.jp ← 取得したドメイン名を入力してください
$ postconf | grep mail_version
mail_version = 3.6.4
myorigin を確認します
$ cat /etc/mailname
example.jp
/etc/postfix/main.cf の編集
下記の設定では、ルータ配下にある(LAN側)ノートパソコン(192.168.11.20)から送信を許可する設定になっています。
→第3回 Ubuntu 詳細設定 参照
許可するパソコンを追加する場合は、mynetworks に追加します。
待機WEBサーバのローカルIPアドレスも登録しておくと公開サーバ故障時の切り替えがスムーズです。
$ sudo vi /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP unknown ← メールサーバ名の隠蔽化
myhostname = ns.example.jp
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, example.jp, localhost.example.jp, localhost
mynetworks = 192.168.11.21, 192.168.11.31, 127.0.0.1,192.168.11.20
mailbox_size_limit = 1073741824 ← メールボックスサイズを1Gに制限
inet_protocols = ipv4 ← IPV4のみ
message_size_limit = 10485760 ← 送受信メールサイズを10Mに制限
home_mailbox = Maildir/ ← Maildir形式へ移行
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
↑受信者はUNIXアカウントもしくはローカルエイリアス
smtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client, ← 逆引きができないホストの接続を拒否
permit
allow_mail_to_commands = alias, forward, include
default_privs = nobody ← 配送エージェントが使うデフォルト権限
【補足説明】
※ local_recipient_maps に「proxy:」を付けないと、メルアドに.(ドット)
例) hoge.hoge@example.jp
がある場合に受信拒否されてしまいます
Recipient address rejected: User unknown in local recipient table
※ allow_mail_to_commands に include を付加すると "| command" への配送が認められます
※ default_privs = nobody 外部ファイルまたはコマンドへの配送で、配送エージェントが使う デフォルトの権限です。特権ユーザや POSTFIX の所有者を指定してはいけません。
main.cf の内容を確認します。設定内容がダンプされ、末行に問題個所があれば出力されます
$ postconf -d (デフォルト値表示)
$ postconf
Postfix を再起動します
$ sudo service postfix restart
起動プロセスの確認
master, pickup, qmgr の3つのプロセスが起動していることを確認します。
$ ps -alx | grep master
$ ps -alx | grep pickup
$ ps -alx | grep qmgr
送信テスト
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ns.example.jp ESMTP unknown
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
Escape character is '^]'.
のあと、すぐに
Connection closed by foreign host.
と表示される場合は、inetd が起動していない可能性があります。
SMTPSのサーバ証明書と認証設定
証明書やサーバ用の秘密鍵は既存のものを利用した場合は、有効期限は 2034年までになっているようです。
SSL証明書の中身(期限のみ)を確認したい場合
$ openssl x509 -dates -noout -in /etc/ssl/certs/ssl-cert-snakeoil.pem
notBefore=Apr 2 12:08:51 2024 GMT
notAfter=Mar 31 12:08:51 2034 GMT
SSL証明書の中身(期限、フィンガープリント)を確認したい場合
$ openssl x509 -text -fingerprint -noout -in /etc/ssl/certs/ssl-cert-snakeoil.pem
※SSL証明書単体のcrtファイルも同じ方法で確認できます。
$ sudo vi /etc/postfix/main.cf
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
独自に証明書を作成する場合は、「SMTP 自己認証」などで検索すると、詳細に説明しているサイトを探すことができます。
Submissionポート(TCP587)の設定
現在、暗号化プロトコルSSL(Secure Sockets Layer)と呼ばれているものは、SSLの脆弱性を解消した次世代規格TLS(Transport Layer Security)です。
標準のSMTPポート番号は25です。
最初から全行程を暗号化するのが SMTP over SSL (ポート番号:465)です。
最初は平文で通信を始め、ネゴシエーション結果により途中から暗号化に転じるのが STARTTLS (25、587) です。
587番ポートはサブミッションポートと呼ばれています。
$ sudo vi /etc/postfix/master.cf
#submission inet n - y - - smtpd
#-o smtpd_tls_security_level=encrypt
↓コメントを外して編集
submission inet n - y - - smtpd
-o smtpd_tls_security_level=may
#smtps inet n - y - - smtpd
# -o smtpd_tls_wrappermode=yes
↓コメントを外す
smtps inet n - y - - smtpd
-o smtpd_tls_wrappermode=yes
※設定値を encrypt にしてしまうと、クライアントから接続時に
530 5.7.0 Must issue a STARTTLS command first
と必ずSTARTTLSをしてから送れ、と言われてしまうので、暗号化を必須としない may にしたほうが無難です。
SMTPポート(TCP25)の設定
STARTTLSはサブミッションポートの他、通常の25番ポートでも可能です。
通常のSMTPでSTARTTLSの設定を行うには、master.cfではなく main.cf を編集します。
$ sudo vi /etc/postfix/main.cf
smtpd_tls_security_level=may ← 追記します
平文でのやりとりが標準の25番ポートでは、暗号化できなくても仕方ないので、may を指定します。encrypt を指定してはいけません。
設定の反映とポートの確認
$ sudo systemctl restart postfix
$ sudo apt-get install net-tools
$ sudo netstat -anp | grep "master" | grep "0.0.0.0"
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4325/master
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 4325/master
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 4325/master
開いているポートを確認します。
$ netstat -an | grep tcp | grep LISTEN
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.11.21:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.11.21:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.11.21:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.11.21:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:953 :::* LISTEN
tcp6 0 0 ::1:953 :::* LISTEN
tcp6 0 0 ::1:953 :::* LISTEN
tcp6 0 0 ::1:953 :::* LISTEN
Submissionポートでの通信(STARTTLS)を確認します
1.送信元サーバーによるSMTPトランザクションの開始
2.EHLOへの応答により、通信相手サーバーがSTARTTLSに対応しているか判定
3.送信元と送信先のメールアドレスとメッセージの内容すべての暗号化通信開始
※.送信側・受信側両方がSTARTTLSに対応していないとメールは平文で送信されます
$ telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ns.example.jp ESMTP unknown
ehlo localhost
250-mail.example.com
250-STARTTLS ←ここを確認
250-AUTH DIGEST-MD5 NTLM CRAM-MD5
....
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
SMTP-AUTH(SASL2)の実装
もともとSMTPサーバには認証機能がありませんでした。
その認証を、普通にIDとパスワードを使ってやるのが「SMTP-AUTH(エスエムティーピー・オース)」です。
パッケージの確認とインストールを行います
$ dpkg --get-selections | grep sasl
libsasl2-2:arm64 install
libsasl2-modules:arm64 install
libsasl2-modules-db:arm64 install
$ apt-cache show sasl2-bin
Package: sasl2-bin
Architecture: arm64
Version: 2.1.27+dfsg2-3ubuntu1.2
$ sudo apt-get install sasl2-bin
◇テストユーザの作成
メールテスト用にユーザアカウントを1つ作っておきます。
$ sudo /usr/sbin/adduser --home /home/testuser --shell /bin/bash testuser
Enter new UNIX password: testpasswd
ログインできないユーザにします
$ sudo usermod -s /usr/sbin/nologin testuser
※testuser, testpasswd は任意に書き換えてください。
$ sudo saslpasswd2 -u example.jp -c testuser
Password: testpasswd
設定内容を確認します
$ sudo sasldblistusers2
testuser@example.jp: userPassword
※ユーザを削除する場合
$ sudo saslpasswd2 -u example.jp -d testuser
グループおよび権限を設定します
$ sudo chgrp postfix /etc/sasldb2
$ sudo chmod 640 /etc/sasldb2
Postfix が chroot環境で実行されているので、ハードリンクします(/etc/postfix/master.cf で確認)。
$ cd /var/spool/postfix/etc
$ sudo mv sasldb2 sasldb2_org ← 初期状態では sasldb2 はないかもしれません
$ sudo ln /etc/sasldb2 /var/spool/postfix/etc
Postfix に設定を追加します
$ sudo vi /etc/postfix/main.cf
smtpd_sasl_auth_enable=yes ←SMTP認証を使用する
smtpd_sasl_local_domain=example.jp
smtpd_recipient_restrictions=
permit_mynetworks,
permit_sasl_authenticated,
check_client_access hash:/etc/postfix/reject_client,
reject_unauth_destination
smtpd_sasl_security_options=noanonymous
※オプションの説明
permit_mynetworks:自サイトのネットワークからの接続を無条件で許可する
permit_sasl_authenticated:SMTP認証された接続を無条件で許可する
reject_unauth_destination:このサーバで配送終了とならないドメイン宛メール送信を却下する(不正中継対応)。
noanonymous:匿名での接続を拒否する
LOGIN認証や、PLAIN認証も含める場合には、「noanonymous」だけを設定します
設定を確認します
$ postconf
接続を確認します
$ telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ns.example.jp ESMTP unknown
ehlo localhost
250-ns.example.jp
:
250-AUTH PLAIN
:
quit
次回は、dovecot によるメール受信設定と迷惑メール防止について解説します。
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|