ActiveDirectoryと連携しよう (2) postfix

こんにちは。後野です。

ActiveDirectoryと postfix を連携させてみました。
ActiveDirectory の セキュリティグループを MLと見立て、そこにユーザを参加させます。

業務や部門毎に、グループを作成し、ファイルサーバのアクセス権限と共にMLの更新まで
出来てしまえば、ユーザー管理が結構簡素化されるのではないかという感じです。

ML用のドメインは、ADのドメインとは異なるドメインで受け付けます。なのでpostfix は
受信はせずに配り直すようにします。

まず postfix が AD を参照するようにします。
変更内容です。

main.cf
virtual_transport = virtual
virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /home/vmail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001

/etc/postfix/ldap-users.cf
server_host = 10.118.10.22
search_base = ou=person, dc=ad, dc=clara, dc=local
scope = sub
version = 3
query_filter = (&(objectclass=person)(mail=%s))
result_attribute = mail
result_format = %s/Maildir/
#
bind = yes
bind_dn = cn=administrator,cn=Users,dc=ad,dc=clara,dc=local
bind_pw = ######
domain = ad.clara.local

※一般ユーザーで良いのですが、あくまで検証ということで手抜きしました

/etc/postfix/ldap-alias.cf
server_host = 10.118.10.22
search_base = dc=ad, dc=clara, dc=local
version = 3
query_filter = (&(objectclass=group)(mail=%s))
#leaf_result_attribute = mail
leaf_result_attribute = userPrincipalName
special_result_attribute = member
bind = yes
bind_dn = cn=administrator,cn=Users,dc=ad,dc=clara,dc=local
bind_pw = ########

ここまでの変更で postfix を restartさせ メールは配送されました。
しかし alias として転送するだけなので、メールの件名にML名と連番を付けるようにします。

コンテンツフィルタの機能を用いて試してみます。
postfix 側を変更します

master.cf
-o content_filter=filter:
filter unix - n n - 10 pipe
flags=Rq user=filter argv=/home/filter/inc.sh -f ${sender} -- ${recipient}

inc.sh
#!/bin/sh
#
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.
#
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
#
# Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || {
echo Cannot save mail to file; exit $EX_TEMPFAIL; }
#
#### HEADER CHANGE BEGIN
ML_NUM_DIR=/var/spool/ml
ML_NAME=awk '$1 ~ /^To:$/ {print $2}' in.$$ | cut -d @ -f 1
ML_FILE=$ML_NUM_DIR/$ML_NAME.num
#
if [ ! -f ${ML_FILE} ];then
touch ${ML_FILE}
fi
#
ML_NAME_NUM=cat $ML_FILE
ML_NAME_NUM=expr $ML_NAME_NUM + 1
ML_NAME_NUM2=seq -w $ML_NAME_NUM 1000000 | head -1
#
ADD_HEDER="\[$ML_NAME\:$ML_NAME_NUM2\]"
sed -ie 's/\(Subject\:\)\(.*.\)/\1 '${ADD_HEDER}'\2/' in.$$
echo "${ML_NAME_NUM}" > ${ML_FILE}
#### HEADER CAHNGE END
$SENDMAIL "$@" <in.$$
exit $?

※とりあえず変更の動作確認用スクリプト bash で作成。

そして スクリプトを動作させるユーザー、一次領域の作成です。
useadd filter
mkdir /var/spool/ml
chown filter:filter /var/spool/ml
chown filter:filter /var/spool/filter

想定通りに動いてくれました。
MLの動作としてこうなって欲しいとかも有ると思いますが、基本的な動作としては十分かなと
満足したところで終わります。

 

お疲れまさでした。

 

 

 

Share on LinkedIn
LINEで送る
Pocket

claraer

claraer