PPAPでのファイル暗号化や添付ファイルの削除などメールの添付ファイルの制御が出来るSaMMA。
デージーネットさん作成だけに、日本での需要があるメールの添付ファイル取扱いをOSSで提供してくれます。
本環境は、Postfix環境に、SaMMAを導入し、NextCloudによる連係で、ファイルURLを相手に送る方式を実現します。
SaMMAについてはこちらを参照ください
1.導入準備
Postfixが稼動する環境を用意します。
今回は、PostfixAdminを利用した環境を使います。
導入方法は、「」をご覧下さい。
なお、SaMMAは、SendMialに依存しているため、本環境にもPostfixと同時にSendmailを導入します。
(SMTPとしての機能はPostfixを利用しますので、一部のツールのみをSendmail付属機能を利用します)
2.必用なライブラリの導入
以下のライブラリをインストールする
dnf install sendmail
dnf install libdb-devel
dnf install glib2-devel
dnf install openldap-devel
libgpg-error
cd /usr/local/src
wget https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.46.tar.bz2
tar xvjf libgpg-error-1.46.tar.bz2
cd libgpg-error-1.46
./configure
make -j 8
make install
gmime
gmimeは、Ver2系のみの対応。Ver2.99は動作しない
cd /usr/local/src
wget https://download.gnome.org/sources/gmime/2.6/gmime-2.6.23.tar.xz
tar xvJf gmime-2.6.23.tar.xz
cd gmime-2.6.23
./configure
make
make install
libmilter
cd /usr/local/src
wget https://ftp.sendmail.org/sendmail.8.17.1.tar.gz
tar xvzf sendmail.8.17.1.tar.gz
cd sendmail-8.17.1
cd libmilter/
make
make install
libspf
#epleを有効化する
dnf install epel-release
dnf install libspf2-devel
3. SaMMAをインストールする
cd /usr/local/src
wget https://ja.osdn.net/frs/redir.php?m=gigenet&f=samma%2F74992%2FSaMMA-5.0.3.tar.gz
tar xvzf SaMMA-5.0.3.tar.gz
cd SaMMA-5.0.3
autoreconf --install
autoheader
libtoolize
aclocal
automake --add-missing --copy
autoconf
./configure \
--with-gmime=/usr/local/ \
--enable-subjectsw
make
make install
4.設定ファイルを作成する
errmsg.tmpl
cat > /usr/local/etc/samma/errmsg.tmpl << EOF
To: <@@TOADDR@@>
Subject: =?UTF-8?B?44OR44K544Ov44O844OJ6YCa55+l44Oh44O844Or?=
以下のメールに添付されたファイルの解凍パスワードをお知らせします。
件名: <@@SUBJECT@@>
日付: <@@DATE@@>
パスワード: <@@PASSWORD@@>
受信者:
<@@RCPTLIST@@>
添付ファイル名:
<@@FILENAME@@>
/****************************************************************
扱えない文字が入っており、文字化けを起こしている可能性があります。
There is a possibility that garbled characters are occurring.
****************************************************************/
EOF
samma.tmpl
cat > /usr/local/etc/samma/samma.tmpl << EOF
To: <@@RCPTLIST@@>
Subject: 展開パスワードのご連絡
Content-Type: text/plain; charset=ISO-2022-jp
Content-Transfer-Encoding: 7bit
先ほどお送りしたファイルの展開パスワードを送付致します。
メール件名: <@@SUBJECT@@>
送信日時 : <@@DATE@@>
パスワード: <@@PASSWORD@@>
送信者 : <@@TOADDR@@>
受信者 : <@@RCPTLIST@@>
ファイル名:
<@@FILENAME@@>
EOF
os_uploader.tmpl
cat > /usr/local/etc/samma/os_uploader.tmpl << EOF
Download URL:
<@@URL@@>
Attachment files:
<@@FILENAME@@>
Password:
<@@PASSWORD@@>
EOF
sender
安全化非対象ドメイン
ただし、自ドメインを入れないと暗号化されない
つまり、このドメインから、rcptの該当ドメインに入る場合、暗号化される模様
cat > /usr/local/etc/samma/sender << EOF
internal.exmaple.com
EOF
rcpt
暗号化する宛先のドメイン。ここでは、自ドメイン以外は全てランダムパスワードで送る
cat > /usr/local/etc/samma/rcpt<< EOF
jp
com
net
EOF
os_uploader.conf
cat > /usr/local/etc/samma/os_uploader.conf << EOF
NC_URL=https://nextcloudのfqdn (最後のスラッシュは除くこと)
NC_ADMIN=admin
NC_ADMINPW=adminのパスワード
HTTPS_CERT=False
TEMPLATE_FILE=/usr/local/etc/samma/os_uploader.tmpl
EOF
whitelist
touch /usr/local/etc/samma/whitelist
samma.conf
今回LDAPは利用しませんが、パラメーターがないと正常起動しないので何か値を入れておく
cat > /usr/local/etc/samma/samma.conf << EOF
commandPort=17777
CommandPass=secret
SyslogFacility=local1
ListenIP=0.0.0.0
ListenPort=20026
EncryptionTmpDir=/tmp
ZipCommand=/usr/local/bin/os_uploader
SenderDB=btree:/usr/local/etc/samma/sender.db
RcptDB=btree:/usr/local/etc/samma/rcpt.db
#ExtensionDB=btree:/usr/local/etc/samma/extension.db
TemplatePath=/usr/local/etc/samma/samma.tmpl
ErrorMessageTemplatePath=/usr/local/etc/samma/errmsg.tmpl
SendmailCommand=/usr/sbin/sendmail -i
ZipfileName=AttachFile.%Y%m%d.txt
ZipAttachmentContentType=text/plain
MailsaveTmpDir=/tmp
PasswordLength=8
StrCode=SJIS
DefaultEncryption=no
UserPolicy=no
LdapUri=ldap://192.168.1.1:389/
LdapBaseDn=ou=User,dc=internal,dc=example,dc=com
LdapBindDn=cn=admin,dc=internal,dc=example,dc=com
LdapBindPassword=password
LdapFilter=mail=%s
WhitelistPath=/usr/local/etc/samma/whitelist
AttachmentFileAlias=UnknownFileName
LoopCheck=no
AllowCharEnvelopeFrom=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\`~!@#$%^&*()_+-={}|[]:\";\'<>?,./
EOF
5.起動ファイルを作成
起動ユーザーにdaemonを指定しています。
パスワードメールは、/sbin/sendmail経由で送られるようで、SaMMAを起動したプロセスユーザー名がFromのアドレスとなって送ってくる。
権限を設定しておく
chmod -R 755 /usr/local/etc/samma
cat > /usr/lib/systemd/system/samma.service << EOF
[Unit]
Description=SaMMA (SAfety Mail gateway with Milter Api)
[Service]
ExecStart=/usr/local/bin/samma
Restart=always
User=daemon
Group=daemon
[Install]
WantedBy=multi-user.target
EOF
起動できるようにする
systemctl enable samma
systemctl start samma
6.Postfixの設定を変更
main.cfに追記する
#
# SaMMA
#
#milter_default_action = accept
#milter_protocol = 6
smtpd_milters = inet:127.0.0.1:20026
#milter_default_action = tempfail
milter_default_action = reject
milter_connect_timeout = 30s
milter_content_timeout = 300s
7.spf-engineを入れる
cd /usr/local/src/SaMMA-5.0.3/contrib/spf-engine/
pip3 install spf-engine
pip3 install dnspython
設定ファイルを作成する
#ディレクトリを作成する
mkdir -p /etc/python-policyd-spf
#設定ファイルを配置する
cat > /etc/python-policyd-spf/policyd-spf.conf << EOF
debugLevel = 1
TestOnly = 1
Reason_Message = Access denied
HELO_reject = No_Check
#HELO_pass_restriction
Mail_From_reject = Fail
#Mail_From_pass_restriction
PermError_reject = True
TempError_Defer = True
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1
Header_Type = None
#Hide_Receiver = No
Hide_Receiver = Yes
Authserv_Id = HEADER
fakeSender = dummy@spf.local
EOF
DNSに「spf.local」のゾーンファイルを作成し以下のTXTレコードを作成する
spf.local. TXT "v=spf1 include:spf.protection.outlook.com -all"
/etc/postfix/master.conf に以下を追加する
policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/local/bin/policyd-spf
/etc/postfix/mar.conf に以下を追加するin
smtpd_client_restrictions = check_policy_service unix:private/policyd-spf, permit
あとは、postfixとsammaを起動して、テストを行う。
注意事項
NextCloudアカウントの事前作成
NextCloudに、管理者のファイル送付用のアカウント以外に、メール送信者のFromアドレスを持ったアカウントが作成されていないといけない。
作成されていないと、送信中にエラーになる
パスワードポリシーに注意
添付ファイル送信中にエラーが発生する場合、NetxCloud側のWebサーバーのログを確認する。
「/ocs/v2.php/apps/files_sharing/api/v1/shares?path=」で、403エラーが出るケースがある。
API的には、パブリックに共有することが許可されていないと記載があるが、それ以外に、パスワードポリシーが10文字以上に設定されている場合(デフォルト)、SaMMAは8文字のパスワード生成のようでこのポリシーに違反して403エラーが発生する。
NextCloudのURLにパスワードを一緒に送付する
NextCloudの仕様としては、NextCloudにアップロード後、URLとファイルは、送信メールのユーザーに記載されるが、パスワードメールはメールの送信元にSaMMAから自動送信される。(送信元Fromは、SaMMAのサービスで利用しているユーザー名)
今回は、送信者に自動的にパスワードも送るようにカスタマイズする方法を紹介します。
/usr/local/bin/os_uploader を編集
make_output メソッドを変更
#37行目付近
TAG_URL = '<@@URL@@>'
TAG_FILES = '<@@FILENAME@@>'
TAG_PASSWD = '<@@PASSWORD@@>' #追加
---
#make_outputの中を編集
def make_output(conf, vals):
encpw = "" #追記
# read template file
try:
encpw = urllib.parse.quote(vals['password']) #<-追記
f = open(conf['TEMPLATE_FILE'], 'r')
tmpl = f.read()
# replace tags
data = tmpl.replace(TAG_URL, vals['shared_url']).replace(TAG_FILES, files)
# ↓以下のように変更
data = tmpl.replace(TAG_URL, vals['shared_url']).replace(TAG_FILES, files).replace(TAG_PASSWD,encpw)
---
NextCloudの設定
- User retentionアプリの有効化
- Files automated taggingアプリの有効化