ロリポップで独自ドメインメールを使う時のDNS設定

ロリポップで独自ドメインを使う場合、ネームサーバーにロリポップのサーバーを割り当てることが多いと思いますが、他社ネームサーバーを使いたい場合は以下のような感じで設定できます。

MXレコード

メールサーバーは初期ドメイン(***.lolipop.jpなど)に対してdigコマンドを使って調べられます。

$ dig mx ***.lolipop.jp

結果はANSWER SECTIONに表示されます。

下記の例ではmx01.lolipop.jpがメールサーバーになります。

;; ANSWER SECTION:
***.lolipop.jp. 600 IN MX 10 mx01.lolipop.jp.

digコマンドが使えない場合はnslookupコマンドを使っても確認できます。
$ nslookup -type=mx ***.lolipop.jp

SPFレコード

SPFレコードは以下のように設定します。

種別TXT
サブドメイン@(サブドメイン無し)
内容v=spf1 include:_spf.lolipop.jp ~all
SPFレコードの設定

ちなみに、_spf.lolipop.jpの詳細について調べたい場合はdigコマンドで

$ dig txt _spf.lolipop.jp

のようにして確認できます。

記事の投稿時点では以下のようになっていました。

v=spf1 +ip4:157.7.104.0/22 +ip4:150.95.240.0/21 +ip4:163.44.185.0/24 +ip4:118.27.125.0/24 +ip4:157.7.100.0/24 ~all

DMARCレコードの設定

DMARCレコードは以下のように設定します。

種別TXT
サブドメイン_dmarc
内容v=DMARC1; p=none
DMARCレコードの設定

rua/rufを追加することでレポートを送信してもらうこともできます。(参考: spfとdmarcの設定方法

v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]

リンク

ムームーDNSを利用中の方はSPFレコードの設定をお願いいたします – 2022年04月14日 / 新着情報 / お知らせ – ロリポップ!レンタルサーバー
https://lolipop.jp/info/news/7173/

SPFとDMARCの設定方法

独自ドメインでメールを使いたい場合、MXレコードだけ設定すれば最低限使うことができますが、なりすましメールや迷惑メールへの対策を考えるとSPFレコードとDMARCレコードを設定するのが有効です。

SPFの設定

SPFレコードを設定することで、メール送信に使用するサーバーを登録することができます。これによって、(送信サーバーが異なる)Fromだけ詐称したメールを判別することができるようになります。

SPFを設定する場合は、TXTレコードに以下の設定を追加します。

メールサーバーをIPアドレスで指定する場合

example.com. IN TXT "v=spf1 ip4:123.456.789.012 -all"

123.456.789.0/24のようなCIDR方式も使用可能です。

メールサーバーをホスト名で指定する場合

example.com. IN TXT "v=spf1 a:mail.example.com -all"

指定したドメインのSPFレコードを参照する場合(レンタルサーバーを使う場合など)

example.com. IN TXT "v=spf1 include:spf.example.com -all"

当該ドメインからメールを送信しない場合(受信専用もしくはメールを一切使わない場合)

example.com. IN TXT "v=spf1 -all"

DMARCの設定

DMARCを設定することで認証エラーとなった場合にとって欲しいアクションを指定することができます。また、自分のドメインを使って送信されたメールのレポートを受信する設定をすることもできます。

DMARCの設定もTXTレコードを使います。

_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]"

pは認証に失敗した場合に実行して欲しい内容を設定します。

  • none 何もしない(レポートは送信する)
  • quarantine 迷惑メールとして振り分け
  • reject 受信拒否

ruaは集計レポートを受信するメールアドレスを設定できます。(省略可)
rufは認証失敗レポートを受信するメールアドレスを設定できます。(省略可)

findコマンドと-execオプションの使い方

findはディレクトリ内のファイルを検索するためのコマンドです。
基本的な使い方は以下の通りです。

$ find ./
.
./01
./01/aaa.txt
./01/bbb.txt
./01/ccc.jpg
./02
./02/ddd.png
./02/eee.zip

findと検索したいディレクトリを入力するとディレクトリ内のファイルを表示してくれます。

ワイルドカードで検索するファイル名を指定

特定のファイル名のみ検索したい場合は-nameオプションが使えます。
使い方は次のような感じです。

$ find ./ -name "*.txt"
./01/aaa.txt
./01/bbb.txt

タイプを指定

ファイル名ではなくファイルの種類(通常ファイルとかディレクトリとか)を指定して
検索したい場合は-typeオプションを使います。

$ find ./ -type f
./01/aaa.txt
./01/bbb.txt
./01/ccc.jpg
./02/ddd.png
./02/eee.zip

fは通常ファイルという意味です。ディレクトリを検索したい場合はdと入力します。

検索したファイルに対してコマンドを実行

検索したファイルに対してコマンドを実行したい場合は-execオプションを使います。
使い方は次のような感じです。

$ find ./ -type f -exec du -h {} \;
4 ./01/aaa.txt
4 ./01/bbb.txt
12 ./01/ccc.jpg
160 ./02/ddd.png
156 ./02/eee.zip

-execに続いて実行したいコマンドを入力します。
最後は\;と入力してください。

{}は検索したファイル名に置き換えて実行されますので、実際には

du -h ./01/aaa.txt
du -h ./01/bbb.txt

のようなコマンドが実行されていることになります。

duはファイルサイズを調べるコマンドです。

-execでパイプ|を使いたい場合

シェル(shell)の基本的な機能としてパイプ(pipe)というものがあります。
これを使ってコマンドの実行結果を次のコマンドに渡すことができます。

$ du -h ./01/aaa.txt | cut -c -1
4

こんな感じで使って、1つ目のコマンド「du -h ./01/aaa.txt」の実行結果「4 ./01/aaa.txt」を2つ目のコマンド「cut -c -1」に渡し、最終的に4という結果を得るという風に使います。

cut -c -1は入力内容の最初の1文字を出力するコマンドです。

パイプはシェルを使う時に便利な機能なのですが、残念ながらfindコマンドでは使うことができません。ですが、少し工夫することで使えるようになります。

$ find ./ -type f -exec sh -c "du {} | cut -c -1" \;
4
4
1
1
1

-execに直接実行したいコマンドを指定する代わりにsh -cを使うという方法です。

-cは指定された文字列をコマンドとして実行するシェル(sh)のオプションですが、これを使ってパイプが使えないという制限を回避できます。

bashとかzshなどでも-cオプションがあるので同じ方法が使えます。

-execでバッククォート`を使いたい場合

これもシェルの基本的な機能なのですが、バッククォートというものがあります。

$ a=`dirname ./01/aaa.txt`
$ b=`basename ./01/aaa.txt`

こんな感じで使うとコマンドの実行結果を変数に保存することができます。

dirnameはディレクトリ部分、basenameはファイル名部分の文字列を表示するコマンドです。

$ echo $a - $b
./01 - aaa.txt

残念ながらこれもfindでは使えません。しかも、バッククォート内で{}が使えないのでsh -cでコマンドを実行するという方法も使えません。

ですが、こちらもちょっとした工夫で目的のコマンドを実行することができます。

$ find ./ -type f | while read line; do
>   a=`dirname $line` && b=`basename $line` && echo $a - $b
> done
./01 - aaa.txt
./01 - bbb.txt
./01 - ccc.jpg
./02 - ddd.png
./02 - eee.zip

注意点ですが、パイプ以降の部分はfindコマンドではないので{}は使えません。$lineで1行ごとの出力結果を得られるので、それを使う形になります。

※パイプを使わずfindの実行結果をテキストファイルに保存しても同じことができます。