pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

Pythonのセット操作

要素の追加削除

discardは該当要素がなくても例外発生しない

>>> a = {1,2,3,4,5}
>>> a.add(6)
>>> a
{1, 2, 3, 4, 5, 6}
>>> a.remove(3)
>>> a
{1, 2, 4, 5, 6}
>>> a.remove(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 7
>>> a
{1, 2, 4, 5, 6}
>>> a.discard(7)
>>> a
{1, 2, 4, 5, 6}
>>> a.discard(1)
>>> a
{2, 4, 5, 6}
>>> 

合併

>>> a = {1,2}
>>> b = {1,3}
>>> c = {1,4}
>>> a | b | c
{1, 2, 3, 4}
>>> 

共通要素の抽出

>>> a
{1, 2}
>>> b
{1, 3}
>>> c
{1, 4}
>>> a & b & c
{1}
>>> 

差の抽出

>>> a
{1, 2}
>>> b
{1, 3}
>>> c
{1, 4}
>>> a - b - c
{2}
>>>

独自要素の抽出

>>> a
{1, 2}
>>> b
{1, 3}
>>> c
{1, 4}
>>> a ^ b
{2, 3}
>>> a ^ b ^ c
{1, 2, 3, 4}
>>> a ^ (b | c)
{2, 3, 4}
>>> 

要素の全てを含んでいるか確認

>>> a
{1, 2}
>>> b
{1, 2, 3}
>>> c
{2, 4}
>>> a <= b
True
>>> a <= c
False
>>> b >= a
True
>>> b >= c
False
>>> 

Pythonのリスト操作

s[i:j:k]

i番目からj番目までの要素をk個毎に取り出す

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a[0:9:2]
[0, 2, 4, 6, 8]
>>> a[0::2]
[0, 2, 4, 6, 8]
>>>

s.index(i)

sの要素の中にiと同じものがあった場合に、その最初のインデックスを返す。

>>> a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
>>> a.index(3)
6
>>> a[6]
3
>>> 

s.count(i)

sの要素の中にiと同じものが何個あるか返す

>>> a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
>>> a.count(2)
3
>>>

enumerate関数

リストのインデックスと要素の両方を取り出す

>>> a = ['a','b']
>>> for i,v in enumerate(a):
...   print(i,v)
... 
0 a
1 b
>>>

MailmanとDMARC

MailmanにDMARC機能が追加されたのでメモ
デフォルト設定なら、前バージョンまでの動きと変わらない。


DMARCとは

SPF/DKIMによる送信者認証を利用した認証の仕組み
SPF/DKIMの以下問題を改善する仕組みを持っている。

SPF/DKIMは認証失敗した時の扱いが明確に定義されていいない。
DNSのDMARCレコードで定義

・送信者が認証結果を知ることができない
→レポートを送信する仕組みを実装

https://www.cuenote.jp/library/marketing/dmarc.html
http://ml.cc.tsukuba.ac.jp/pdf/dmarc-with-mlservice-from.pdf
https://sendgrid.kke.co.jp/blog/?p=3137
https://www.iajapan.org/anti_spam/event/2014/conf0214/pdf/sess1/sakuraba.pdf


MailmanがDMARCを問題にする背景

メンバーが投稿(From: member@example.com)
Mailmanがメンバー展開しリレー(Fromヘッダはそのまま)
リレー先でSPF/DKIM認証を実施→Fromが変わっていないため、SPF認証はエラー。DKIMは認証通りそう?

Mailmanは中継するため、送信者認証失敗の原因になってしまう

DMARC情報よりメンバーへの配信時にRejetc/隔離になることがわかれば、配信時にFromヘッダをMLに変更する機能

元メールを添付
Fromを書き換え
の対策があり。


関連パラメタ

関連パラメタ 意味
DEFAULT_DMARC_QUARANTINE_MODERATION_ACTION DMARCポリシーが隔離の場合、Rejectと同じように扱うかYes/No
DEFAULT_DMARC_MODERATION_ACTION 送信元ドメインのDMARCポリシーが、Rejct or 隔離であった場合の動作を定義
0 = Accept
1 = Munge From
2 = Wrap Message
3= Reject
4 = Discard
DEFAULT_DMARC_WRAPPED_MESSAGE_TEXT 添付ファイル送信を選択した場合の、マルチパート区切り文字列に含む文字の指定
DEFAULT_FROM_IS_LIST DMARC_MODERATION_ACTIONがAcceptではないMLへの投稿に対するデフォルトのアクションを設定する。
0: 何もしない
1: FromヘッダをMLアドレスと置き換え
2: FromをMLにしたメールに元メールを添付して送付
REMOVE_DKIM_HEADERS FROM_IS_LISTが1,2の場合にDKIMヘッダを削除する。理由は、Fromヘッダや添付ファイル化した時に、シグニチャが壊れてしまう可能性があるため
Yes/No

FMLの会員管理ファイルの動作確認

activesファイルの動作

f:id:pikesaku:20170122013125p:plain

シングルクオーテーションは評価されない。ダブルクオーテーションは閉じていれば評価される。
投稿しても有効なメンバーない場合は、以下ログが出る。
SmtpIO: no recipients but O.K.? (test1@example.com)


membersファイルの動作

f:id:pikesaku:20170122013529p:plain

members_onlyの設定でtest1@example.comからメール送信し、メンバーとして認識されるか確認
シングルクオーテーション、ダブルクオーテーション共に閉じていても評価されない。
行頭のコメント1個は無視される!
全角スペースはmembersではアドレスを構成する文字として認識される(?もしくは不正文字のため、判定されてない?)、activesでは不正文字としてエラーになる。
全角スペースは前後のスペース以外の文字と組み合わせた文字として判定される。

FMLのReply-Toヘッダ付与動作

fmlはデフォルト設定。

投稿メールReply-To HOOK設定Reply-To 配信メールに付与されたReply-To
有※ HOOK設定Reply-To
投稿メールReply-To
有※ HOOK設定Reply-To
MLアドレス

※HOOK設定は以下の場合

$START_HOOK = q#
&DEFINE_FIELD_FORCED("reply-to", "$From_address);
#;

FMLの配送制限(PERMIT_POST_FROM)とMailman設定対応表

fml/mailman設定 動作が定義されていない非会員からの投稿に対する動作
(generic_nonmember_action)
承認/保留/拒否/破棄
新しく登録する会員のデフォルトを制限付き会員にしますか?
(default_member_moderation)
いいえ/はい
制限付き会員から投稿があったときの動作
(member_moderation_action)
保留/拒否/破棄
anyone 承認 いいえ 保留
members_only 保留 いいえ 保留
moderator 保留 はい 保留

FMLとMailmanの送信元ヘッダ比較

FMLはデフォルト設定、Mailmanの関連設定は以下の通り

項目
anonymous_list No
include_sender_header Yes
reply_goes_to_list 投稿者
first_strip_reply_to No



メンバー配信メール

  種別    Return-Path    From     Reply-To     Sender  
fml ML名-admin 投稿者 ML名 -
mailman ML名-bounces 投稿者 - ML名-bounces



ML管理者宛通知メール

  種別    Return-Path    From     Reply-To     Sender  
fml ML名-admin ML名-admin - -
mailman ML名-bounces
(投稿者)
(-)
ML名-owner
(投稿者)
(ML名-request)
- ML名-bounces
(-)
(ML名-request)

members_onlyのMLにメンバー外のアドレスから投稿し管理者宛ての通知メールで確認
()内の値はマルチパート部分。
マルチパート構成は以下の通り。
mailman: 通知メール(承認URL記載)、保留されたメール、通知メール(承認返信メール記載)


メンバー宛通知メール

  種別    Return-Path    From     Reply-To     Sender  
fml ML名-admin ML名-admin - -
mailman ML名-bounces ML名-owner - ML名-bounces

members_onlyのMLにメンバーではないアドレスから投稿し該当アドレス宛ての通知メールで確認


モデレータ宛通知メール

  種別    Return-Path    From     Reply-To     Sender  
fml ML名-admin
(owner-ML名)
ML名-admin
(投稿者)
ML名-ctl -
mailman ML名-bounces
(投稿者)
(-)
ML名-owner
(投稿者)
(ML名-request)
- ML名-bounces
(-)
(ML名-request)

モデレータへの通知メールで確認
()内の値はマルチパート部分。
マルチパート構成は以下の通り。
fml: 通知メール、保留されたメール
mailman: 通知メール(承認URL記載)、保留されたメール、通知メール(承認返信メール記載)