1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Postfix環境にSaMMAを導入して、メールの添付ファイルを安全に送付する(非PPAP環境の実現)for RockyLinux

Last updated at Posted at 2021-11-22

PPAPでのファイル暗号化や添付ファイルの削除などメールの添付ファイルの制御が出来るSaMMA。
デージーネットさん作成だけに、日本での需要があるメールの添付ファイル取扱いをOSSで提供してくれます。
本環境は、Postfix環境に、SaMMAを導入し、NextCloudによる連係で、ファイルURLを相手に送る方式を実現します。
SaMMAについてはこちらを参照ください

1.導入準備

Postfixが稼動する環境を用意します。
今回は、PostfixAdminを利用した環境を使います。
導入方法は、「」をご覧下さい。
なお、SaMMAは、SendMialに依存しているため、本環境にもPostfixと同時にSendmailを導入します。
(SMTPとしての機能はPostfixを利用しますので、一部のツールのみをSendmail付属機能を利用します)

2.必用なライブラリの導入

以下のライブラリをインストールする

bash
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

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

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

os_uploader.tmpl
cat > /usr/local/etc/samma/os_uploader.tmpl << EOF

Download URL:
<@@URL@@>

Attachment files:
<@@FILENAME@@>

Password:
<@@PASSWORD@@>
EOF

sender

安全化非対象ドメイン
ただし、自ドメインを入れないと暗号化されない
つまり、このドメインから、rcptの該当ドメインに入る場合、暗号化される模様

sender
cat > /usr/local/etc/samma/sender << EOF
internal.exmaple.com
EOF

rcpt

暗号化する宛先のドメイン。ここでは、自ドメイン以外は全てランダムパスワードで送る

rcpt
cat > /usr/local/etc/samma/rcpt<< EOF
jp
com
net
EOF

os_uploader.conf

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は利用しませんが、パラメーターがないと正常起動しないので何か値を入れておく

samma.conf
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に追記する

/etc/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

設定ファイルを作成する

vi /etc/python-policyd-spf/policyd-spf.conf
#ディレクトリを作成する
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 に以下を追加する

/etc/postfix/master.conf
policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/local/bin/policyd-spf

/etc/postfix/mar.conf に以下を追加するin

/etc/postfix/master.conf
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 メソッドを変更

/usr/local/bin/os_uploader

#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アプリの有効化
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?