CrystalSnowman.com

あなたの時間節約につながる情報を提供します

WordPress Contact Form 7からのメール送信失敗でSELinuxを設定変更した件

SELinux logo

問い合わせフォームからのメール送信が出来ずに困っていました。調べたところCentOS 7のSELinux設定が原因でした。設定変更してメール送信できました。今回はその方法を紹介します。

メール送信ができない

このブログに「Contact Form 7」プラグインで問い合わせフォームを作成しました。しかしメールが送信できません。処理中のアイコンがぐるぐる回り続けます。

いろいろ調べて「WP Mail SMTP」プラグインを導入したり、迷惑メール設定を見直したり、dnsの正逆引き設定したり、smtpやPostfixを設定しましたがダメでした。しかしOSコマンドでsendmailを実行するとメール送信はできます。

以前nginxのリバースプロキシ設定ができなかった時、SELinuxの設定を見直したことを思い出しました。
そこでサーバ側の設定を確認することにしました。

サーバ設定

このサイトはさくらVPSにCentOS 7をインストールし、Webサーバはnginxで運営しています。

ログの確認

サーバのメールログを調べてみました。

postfixのsendmailコマンド実行時にエラーが発生していました。main.cfのパーミッション設定を確認しましたがすべてreadです。ファイルの問題ではなさそうです。

監査ログを調べます。

このログにより、「httpd_t」のコンテキストが設定された(scontext)プロセス「sendmail」(comm)から、「postfix_etc_t」のコンテキスト(tcontext)への、クラス「dir」(tclass)の操作「{ search }」が拒否(denied)されたことが分かります。

SELinuxの設定

拒否されたことは分かりましたが、ではどうするかということで再び調べました。すると次のサイトが見つかり、参考にさせていただきました。
SELinuxと共存する方法について – Qiita

SELinuxのブールパラメータの確認

SELinuxのhttpd_can_sendmailブールパラメータがoffであるためメール送信ができないことが分かりました。
なおブールパラメータは細かい操作ごとの利用権を設定します。SELinux全体の設定はEnforcing, Permissive, Disableの3つのモードで行います。

ブールパラメータ一覧は「getsebool -a」コマンドで確認できます。
sendmailについて確認します。

またはこちらのコマンドでも確認できます。

httpd_can_sendmailがoffになっています。

SELinuxのブールパラメータの設定

次のコマンドでonにします。

「-P」を付けるとサーバ再起動後も同じ設定になります。

無事問い合わせフォームからメール送信ができるようになりました。
またWordPressからの更新の案内やコメントのメールも届くようになりました。

SELinuxの無効化について

よくCentOSの設定例でSELinux自体を無効化にする方法が紹介されています。しかしその方法は採りたくありませんでした。なぜならセキュリティの問題だけでなく、OSの動作にも影響があるためです。参考にした本にも以下の記述がありました。

CentOS 7では、SELinuxが有効になっていることを前提としたセキュリティ設定が行われています。ですので、SELinuxをDisableモードで起動することは、極力避けるべきです。
~はじめてのCentOS7 Linuxサーバ構築編 page 194~

SELinux自体を無効にするのではなく、SELinuxのブールパラメータで個別に設定する方がよいと思います。

SELinuxについて参考にした本

以前紹介しましたが、次の本を参考にしました。
最近は辞書的な使い方をしています。
はじめてのCentOS7 Linuxサーバ構築編 (TECHNICAL MASTER)
はじめてのCentOS7 Linuxサーバ構築編 (TECHNICAL MASTER)

まとめ

CentOSでWordPressを構築した環境では、Webサーバからのメール送信にSELinuxの設定を見直す必要がありました。SELinuxを無効にするのではなく、SELinuxのブールパラメータで必要な操作を個別に利用可能するほうがOS的には安全だと思います。


Top