PPAPを拒否するMilterを作ってみました
はじめに
PPAPなメール、つまり、暗号化されたパスワード付きzipが添付ファイルに含まれているメールを拒否するMilterを作ってみました。
今回は、使い方を簡単に説明します。
環境は、手元にあったCentOS7ですが、どの環境でも大して変わらないと思います。
事前準備
使用しているライブラリpymilter
がCのmilterとリンクしますので、gccとpython, sendmailそれぞれの開発用ライブラリが必要です。
yum install -y python3-devel gcc sendmail-devel
Ubuntuの場合は、
apt-get install -y gcc python3-dev python3-pip libmilter-dev
です。
No-PPAP-Milterのインストール
pip3 install no-ppap-milter
no-ppap-milter
というコマンドがインストールされます。
Postfixの設定
main.cfに以下のように追加します。
main.cf
milter_protocol=6
milter_default_action=accept
smtpd_milters=inet:localhost:9201
unix domain socketを使う場合は、smtpd_miltersのところを
main.cf
smtpd_milters=unix:/var/run/milter.sock
のようにします。
No-PPAP-Milterの起動
no-ppap-milter
コマンドを実行します。
no-ppap-milter
unix domain socketを使う場合は、--socket-name
オプションで指定できます。
postfixユーザーが読み込めるようにpostfixユーザーで実行するのがいいでしょう。
sudo -u postfix /usr/local/bin/no-ppap-milter --socket-name unix:/tmp/milter.sock
確認
普通の添付ファイルのあるメールの場合
# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix
HELO localhost
250 example.com
MAIL FROM: hirano@example.com
250 2.1.0 Ok
RCPT TO: hirano@example.com
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
MIME-Version: 1.0
... 省略 ...
--00000000000075672405db1ef6ff--
.
250 2.0.0 Ok: queued as 321E421CBB
ちゃんと届いたようです。
では、PPAPなパスワード付きZIPファイルの添付されたメールではどうでしょうか。
パスワード付きZIPな添付ファイルのあるメールの場合
... 省略 ...
DATA
354 End data with <CR><LF>.<CR><LF>
... 省略 ...
.
550 5.7.1 We do not accpet encrypted zip.
いい感じですね。拒否されました。