Postfixサーバーを構築する
この記事に書いてあること
0.環境
OS: Rocky Linux8.8 仮想ソフトウェア: VirtualBox7.0
1.Postfixのインストール
dnfでインストールする
$ sudo dnf -y install postfix
2. 外部通信のためのfirewall設定
外部のサーバーとSMTP通信するため、以下のコマンドでfirewallに穴をあける
$ sudo firewall-cmd --add-service=smtp --permanent success $ sudo firewall-cmd --reload success
上記のようにsuccessと出れば成功
以下のコマンドを打ち、servicesにsmtpが加えられているか確認しても良い
$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: cockpit dhcpv6-client smtp ssh ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
3. Postfixの設定
/etc/postfix/main.cfのinet_interfacesの設定をlocalhostからallに変更する
inet_interfaces = localhost ↓ inet_interfaces = all
Postfixを起動させる。以下のように起動させると再起動時にも自動でPostfixが立ち上がるようになる
$ systemctl enable postfix --now
4. メールの送信テスト
telnetとsendmailでの2通りのテスト方法を記述する。
telnetを用いてテストすると実際に自分でSMTPのシーケンスを打ち込んでメールを送信する流れを体感できる
sendmailコマンドを用いたテストは手早く簡単にテストでき、メールのheader fromなどのヘッダーを自動入力してくれる
4-1. telnetを用いたテスト
telnetをインストールする
$ sudo dnf -y install telnet
ループバックアドレス(127.0.0.1)、自分自身のIPアドレスまたは自分自身のホストネームとポート番号25を指定してtelnetでSMTP通信を開始できる。telnetはquitを入力すると終了できる。
$ telnet 127.0.0.1 25 or $ telnet [自分自身のIPアドレス] or $ telnet [自分自身のホストネーム]
RFCによって定められてSMTPコマンドを打ちこんでメールを送信することができる。以下にSMTPセッションの例を示す(一部加工してある)。
$ telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 [Postfixサーバーのホスト名] ESMTP Postfix HELO kk 250 test.num01.kk MAIL FROM: test@hoge.com 250 2.1.0 Ok RCPT TO: [宛先メールアドレス] 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> test mail! . 250 2.0.0 Ok: queued as CD37E88FADC quit 221 2.0.0 Bye Connection closed by foreign host. 新しいメールが /var/spool/mail/admin にあります
簡単なSMTPコマンドの説明は以下。上から順に打ち込んでいけばメールを送信できる。 1. HELO [てきとうな文字列] 2. MAIL FROM: [送信元メールアドレス] 3. RCPT TO: [宛先メールアドレス] 4. DATA .(ピリオド)のみの行に改行を入力するまで、メール本文を打ち込める
4-2. sendmailコマンドを用いたテスト
$ sendmail [ユーザー名]@[自分自身のホストネーム]をターミナルに入力しメール本文を入力する。メール本文の入力は.(ピリオド)のみの行と改行を入力することで終了できる。
$ sendmail [ユーザー名]@[自分自身のホストネーム] test mail2! .
5. メールの保管場所
デフォルトでは/var/spool/mail/[ユーザー名]に一つのファイルとして複数のメールが保管されている。以下の例は一部加工している
$ cat [ユーザー名] Return-Path: <test@hoge.com> X-Original-To: xxxxxxx@xxxxx Delivered-To: xxxx@xxxxx Received: from xx (localhost [127.0.0.1]) by xx.xx.xxx (Postfix) with SMTP id CD37E88FADC for <xxxx@xxxx>; Tue, 19 Sep 2023 06:41:49 -0400 (EDT) Message-Id: <20230919104204.CD37E88FADC@xxx.xxxx.xxx> Date: Tue, 19 Sep 2023 06:41:49 -0400 (EDT) From: test@hoge.com test mail! From xxxx@xxx Tue Sep 19 06:53:16 2023 Return-Path: <xxxx@xxx> X-Original-To: xxxx@xxx Delivered-To: xxxx@xxxx Received: by xxxx.xxxx.xx (Postfix, from userid 1000) id 3017D88FADD; Tue, 19 Sep 2023 06:53:16 -0400 (EDT) Message-Id: <20230919105316.3017D88FADD@xxx.xxx.xx> Date: Tue, 19 Sep 2023 06:53:11 -0400 (EDT) From: xxxx <xxxx@xxx> test mail 2!
メールの受信形式はmain.cfを変更することで変更できる