EximのメールヘッダーのMTA情報を隠蔽する

# はじめに

本記事では、Eximで送信メールのヘッダーのMTA情報を隠蔽する方法を紹介します。
Postfixについてはおそらくググったら同様の内容が出てくると思います。

メールヘッダーのMTA情報には使用しているMTAやそのバージョンが記載されます。
そのため、隠蔽されている方がよりセキュアと言えるでしょう。
下記はEximでメール配信を行い、受信側でReceivedヘッダーを確認した例です。

```
Received: from [::1] (port=XXXXX helo=example.com)
 by example.com with esmtpa (Exim 4.94.2)
 (envelope-from <hoge@example.com>)
 id ******-******-**
 for user@domain.com; Fri, 25 Mar 2022 16:22:22 +0900
```
(Exim 4.94.2)という表示がされていますね。
こちらはEximの設定で非表示（削除）できるので、以下に方法を記載します。
使用するEximのバージョンは上記の通り(Exim 4.94.2)です。

# 実行手順
### received_header_textの現在の設定内容の確認

Receivedヘッダーの内容は、EximのConfigurationファイルで設定するオプションの「received_header_text」で指定します。

現在の設定を確認しましょう。

```
# exim -bP received_header_text
received_header_text = Received: ${if def:sender_rcvhost {from $sender_rcvhost\n\t}{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std\n\t}}(Exim $version_number)\n\t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}id $message_exim_id${if def:received_for {\n\tfor $received_for}}
```

長いですが、よく見ると中に(Exim $version_number)と書かれていますね。
削除したいのは(Exim 4.94.2)なので、これを括弧ごとまるっと消せば隠蔽できそうです。

### EximのConfigurationファイルの編集

設定の際はEximのConfigurationファイルを編集します。

ファイルパスを確認しておきましょう。

```
# exim -bV
```

「Configuration file is」と書かれている行に出力されます。

```
Configuration file is /etc/exim/exim.conf
```

こちらを編集しましょう。

```
# vim /etc/exim/exim.conf
```

このファイルに1行追加する形です。
MAIN CONFIGURATION SETTINGと書かれている箇所の下に記述するとよいでしょう。

```exim.conf
######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################
#
```

内容は先程出力した現在の設定内容から(Exim $version_number)を消したものになります。
received_header_textはデフォルトだとファイルで指定されていないと思いますが、念のため検索して設定が無いか確認しましょう。
ファイルで指定されていない場合、デフォルトの設定が適用されるようです。

設定が無いことを確認したら、下記のようにreceived_header_textを指定して記述を追加し、保存しましょう。

```exim.conf
received_header_text = Received: ${if def:sender_rcvhost {from $sender_rcvhost\n\t}{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std\n\t}}\n\t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}id $message_exim_id${if def:received_for {\n\tfor $received_for}}
```

これで設定は完了です。

```
# exim -bP received_header_text
received_header_text = Received: ${if def:sender_rcvhost {from $sender_rcvhost\n\t}{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std\n\t}}\n\t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}id $message_exim_id${if def:received_for {\n\tfor $received_for}}
```

実際にメールを送信し受信先でヘッダーを確認します。

```
Received: from [::1] (port=XXXXX helo=example.com)
 by example.com with esmtpa
 (envelope-from <hoge@example.com>)
 id ******-******-**
 for user@domain.com; Fri, 25 Mar 2022 17:45:32 +0900
```

よくできました。

# おわりに

cPanelを使っているならWHMのExim Configuration ManagerのAdvanced Editorから簡単に設定できます。
EximはPostfixに比べて文献が少なめなので、調べるのに苦労しました。