[Google Apps]Gmailにおけるなりすましメール対策の設定方法

Gmailにおけるなりすましメール対策 - DKIMを設定する


みなさんは迷惑メールについてどのような対策をしていますか?
どのような知識をお持ちでしょうか?
自分が保有しているドメインのなりすましメール対策は万全でしょうか?





企業のドメインをなりすまし、メールを送信されることでその企業の信用が落ちてしまうことやサポートセンター等に問い合わせが多数きてしまい業務に影響を与える可能性があります
Google Appsにおいてはそのなりすましメールの対策としてDKIMを利用することができます


GoogleAppsのGmailにおけるDKIMの設定方法


かならずIT技術者に実施して良いかどうか確認後実施してください
所有のサーバからGoogleAppsを経由しないで送信されるメールがあるのであれば、GoogleAppsを経由するように設定する必要があります
※設定を行わないとそのサーバからのメールが正常に届かなくなる可能性があります


  • GoogleAppsの管理画面にログインし、上部メニューの[高度なツール]を選択します
    GoogleApps_Dashboard

  • 画面の下部にある[メール認証(DKIM)を設定]を選択します
    105_02.png

  • 以下のような画面になりますので、[新しいレコードを追加]を選択します
    105_03.png

  • ポップアップが開きますので、任意のプレフィックスを入力し、[生成]を選択します
    ※既存のドメインキーと重複しないようにしてください
    105_04.png

  • 以下のように指定したプレフィックス._domainkeyというレコードの値が指定されます
    この画面を開いたままにし、DNSサーバの設定をしていきます
    105_09.png

  • 今回はお名前.comのDNSサーバを利用していますので、ドメインNaviよりログインし、[レンタルDNSレコード設定]へ移動します

  • 入力の欄の[ホスト名]にはGoogleAppsの先程の画面の[DNS ホストの名前(TXT レコード名):]の箇所の値を入力します
    [Type]はTXTを選択します
    [Value]にはGoogleAppsの先程の画面の[TXT レコード値:]のv=DKIM1;の箇所から記号の終りの部分までコピーして貼り付けます
    ドメインNaviでのDKIMの設定例

  • 入力が完了したら、[確認画面へ進む]を選択し、[設定する]を選択し反映させます
    ※余計な情報が入っていないことを確認して下さい
    ドメインNaviでのDKIMの設定の確認画面例

  • しばらくして、ドメインの反映が確認できた場合はGoogleApps上で[認証を開始]を選択します
    以下のようになれば正常に設定が完了したことになります
    GoogleAppsのDKIM設定の正常完了

なお、正常に設定ができていない・またはDNSの反映が取得できない場合はGoogleApps上で以下のように表示されます
DKIMレコードの設定が正しくない場合
この状態になった場合は、DNSの反映を待つ(24時間-48時間)か既に48時間以上待っていてもこのままの場合であれば以下の方法でDKIMレコードを確認し、設定が正しいか確認して下さい


DKIMレコードの確認方法


Windowsであれば以下のコマンドを実行することでDKIMレコードを確認できます


  • Windowsキー(キーボードの左下の旗のようなマーク) + Rキーを入力
  • [ファイル名を指定して実行]のダイアログが表示されるので[名前]欄に[cmd]と入力してEnterを押下
  • 黒い画面(コマンドプロンプト)が表示されるので以下のコマンドを実行する
    nslookup -type=txt namakesugi._domainkey.namakesugi.net
  • 実行結果として以下のように自分が設定した内容が返ってくればOK
    namakesugi._domainkey.namakesugi.net    text =

    "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA...略

なりすましメール防止技術について


送信ドメインのSPFレコードの追加


以前ご紹介しましたが、送信ドメイン(@namakesugi.netの@以前のことでこの場合はnamakesugi.net)のTXTレコード中にSPFレコードを追加することで受信側が正しいメールサーバからメールを送信していることを確認する方法です
最も手軽ななりすましメール防止技術です
設定されていなければ設定しましょう
取引先から設定してないメールが来るようならばその会社はIT担当者のレベルが低いと判断して良いです
(※もろもろの事業で設定できない場合もありますが)


SPFレコードが設定されているかの確認


どのOSでも標準の状態で確認ができます
今回はWindowsでの確認方法です
自社のドメインが設定されているか確認してみてください


  • コマンドプロンプトを開きます
    開きかたはここを参照
  • 以下のコマンドを実行します
    ※[domain]部分は調べたい@以降を入力します
    nslookup -type=txt [domain]

    調べるのがnamakesugi.netであればnslookup -type=txt namakesugi.netとします

SPF認証の例


例えばnamakesugi.netのTXTレコードには以下のレコードが設定されています


"v=spf1 +ip4:210.172.137.135 include:_spf.google.com ~all"

これは簡単にいってしまえば、「@namakesugi.netのメールは210.172.137.135のIPをもつサーバまたは_spf.google.comで定義されているメールサーバから送信されます」と受信側に伝えている設定になっています


