AWS WAF 海外IPを拒否しGoogleのクローラ(bot)は許可する設定
Googleのクローラの条件
海外IPアクセスの条件
AWS WAFを設定
まず1つ目のCondition作成として「string and regex match」を選択します
「Googlebot」をuser-agentヘッダに含む場合の条件を作成します。
上記のように入力しAdd filterボタンを押します。
Filterに追加されたらCreateボタンを押します。
条件作成2個目
2つ目の条件は国別の制限をします。Geo matchを選択します。
日本を登録します
ルール作成
上記で作成した条件を元にルールを作成します
上記で作成した条件を設定します。
この時、WAFのデフォルトルールを
Allowにしたかったので下記のようにルールを設定しています。
条件の整理
B=「日本からのアクセス」
=「User-agentにGooglebotを含まない」かつ「海外アクセスである」
- 「User-agentにGooglebotを含まない」かつ「海外アクセスである」場合ブロック
- それ以外はAllow(許可)
ド・モルガン風に考える
検証してみる
注意点
- WAFログを定期的に解析しアクセス元IPをDNSリバースルックアップ[※1]を実施
- なりすましのアクセス元IPを判定する
- 2のIPをWAFのIP拒否リストに設定する
AWS KMS の概要とエンベロープ暗号化について説明してみる
最近AWS KMSについて聞かれることがあったので
ブログにまとめてみようと思います。
KMSってなに?をざっくり
- 対象鍵を安全に保管してくれるサービス
- 各AWSサービスのデータ暗号化・複合化する機能として連携(S3、EBS等)
- うるさいセキュリティのポイントをある程度抑えてくれる(キーローテーション、暗号化鍵の方式を決定)
前提知識:対称鍵とは
キーの種類
下記に簡単な説明を書きます。
・AWS所有
見ることすらできない鍵です。AWSが利用します。
基本的に触れないので理解すべきこともないです。
・AWS管理
もっともよく使う鍵です。
おおよそのケースで単純に暗号化したいだけならこの鍵を利用します。
デフォルトの鍵です。aws/service-nameの形式で存在します
ある程度AWSが用意した枠組みでしか管理ができないため
細かい制御が必要な場合は後述のカスタマー管理のキーを利用します。
例えば、クロスアカウントで共有が不可のため、
複数アカウントが関連するときは利用できないケースが多いです
・カスタマー管理
・データキー
上記のように運用することで下記を実現できます
・容量大データも一律して同じ大きさのDatakeyを利用し暗号/複合管理
・外部に漏れるとマズイ情報(Plaintext data key)は必要な時のみ取出し利用
https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/concepts.html#enveloping
エンベロープ暗号化をCLIで一通りこなしてみる
AWS S3のオブジェクトを時間指定でパブリック公開する
検証内容
AWS:VPCピアリングでうまく接続できない時に確認したいこと
VPCピアリングでうまく接続できない時に確認したいことを、自分でもたまに忘れそうなのでメモがてら書きます。
セキュリティグループ、ルートテーブル、NACL
この辺りは当然ですね。丁寧に確認しましょう。
名前解決ができるかどうか
RDS等の接続ができない場合は、こちらが怪しいです。
https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/modify-peering-connections.html#vpc-peering-dns
GCP:限定公開アクセスとは何なのか試してみる
AWS SESとSPFの話(その2)
では、前回の続きです。
AWS SESでメールを送った時はどうなるのか?
まず、特に何も特別な設定はしないで、SESでメールを送ってみます。
受信者でgmailで受信した場合、
メッセージのソースを表示すると、詳細の情報が確認できます
上記からSPFの認証を合格(PASS)したことが確認できます。
ソースを確認
メールのソース部分を見ていきます。
SPFで検証するレコードは、下記になります
Return-Path: xxxxx-xxxxxx-xxxxxxx-xxxxxxx@amazonses.com
ここで、「あれ?amazonses.comからなんてメール送信していないのに?」と思うかもしれません。
実はAWS SESで送信するメールは、特別な設定をしない限りは「amazonses.com」から送信されます。
メール送信元の情報
ここが紛らわしいところです。
実はメールには、送信元の情報が2つ存在します。
1つはメールヘッダで、もう1つはエンベロープfromです。
呼び方は、いろんな呼ばれ方がありますが、要は2つあります。
代表的な用途としては、
メールヘッダの方は、メールアプリとかで送信元を表示するために、
エンベロープfromの方は、実際にメールが送信されるサーバを示すために利用されます。
なんでそもそも2個あるのかという説明は下記が分かりやすいかと思います。
https://business.biglobe.ne.jp/mail/semi/semi_002.html
SPFの確認をしてみる
SPFは実際にメールを送るサーバを検証したいので、エンベロープfromを検証します。
エンベロープfromはメールソースの「Return-Path:」を確認すれば分かります。
AWS SES でデフォルト設定で送信した場合、
SPFで検証するレコードは下記のようになっているはずです。
Return-Path: xxxxx-xxxxxx-xxxxxxx-xxxxxxx@amazonses.com
では「amazonses.com」のSPF設定(TXTレコード)を確認しましょう。
digします。
dig email.amazonses.com txt amazonses.com. 117 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 -all"
SPFでは上記送信元IP(54.240.8.42)が送信元のIPと記載されています。
送信元のIP(54.240.8.42)が上記TXTレコードの
「ip4:54.240.0.0/18」部分に該当するしたため、SPF認証をパスしていることが分かります。
よってAWS SESでは、特に何も初期設定をしなくてもSPFの認証を通ってしまいます。
AWSのドキュメントにもそのことが記載されていますね。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/spf.html
国内ケータイキャリアに送る時は対策が必要
ただ、これにプラスして、SESでは国内キャリアに送る場合、
特別な設定を追加しておいたほうが良いです。
au,docomoにおいて、迷惑メール設定次第では
senderID(上記で言うメールヘッダ)でのSPFレコード検査も実施される仕様のようです。
SPFレコードを設定することでメール到着率が上がることが報告されています。
下記が各会社のアナウンスです。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/spf.html
https://www.au.com/mobile/service/attention/spf-record/
https://www.nttdocomo.co.jp/service/imode_mail/notice/sender_id/
具体的にはTXTレコードに「v=spf1 include:amazonses.com」を追加する形となります。
digコマンドで引いた時に下記のように出てくるイメージです。
your_domainの部分は対象のドメインに置き換えてください。
your_domain TXT "v=spf1 include:amazonses.com ~all"
すでにTXTレコードが存在している場合はケースバイケースです。
SPFの書き方として下記が参考になると思います。
間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会
AWS SESとSPFの話(その1)
会社の人から「SPF認証ってなに?」とか
「AWS SESはSPFに対応していますか?」といったことをよく聞かれます。
そこで今回はSPFについて書きたいと思います。
SPFとは
そもそもSPFとは何か?ということですが、
送信元認証(=メール送信者が想定と正しいと確認すること)の
技術の1つだと思ってもらえればと思います。
例えば、私がメールを送るとします。
私のメールアドレスは「xxx@hatena.com」とします。
しかし悪い奴が、私の名前を語り、悪いメールを出すとします。
fromのメールアドレスを「xxx@hatena.com」に偽ったとしましょう。こんなことをされたら、私は迷惑です。
悪い奴が、私を装って悪意あるメールを送れてしまうからです。
上記のような悪意ある行為に対し「hatena.com」ドメインからの
メールはちゃんとした人からだけ送れるようにしたい!と思ったとします。
そこで、SPFの登場です。
設定により上記のような一部の悪意ある行動を防ぐことができます。
実際の設定例
SPFの設定例として、せっかくなので実物設定を見て見ましょう。
IT企業の富士通さんのSPF設定です。
例として使いやすいのでピックアップさせて頂きました。
SPFの設定は公開されています。
txtレコードをdigすると見ることができます。(執筆時点の情報です)
Macやlinuxをお使いの方は、下記コマンドを実施して見てください。
dig fujitsu.com txt fujitsu.com. 4502 IN TXT "v=spf1 ip4:211.128.242.0/26 ip4:202.219.69.128/26 include:spf.protection.outlook.com include:mktomail.com mx:fujitsu.com?all"
例えば、上記例の最初の部分「v=spf1 ip4:211.128.242.0/26」では、
IPが「211.128.242.0/26」のメールサーバから送られて来たら「fujitsu.com」からの本物のメールだとみなして良いよ
ということを表わしています。
※その他「ip4:202.219.69.128/26〜」以降の情報も同じように
spfのルールに従い処理されますが説明を分かりやすくするため割愛しています。
このように「fujitsu.com」のドメイン管理者が、
「fujitsu.com」のメールとして正しい条件を予め設定しておくことにより、
悪い奴がメールのfrom部分を「fujitsu.com」に偽造しようが、
受信者側で、本物か偽物かを見抜くことが可能になります。
このことを応用して、よくあるパターンとしては、
社内からのメールなのに、社外メールサーバからメールが来ていることを検知できます。
送信元メールアドレスを不正に社内用に書き換えることで社内の人間を装っても、社外から悪いメールを出しているためです。
(送信元メールアドレスを社内に書き換えても社外メールサーバのIPから送られてくるためSPFにより嘘がバレる)
流行りのなりすましメールの検出等もできますね。
では、AWS SESからの送信メールのSPFはどう処理されるのでしょうか?
続きは次回で見て見たいと思います。