これにより受信側が送られてきたメールの送信元を判断し、正しい送信元から送信されていない場合は迷惑メールマークを付与したり、メール自体の受け取りを拒否するようになります


その他にもドメインの所有者側におけるメリットもありますが、そこは割愛します


DKIMの設定


今回の本題であるDKIMの設定についてです
DKIM(DomainKeys Identified Mail)はメール中に正しい送信元から送信されたことを示す認証情報を埋め込む技術です


SPF認証より高度な認証が可能です
メール受信者・メール送信者共にメリットがある内容としては
メール本文の改ざんが検知できることです


メールの認証情報を見たい場合はWindowsでthunderbirdを利用している場合は受け取ったメールを[名前を付けて保存] => xxx.emlというファイルで保存されるのでそれをメモ帳等で開くと確認できます


参考リンク


DKIMについてはatmarkitの下記を参考すると詳しく紹介されていますので、興味が有る方は参照するとよいでしょう


スポンサーサイト

[Rails]Forgeryで遊んでみる

RailsのプラグインForgeryとは


テスト用のダミーデータを作成するプラグインです
GitHub ... https://github.com/sevenwire/forgery


Forgeryの日本語ダミーデータ作成部分をGem化しました


Githubはこちら => https://github.com/namakesugi/forgery_ja


https://github.com/namakesugi/forgery-ja は一応とっておきます。。。
アンダースコアにし忘れた。。。。


使い方


ダミーデータを作成するだけの機能ですので非常に簡単です


以下をGemfileに追加し、bundle installを実行します


gem 'forgery'

test上や、Fabirication,fixtureなどの好きなところで以下のように呼び出します


Forgery(:basic).password

上記の場合は6桁から12桁の半角大小英数字の文字列が作成されます
上記は一例ですので、他にも住所を出したり、emailアドレスを作ったりと必要なものはほとんど揃っています


Forgeryを拡張する方法


Forgeryはなんといっても容易に拡張できることでしょう
同様なプラグインにFackerもあります(こちらはI18n対応らしい)


rails generate forgery

上記の用にするとlib以下にforgeryというフォルダができ、その中に自分の拡張データを追加することができるようになります


Forgeryの拡張を試す


こういうのは大抵日本語に対応していませんので対応させちゃいます


Forgery[:monetary].formatted_money # => "$3.25"

上記のformatted_moneyを実行すると$マーク付で小数点までついた金額が返ってきます
これを「3000円」という風に返すには以下のようにします


lib/forgery/extensions/以下にmonetaryというファイルを作成し、以下のように記述します



# encoding: utf-8
# Extensions Forgery::Monetary
class Forgery::Monetary
# @param Hash options
# @option options [Integer] :max (1000) 金額の最大値
# @option options [Integer] :min (0) 金額の最小値
# @return String :max - :minの間の数値に[円]を付与して返します
def self.ja_formatted_money(options={})
"%d円" % ja_money(options)
end

# @params Hash options
# @option options [Fixnum] :max (1000) 金額の最大値
# @option options [Fixnum] :min (0) 金額の最小値
# @return Fixnum
def self.ja_money(options={})
options = {:max => 1000,
:min => 0}.merge(options)

(options[:min]..options[:max]).random
end

# popularity in Japan
# @params Hash options
# @option options [Fixnum] :digit (4) 金額の桁
# @return Fixnum
def self.ja_popularity_money(options={})
# TODO Popularityではない。適当過ぎる
options = {:digit => 4}.merge(options)
base_money = (1..9).random * (10 ** (options[:digit] - 1) )
return base_money if options[:digit] < 3
base_money + 98 * (10 ** (options[:digit] - 3))
end
end

余計なメソッドもくっついていますが、ここでは「ja_formatted_money」というメソッドに着目してみてください
今回は既存のformatted_moneyを上書きせずに、ja_formatted_moneyというメソッドを追加しています
このメソッドは以下のように実行できます


Forgery[:monetary].ja_formatted_money

これで0円から1000円までのダミーデータが出力されるようになりました
このようにして既存のクラスに追加メソッドをいれることやメソッドの書き換えも容易に行えます


Forgeryのdictionariesとは


名前でわかりますが、辞書ファイル群です
ここに入れた辞書ファイルの中身は以下で簡単に取り出すことができます


Forgery.dictonaris[:(辞書ファイル名)].random

Forgeryのforgeriesとは


自分で好きなダミーを吐き出すクラスを作成する際に利用します
Forgeryクラスを継承して作成するとよいでしょう
既存のForgeryクラスを継承したDateなどをさらに継承して作成してもよいでしょう


日本語ダミーデータを吐き出すForgery


forgery-jaを作成しましたので、興味がありましたらGithubからダウンロードして上記フォルダに突っ込んでください
Githubはこちらから


現時点での対応内容


日付関連


  • Forgery(:date).ja_day_of_week ... 日本語の曜日を返す("日曜日"など)
  • Forgery(:date).ja_month ... 日本語の月の呼び名を返す("1月" , "睦月"など)

お金関連


  • Forgery[:monetary].ja_formatted_money ... XXXX円を返す
  • Forgery[:monetary].ja_popularity_money ... 1980などの馴染みのある数値を返す(ダミーデータでいるか?)

名前関連


引数関連
一部辞書が未対応な場合があります
氏名と企業名は大丈夫です
現時点では各50種類 x 5パターン(漢字・ひらがな・カタカナ・半角カタカナ・ローマ字に対応しています
全角ローマ字って必要なのかしら?
辞書はすごくだるかったです


  • Forgery::NameJa::HIRA ... ひらがなで返る
  • Forgery::NameJa::KANA ... カタカナで返る
  • Forgery::NameJa::H_KANA ... 半角カタカナで返る
  • Forgery::NameJa::ROMA ... ローマ字で返る

  • Forgery(:name_ja).last_name ... 日本語の名字を返す
  • Forgery(:name_ja).fast_name ... 日本語の名前を返す
  • Forgery(:name_ja).full_name ... 日本語の氏名(氏と名の間は半角スペース)を返す
  • Forgery(:name_ja).full_name ... 日本語の氏名(氏と名の間は半角スペース)を返す
  • Forgery(:name_ja).male_first_name ... 日本語の男性の名前を返す
  • Forgery(:name_ja).female_first_name ... 日本語の女性の名前を返す
  • Forgery(:name_ja).company_name ... 日本語の企業名を返す(上場企業から拝借してます。問題あったら教えてください)
  • Forgery(:name_ja).job_title ... 日本語の職業名を返す(辞書未整備)
  • Forgery(:name_ja).title ... 日本語の敬称(先生等)を返す(辞書未整備)

リポジトリ更新したら記事も更新しますー

続きを読む

[Rails]管理画面プラグイン ActiveAdmin その4(カスタムアクション編)

ActiveAdmin formのカスタマイズ


記事インデックス



はじめて知る方はインストールとindexアクションのカスタマイズ方法の記事をみるとよいかもしれません
今回はカスタムアクションの実装方法です


その前に...


formのカスタマイズ


READMEを見るとすぐわかると思いますので、省略します
formtasticを使用しているようですので、こちらも参照するとよいでしょう
formtasticイイヨネ


カスタムアクションの実装


こちらはREADMEに書いていなく、ソースコード内(https://github.com/gregbell/active_admin/blob/master/lib/active_admin/dsl.rb)に記述されています


memberアクションの実装


show系のアクション(id渡し)の実装方法です
実装するのはPreviewというアクションとします


app/admin/articles.rbに以下を追加します


member_action :preview do
@article = Article.find(params[:id])
end

app/views/admin/articles/以下にpreview.hamlというファイルを追加します
ここで中身についてはなんでもいいので適当に書きます


= simple_format @article.content
%p= I18n.t('admin.articles.preview.footerlabel')

member_actionを追加した段階でrake routesを実行すると以下のようにパスが追加されていることが確認できます


preview_admin_article GET    /admin/articles/:id/preview(.:format) {:action=>"preview", :controller=>"admin/articles"}

ActiveAdminで別アクションへの導線を追加する方法


このままですと、previewアクションへの導線がありませんので、追加します
showアクションをカスタマイズしておりますので、そこに追加してもよいのですが、今回は以下の箇所に追加してみます
ActiveAdmin別アクションへの導線の設定(前)


app/admin/articles.rbの任意の場所に以下を追加します


action_item :only => :show do
if controller.action_methods.include?("preview")
link_to("Preview", preview_admin_article_path(resource))
end
end

※I18nなどの細かいところは省略しています
※日本語を直接指定することもできます


この状態で再度画面を表示させてみると以下のようにPreviewへのリンクが追加されます
ActiveAdmin別アクションへの導線の設定(後)


応用


以下のようにするとshowアクションにもnewアクションへのリンクを追加することができます



action_item :only => :show do
if controller.action_methods.include?('new')
link_to("New #{active_admin_config.resource_name}", new_resource_path)
end
end

なお、action_item do ~ endで一つのアクションへのリンクを追加することができます
複数追加する場合でも分けて記述する必要があります

Collectionアクションの追加


ほぼ一緒です


collection_action :hoge, do
# todo something
end

なおdsl.rb上の定義は以下のようになっています


collection_action(name, options = {}, &block)

任意のアクションの追加方法


post等する場合はこちらを利用します


controller do
def [action_name]
end
end

上記のようにすることでdefで定義されたactionが使用可能となります
但し、こちらの場合はroutesをかかないといけないようです


調査中の内容


  • カスタムアクションでrender :layout => 'active_admin'としても正しく表示されずエラーになる
    ※デフォルトのapplication.html.erbなら問題ない
  • action_itemsのリセットの仕方
    ※showで表示されるedit, deleteリンクのラベルを変えたい
    ※元ソースいじればなんとかなるんだけど...

active_admin_config内のメソッドとControllerActionのoptionを調べればなんとかなる?


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。