- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-10-07T13:57:55+09:00","default:nowsky","nowsky")
*AMaViS [#n76a7441]
clamavと連携させる事で、メールのウイルス検査を実現するソフトウェア。
単体でリレーMTAとして動作させる事も可能だが、
sendmailやPostfixとかの他MTAで一度受けた後にAMaViSに転送する方がセキュリティ的に望ましい。
#author("2019-01-20T15:46:25+09:00","default:nowsky","nowsky")
*OpenDKIM [#o6c0f9a5]
MTAにmilterとして組み込む事で、DKIMを実装出来るようになるプログラム。
メールの署名付与、署名検証が出来る。
メール送信者の詐称対策に有効なので、SPFと併せて実装しておいた方が良い。
- 参考情報
[[amavisd-newの設定の巻:+http://www.sea-bird.org/pukiwiki/index.php?amavisd-new%A4%CE%C0%DF%C4%EA%A4%CE%B4%AC]]
[[OpenDKIM:+http://opendkim.org/]]
[[PostifxでDKIM認証する:+https://qiita.com/techno_officer/items/3c550d261b5a0c6df3a4]]
[[OpenDKIMを利用したメール認証 :+https://heavy-metal-explorer.com/open_dkim_setting/]]
~
*構築環境 [#m5f43ca8]
*構築環境 [#k5ecf147]
今回検証した環境はこちら
-debian 8.1 x86_64
-CentOS 7.2 x86_64
-openSUSE 42.2 x86_64
※CentOS 6.x等の非Systemd環境で構築する場合には、各スクリプトをinit用に書き換える必要がある。
-debian 8.9 x86_64
-CentOS 7.4 x86_64
-openSUSE 42.3 x86_64
~
他には下の内容で構築メモを作成
-amavisは"127.0.0.1:TCP/10026"で待ち受ける
-検査完了したメールには"X-Virus-Scanned:"のヘッダーを付与する
-ウイルスメール以外(スパムとか)は、とりあえず次のMTAへ転送する
-Clamavは事前にインストールしておく
-コンフィグディレクトリ構成は、apt-getやzypperした結果のデフォルトをそのまま使う
-OpenDKIMは"127.0.0.1:TCP/10027"で待ち受ける
-汎用性を持たせる為、LocalSocketは今回利用しない
-送受信の署名付与/検証を実施する
-マルチドメインの検証に対応させる
~
ドメイン構成などは
-メール鯖のドメイン:hoge.org
-メール鯖のFQDN:mail.hoge.org
-メール鯖のIPアドレス:10.0.0.1
-メール鯖管理者のメールアドレス:admin☆mail.hoge.org
~
*構築(Debian) [#b39eb80e]
*構築(Debian) [#n01614b7]
&size(16){&font(b){1. インストール};};
amavisの一部コマンドがnon-freeリポジトリを使っている為、
リポジトリを追加する事でインストール出来るようにする必要がある。
# vi /etc/apt/sources.list.d/jessie.non-free.list
==================================================
deb http://ftp.jp.debian.org/debian/ jessie non-free
deb http://ftp.jp.debian.org/debian/ jessie-updates non-free
deb http://ftp.jp.debian.org/debian/ jessie-backports non-free
# apt-get install amavisd-new spamassassin clamav-daemon
# apt-get install pyzor razor libnet-dns-perl libmail-spf-perl
# apt-get install arj bzip2 cabextract cpio file gzip lha nomarch pax rar unrar unzip unzoo zip zoo
Debianではopendkimとopendkim-toolsの二つをインストールする
デフォルトのリポジトリでインストール出来るので、apt-getを実行するのみとなる。
# apt-get install opendkim opendkim-tools
~
&size(16){&font(b){2. 設定};};
debian環境の場合は、amavisの設定ファイルが細切れになっている。
概ね機能毎に纏まっているが一部の設定は全く違うファイルにあったりするので、
該当するコンフィグが見つからない場合は、都度grepコマンドで探し出す。
# grep -r "検索文字列" ./*
既存のコンフィグは内容が書かれていない為、ディレクトリ含めて全て作成する必要がある。
また、一部設定がinitファイルに埋め込まれていたり、環境変数として固定化されている為、
埋め込まれた設定を無効化する事で通常のコンフィグから設定を読み込ませる様に変更する。
# mkdir -p /etc/opendkim/cert
# cd /etc/opendkim/cert
# opendkim-genkey -D /etc/opendkim/cert -d mail.hoge.org -s 20170101 -b 2048
# chown opendkim.root 20170101.private
# chmod 400 20170101.private
~
#region(&color(#ff0000){設定内容};)
&size(14){&font(b){そのまま使う設定ファイル};};
/etc/amavis/conf.d/01-debian
/etc/amavis/conf.d/30-template_localization
/etc/amavis/conf.d/50-user
~
&size(14){&font(b){/etc/amavis/conf.d/05-domain_id};};
< chomp($mydomain = `head -n 1 /etc/mailname`);
&size(14){&font(b){/etc/opendkim.conf};};
# 細かい解説はopenSUSE版を参照
----
[01] Syslog yes
[02] SyslogFacility mail
[03] SyslogSuccess yes
[04] LogWhy yes
[05] UMask 022
[06] UserID opendkim:opendkim
[07] Socket inet:10027@127.0.0.1
[08] PidFile /var/run/opendkim/opendkim.pid
[09] KeyTable refile:/etc/opendkim/KeyTable
[10] SigningTable refile:/etc/opendkim/SigningTable
[11] ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
[12] InternalHosts refile:/etc/opendkim/TrustedHosts
[13] Mode sv
[14] Canonicalization relaxed/relaxed
[15] MinimumKeyBits 1024
[16] SignatureAlgorithm rsa-sha256
[17] SoftwareHeader no
[18] StrictHeaders no
[19] StrictTestMode no
[20] SubDomains no
&size(14){&font(b){/etc/opendkim/KeyTable};};
[セレクタ]._domainkey.[FQDN] [FQDN]:[セレクタ]:[秘密鍵]
---
> chomp($mydomain = "hoge.org");
~
&size(14){&font(b){/etc/amavis/conf.d/05-node_id};};
< chomp($myhostname = `hostname --fqdn`);
20170101._domainkey.mail.hoge.org mail.hoge.org:20170101:/etc/opendkim/cert/20170101.private
&size(14){&font(b){/etc/opendkim/SigningTable};};
[署名対象のユーザ]@[FQDN] [セレクタ]._domainkey.[FQDN]
---
> chomp($myhostname = "mail.hoge.org");
~
&size(14){&font(b){/etc/amavis/conf.d/15-av_scanners};};
! ['ClamAV-clamd',
! \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
! qr/\bOK$/m, qr/\bFOUND$/m,
! qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
*@mail.hoge.org 20170101._domainkey.mail.hoge.org
&size(14){&font(b){/etc/opendkim/TrustedHosts};};
127.0.0.1
10.0.0.1
&size(14){&font(b){/etc/default/opendkim};};
# 全てコメントアウト
---
&ask_daemonの第2引数をclamavのソケットと合わせる
#DAEMON_OPTS=""
#SOCKET="local:/var/run/opendkim/opendkim.sock" # default
#SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
#endregion
~
&size(14){&font(b){/etc/amavis/conf.d/15-content_filter_mode};};
< @bypass_spam_checks_maps = (
< \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
---
> @bypass_spam_checks_maps = (1);
*構築(CentOS) [#v71ebad3]
&size(16){&font(b){1. インストール};};
CentOSの場合、OpenDKIMをyumでインストールするにはEPELリポジトリが必要となる。
EPEL自体もyumでインストール出来る為、今までの様にimport-keyする必要がなくなる。
# yum install epel-release
# yum --enablerepo=epel install opendkim
~
&size(14){&font(b){/etc/amavis/conf.d/20-debian_defaults};};
< $QUARANTINEDIR = "$MYHOME/virusmails";
< $quarantine_subdir_levels = 1; # enable quarantine dir hashing
---
> ###$QUARANTINEDIR = "$MYHOME/virusmails";
> ###$quarantine_subdir_levels = 1; # enable quarantine dir hashing
==================================================
< @keep_decoded_original_maps = (new_RE(
< qr'^MAIL$',
< qr'^MAIL-UNDECIPHERABLE$',
< qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
< qr'^Zip archive data',
< ));
---
> @keep_decoded_original_maps = (new_RE(
> qr'^MAIL$',
> qr'^MAIL-UNDECIPHERABLE$',
> qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
> ###qr'^Zip archive data',
> ));
==================================================
! [1] $inet_socket_bind = '127.0.0.1';
! [2] $inet_socket_port = 10026;
! [3] $forward_method = 'smtp:[127.0.0.1]:10025';
! [4] $X_HEADER_TAG = 'X-Virus-Scanned';
! [5] $X_HEADER_LINE = "$myproduct_name at $mydomain";
! [6] $virus_admin = 'admin@mail.hoge.org';
! [7] $spam_admin = 'admin@mail.hoge.org';
---
[1] amavisの待ち受けるIPアドレス
[2] amavisの待ち受けるTCPポート番号
[3] ウイルス検査完了メールの転送先。例だとIP:127.0.0.1-TCP/10025に投げる
[4] ウイルス検査完了メールに付与するヘッダ
[5] ウイルス検査完了メールに付与するヘッダパラメータ
[6] ウイルスメールの転送先アドレス。ドメイン部を$mydomainに置き換え可能
[7] スパムメールの転送先アドレス。ドメイン部を$mydomainに置き換え可能
==================================================
$banned_filename_re = new_RE(
# [1] Block certain double extensions anywhere in the base name
qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,
&size(16){&font(b){2. 設定};};
他ディストリビューションと殆ど同じだが、一部設定は利用出来ないのでDisableにする。
また、sysconfigに埋め込まれている環境変数も必要無いので削除(未設定)にする。
# mkdir /etc/opendkim/keys
# cd /etc/opendkim/keys
# opendkim-genkey -D /etc/opendkim/keys -d mail.hoge.org -s 20170101 -b 2048
# chown opendkim.root 20170101.private
# chmod 400 20170101.private
~
#region(&color(#ff0000){設定内容};)
&size(14){&font(b){/etc/opendkim.conf};};
# 細かい解説はopenSUSE版を参照
----
[01] PidFile /var/run/opendkim/opendkim.pid
[02] Mode sv
[03] Syslog yes
[04] SyslogFacility mail
[05] SyslogSuccess yes
[06] LogWhy yes
[07] UserID opendkim:opendkim
[08] Socket inet:10027@127.0.0.1
[09] Umask 022
[10] SendReports no
[11] SoftwareHeader no
[12] Canonicalization relaxed/relaxed
[13] MinimumKeyBits 1024
[14] KeyTable refile:/etc/opendkim/KeyTable
[15] SigningTable refile:/etc/opendkim/SigningTable
[16] ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
[17] InternalHosts refile:/etc/opendkim/TrustedHosts
# [2] Windows Class ID CLSID, strict
qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?$'i,
# [3] Block these MIME types
qr'^application/x-msdownload$'i,
qr'^application/x-msdos-program$'i,
qr'^application/hta$'i,
# [4] Block these file extension
qr'^(?!cid:).*\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,
qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)$'i,
qr'^\.(exe-ms|dll)$',
);
# 下記はコンフィグの最終行に追加
----
[18] SignatureAlgorithm rsa-sha256
[19] StrictHeaders no
[20] StrictTestMode no
[21] SubDomains no
&size(14){&font(b){/etc/opendkim/KeyTable};};
[セレクタ]._domainkey.[FQDN] [FQDN]:[セレクタ]:[秘密鍵]
---
[1] 二重拡張子の添付ファイルを遮断
[2] OSのCLSIDパラメータを遮断
[3] 添付ファイルのMIMEタイプで遮断
[4] 添付ファイルの拡張子で遮断
~
&size(14){&font(b){/etc/amavis/conf.d/25-amavis_helpers};};
< @mynetworks = qw( 127.0.0.1/32 );
20170101._domainkey.mail.hoge.org mail.hoge.org:20170101:/etc/opendkim/keys/20170101.private
&size(14){&font(b){/etc/opendkim/SigningTable};};
[署名対象のユーザ]@[FQDN] [セレクタ]._domainkey.[FQDN]
---
> @mynetworks = qw( 127.0.0.1/32 10.0.0.1/32 );
*@mail.hoge.org 20170101._domainkey.mail.hoge.org
&size(14){&font(b){/etc/opendkim/TrustedHosts};};
127.0.0.1
10.0.0.1
&size(14){&font(b){/etc/sysconfig/opendkim};};
# DKIM_SELECTORをコメントアウト
---
@mynetworksはCIDR形式で記入する
OPTIONS="-x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid"
#DKIM_SELECTOR=default
DKIM_KEYDIR=/etc/opendkim/keys
#endregion
~
&size(16){&font(b){3. 設定反映};};
書き換えた設定をAMaViSに反映させる為にプロセスの再起動を行う。
# systemctl restart amavis.service
# netstat -an | egrep -i "tcp.*10026.*LISTEN"
~
*構築(CentOS) [#b8bef6d7]
*構築(openSUSE) [#g7ca6901]
&size(16){&font(b){1. インストール};};
コアとなるclamavと関連ライブラリはEPELリポジトリを使っている為、
事前にEPELリポジトリを追加しておく必要がある。
# yum install amavisd-new spamassassin
# yum install clamav clamav-data clamav-filesystem clamav-lib clamav-scanner-sysvinit clamav-scanner
# yum install clamav-server-systemd clamav-server-sysvinit clamav-server clamav-update
openSUSEではデフォルトのリポジトリだけだとOpenDKIMをインストール出来ないので、
MailServerリポジトリを追加してからインストールを行う。
リポジトリのプライオリティ、有効化は別途Yastから行っておく。
# zypper addrepo http://download.opensuse.org/repositories/server:mail/openSUSE_Leap_42.3/server:mail.repo
# zypper refresh
# zypper install opendkim
~
&size(16){&font(b){2. 設定};};
CentOSの場合amavisの設定ファイルは、/etc/amavisd/amavisd.confの一つに集約されている。
/etc/clamd.d/amavisd.confにも設定があるが、こちらは使わないので放置する。
証明書はOpenDKIMに付属されているツール(opendkim-genkey)を用いて生成する。
生成した証明書はOpenDKIMのコンフィグ内にディレクトリを作成して保存しておく。
セレクタはDNSレコード、メールヘッダに付与される情報なので生成した日付にする。
コンフィグは証明書を元に署名/検証の制御を実装する。
# mkdir /etc/opendkim/cert
# cd /etc/opendkim/cert
# opendkim-genkey -D /etc/opendkim/cert -d mail.hoge.org -s 20170101 -b 2048
# chown opendkim.root 20170101.private
# chmod 400 20170101.private
~
#region(&color(#ff0000){設定内容};)
&size(14){&font(b){/etc/amavisd/amavisd.conf};};
! [1] @bypass_virus_checks_maps = (0);
! [2] @bypass_spam_checks_maps = (1);
&size(14){&font(b){/etc/opendkim/opendkim.conf};};
# 下記以外は全てコメントアウトする
----
[01] BaseDirectory /run/opendkim
[02] Canonicalization relaxed/relaxed
[03] ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
[04] InternalHosts refile:/etc/opendkim/TrustedHosts
[05] KeyTable refile:/etc/opendkim/KeyTable
[06] LogWhy yes
[07] MinimumKeyBits 1024
[08] Mode sv
[09] PidFile /var/run/opendkim/opendkim.pid
[10] SignatureAlgorithm rsa-sha256
[11] SigningTable refile:/etc/opendkim/SigningTable
[12] Socket inet:10027@127.0.0.1
[13] SoftwareHeader no
[14] StrictHeaders no
[15] StrictTestMode no
[16] SubDomains no
[17] Syslog yes
[18] SyslogFacility mail
[19] SyslogSuccess yes
[20] UMask 022
[21] UserID opendkim:opendkim
=================================================
# 概略のみ解説。詳細はコンフィグを見る
----
[01] デフォルトディレクトリの変更
[02] 署名の厳格化。simpleは改変禁止、relaxedは(SpaceをTabに変換等)多少許可
[03] 認証を行わないサーバリスト
[04] 送信時に必ず認証するサーバリスト
[05] 署名に利用する秘密鍵の指定
[06] 詳細ログの出力
[07] 証明書の最小ビット数
[08] 署名/検証のモード設定。s:署名、v:検証
[09] OpenDKIMのPIDファイル
[10] 署名のアルゴリズム。現在は、RSA-SHA256しか使えない
[11] 署名するメールのenvelope-fromの設定
[12] OpenDKIMの起動方法。今回はSocketではなく、TCP:10027で待ち受けを行う
[13] DKIM-FILTERヘッダーを追加。バージョンが載るので今回は付与しない
[14] DKIMの標準仕様(RFC5322)に沿っていないメールの処理。今回は受信する
[15] ヘッダ、ボディが[CRLF]で終了してない場合は不正と判断。今回は受信する
[16] サブドメインメールの署名付与。今回はサブドメインへの付与はしない
[17] syslog出力の有効化
[18] syslogのファシリティ
[19] 処理成功時にsyslogに出力する
[20] ファイル生成時のUMASK値
[21] OpenDKIMを実行するユーザの設定
&size(14){&font(b){/etc/opendkim/KeyTable};};
[セレクタ]._domainkey.[FQDN] [FQDN]:[セレクタ]:[秘密鍵]
---
[1] ウイルスチェックを必ず実行する
[2] スパムメールチェックは行わない
==================================================
! [3] $lock_file = "/var/run/amavisd/amavisd.lock";
! [4] $pid_file = "/var/run/amavisd/amavisd.pid";
20170101._domainkey.mail.hoge.org mail.hoge.org:20170101:/etc/opendkim/cert/20170101.private
&size(14){&font(b){/etc/opendkim/SigningTable};};
[署名対象のユーザ]@[FQDN] [セレクタ]._domainkey.[FQDN]
---
[3] amavisd起動時のロックファイル
[4] amavisdのプロセス番号ファイル
==================================================
! [5] $log_level = 1;
! [6] $do_syslog = 1;
! [7] $syslog_facility = 'mail';
---
[5] amavisdのウイルスチェックログを記録
[6] amavisdのログをsyslogに出力
[7] syslogのfacilityを設定する
==================================================
< \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamd.amavisd/clamd.sock"],
---
> \&ask_daemon, ["CONTSCAN {}\n", "【clamavのソケットと同じにする】"],
==================================================
< $mydomain = 'example.com';
---
> $mydomain = 'hoge.org';
> $myhostname = 'mail.hoge.org';
< $QUARANTINEDIR = undef;
---
> # $QUARANTINEDIR = undef;
< $db_home = "$MYHOME/db";
---
> # $db_home = "$MYHOME/db";
< @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );
---
> @mynetworks = qw( 127.0.0.1/32 10.0.0.1/32 );
< $inet_socket_port = 10024;
---
> $inet_socket_bind = '127.0.0.1';
> $inet_socket_port = 10026;
< $virus_admin = undef;
---
> $virus_admin = 'admin@mail.hoge.org';
> $spam_admin = 'admin@mail.hoge.org';
< $mailfrom_notify_admin = undef;
< $mailfrom_notify_recip = undef;
< $mailfrom_notify_spamadmin = undef;
---
> $mailfrom_notify_admin = "virusalert\@$mydomain";
> $mailfrom_notify_recip = "virusalert\@$mydomain";
> $mailfrom_notify_spamadmin = "spam.police\@$mydomain";
< # $notify_method = 'smtp:[127.0.0.1]:10025';
---
> $forward_method = 'smtp:[127.0.0.1]:10025';
> $notify_method = '$forward_method';
< $X_HEADER_TAG = 'X-Virus-Scanned';
< $X_HEADER_LINE = "$myproduct_name at $mydomain";
> $banned_filename_re = new_RE(
> qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,
> qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?$'i,
> qr'^application/x-msdownload$'i,
> qr'^application/x-msdos-program$'i,
> qr'^application/hta$'i,
> qr'^(?!cid:).*\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,
> qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)$'i,
> qr'^\.(exe-ms|dll)$',
> );
*@mail.hoge.org 20170101._domainkey.mail.hoge.org
&size(14){&font(b){/etc/opendkim/TrustedHosts};};
127.0.0.1
10.0.0.1
#endregion
~
&size(16){&font(b){3. スクリプト書き換え};};
デフォルトのままだと、&font(b){amavisd本体};と&font(b){clamdが呼び出すamavisプロセス};の2つが動いてしまい、
2倍のメモリを消費してしまう。
起動スクリプトを調整する事で、二重起動を防止する。
*構築(ソースビルド) [#d9ad03ab]
&size(16){&font(b){0. 説明};};
ディストリビューションによっては、パッケージ管理でインストール出来るOpenSSLがv1.1.0以上となり、
v1.0.X以下が必要となるOpenDKIMを起動出来ないケースがある。
その場合は、EPELリポジトリで配布している改修版ソースコードを使ってインストールする。
&size(16){&font(b){1. インストール};};
# zypper install sendmail-devel libmemcached-devel unbound-devel tre-devel lua51-devel lua53-devel libjansson-devel erlang libbsd-devel curl-devel
# wget "https://dl.fedoraproject.org/pub/epel/7/SRPMS/Packages/o/opendkim-2.11.0-0.1.el7.src.rpm"
# rpm2cpio opendkim-2.11.0-0.1.el7.src.rpm | cpio -idv
# tar zxvf opendkim-2.11.0.Alpha0.tar.gz
# cd opendkim-2.11.0
# patch -p1 < ../opendkim.ticket35+37.patch
# ./configure --prefix=/usr/local/opendkim-2.11.0 \
--disable-reprrd --disable-static --disable-silent-rules --disable-live-testing \
--enable-atps --enable-db_handle_pools --enable-diffheaders --enable-identity_header \
--enable-ldap_caching --enable-postgresql_reconnect_hack --enable-rate_limit \
--enable-replace_rules --enable-reputation --enable-resign --enable-sender_macro \
--enable-socketdb --enable-stats --enable-statsext --enable-rbl --enable-vbr \
--enable-default_sender --enable-query_cache \
--with-libmemcached --with-tre --with-lua --with-openldap --with-openssl --with-sasl \
--with-erlang --with-unbound --with-domain="example.com"
# make
# make install
# cd /usr/local
# ln -s /usr/local/opendkim-2.11.0 opendkim
&size(16){&font(b){2. 起動スクリプト};};
ソースビルドでインストールしている為、起動スクリプトと設定ファイルを自作する。
設定ファイルは、Debian/CentOS/openSUSEと同内容となるので割愛。
下記ファイルはopenSUSEのディレクトリ構成を踏襲している為、
他ディストリビューション環境では各々のディレクトリに併せてファイルを配置する。
# groupadd opendkim
# useradd -g opendkim -d /run/opendkim -s /sbin/nologin opendkim
# systemctl enable opendkim.service
# mkdir /etc/opendkim
# vi /etc/opendkim/opendkim.conf
~
#region(&color(#ff0000){設定内容};)
&size(14){&font(b){起動スクリプト調整};};
# vi /usr/lib/systemd/system/amavisd.service
---
#region(&color(#ff0000){作成内容};)
&size(14){&font(b){/usr/lib/systemd/system/opendkim.service};};
[Unit]
Description=Amavisd-new is an interface between MTA and content checkers.
Documentation=http://www.ijs.si/software/amavisd/#doc
# After=network.target
# Wants=clamd@amavisd.service
After=clamd.scan.service network.target
Wants=clamd.scan.service
Before=postfix.service
Description=DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target nss-lookup.target syslog.target
[Service]
EnvironmentFile=/etc/sysconfig/opendkim
ExecStart=/usr/local/opendkim/sbin/opendkim -f $OPTIONS
ExecReload=/bin/kill -USR1 $MAINPID
NonBlocking=yes
[Install]
WantedBy=multi-user.target
&size(14){&font(b){追加操作};};
# rm /etc/clamd.d/amavisd.conf
# vi /usr/lib/tmpfiles.d/amavisd-new.conf
# vi /usr/lib/tmpfiles.d/clamd.scan.conf
&size(14){&font(b){/etc/sysconfig/opendkim};};
# Set the necessary startup options
OPTIONS="-x /etc/opendkim/opendkim.conf"
&size(14){&font(b){/usr/lib/tmpfiles.d/opendkim.conf};};
# Type Path Mode UID GID Age Argument
d /run/opendkim/ 0755 opendkim opendkim - -
#endregion
~
&size(16){&font(b){4. 設定反映};};
amavisdを一つだけにする為、関連するプログラムを再起動する
設定を間違えてamavisdが二重起動しようとしている場合や、systemdによるサービス自動再起動が動作し、
プログラムが上手く再起動出来ない(1つだけにならない)場合は下記ログがmessagesに出力される
systemd: Starting clamd scanner (amavisd) daemon...
clamd: ERROR: Can't open/parse the config file /etc/clamd.d/amavisd.conf
systemd: clamd@amavisd.service: main process exited, code=exited, status=1/FAILURE
systemd: Unit clamd@amavisd.service entered failed state.
systemd: clamd@amavisd.service failed.
systemd: clamd@amavisd.service holdoff time over, scheduling restart.
systemd: start request repeated too quickly for clamd@amavisd.service
systemd: Started clamd scanner (amavisd) daemon.
*起動 [#ie16eb15]
MTA(Postfix)にOpenDKIMを組み込む為、milter設定を行う。
また、OpenDKIMをサービスとして登録して自動起動出来る様にする。
※再起動順序
amavisdがforeground引数を付けた状態で起動していたら、clamd経由でamavisが起動している(二重起動状態)
---
# systemctl restart clamd
# systemctl restart amavisd
# netstat -an | egrep -i "tcp.*10026.*LISTEN"
# ps -ef | grep amavis
&size(14){&font(b){/etc/postfix/main.cf};};
# 下記を追記
----
smtpd_milters=inet:127.0.0.1:10027
non_smtpd_milters=$smtpd_milters
milter_default_action=accept
&size(14){&font(b){起動処理};};
# systemctl enable opendkim
# systemctl start opendkim
# netstat -an | grep 10027
~
*構築(openSUSE) [#v0022cda]
&size(16){&font(b){1. インストール};};
openSUSEでは標準リポジトリでamavisパッケージを導入する事が出来る筈だが、
エラーが出てしまった場合はソースRPMリポジトリとセキュリティリポジトリを追加する。
# zypper addrepo http://download.opensuse.org/distribution/leap/42.2/repo/oss/ opensuse-repo-oss
# zypper addrepo http://download.opensuse.org/repositories/security/openSUSE_Leap_42.2/security.repo opensuse-security
# zypper refresh
# zypper install clamav amavisd-new
*DNS設定 [#t37a92da]
DKIMを利用する場合、権威DNSサーバにTXTレコードを登録する必要がある。
DNSに登録するレコードは、証明書作成時に生成されたテキストファイルに記載されている。
権威DNSサーバ都合で一行に記載出来るレコード文字数が制限されている場合、
下記の様に括弧で囲んだ上で改行して登録する
"_adsp"については、ググれば解説が出てくるので省略。
今回は無難な設定として"dkim=unknown"としている。
_adsp._domainkey.mail.hoge.org. IN TXT "dkim=unknown"
20170101._domainkey.mail.hoge.org. IN TXT ( "v=DKIM1; k=rsa; p=AAAAAAAA"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" )
~
&size(16){&font(b){2. 設定};};
openSUSEのamavisd.confは一つのファイルに固まった形になっている。
設定内容はCentOS版と殆ど同じだが、バイパス設定が少しだけ違うので注意する。
~
#region(&color(#ff0000){設定内容};)
&size(14){&font(b){/etc/amavisd.conf};};
! [1] # @bypass_virus_checks_maps = (1);
! [2] @bypass_spam_checks_maps = (1);
! [3] # $bypass_decode_parts = 1;
*Amavis除外 [#wb1c8355]
Amavisは単体で簡易的なDKIM署名付与・評価を行える様になっている。
上位MTAなど同一のADMDネットワーク内でAmavisを稼働させている場合、
デフォルト設定ではAmavisとOpenDKIMで署名付与と評価を実行し、二重署名になる場合がある。
この場合、Amavisの設定を変更して該当機能を無効化する。
DKIM機能を無効化する場合は数字を [0] にする
---
[1] コメントアウトか"0"をセットするとウイルスチェックを実行する
[2] スパムチェックは行わない
[3] コメントアウトするとファイルデコーダ・アーカイバが動作するようになる
==================================================
! [4] $MYHOME = '/var/spool/amavis';
! [5] $lock_file = "$MYHOME/var/amavisd.lock";
! [6] $pid_file = "$MYHOME/var/amavisd.pid";
---
[4] amavisが生成するファイルのディレクトリ指定
[5] amavis起動時のロックファイル
[6] amavisのプロセス番号ファイル
==================================================
! [7] $log_level = 1;
! [8] $do_syslog = 1;
! [9] $syslog_facility = 'mail';
---
[7] amavisのウイルスチェックログを記録
[8] amavisのログをsyslogに出力
[9] syslogのfacilityを設定する
==================================================
< \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamd.amavisd/clamd.sock"],
---
> \&ask_daemon, ["CONTSCAN {}\n", "【clamavのソケットと同じにする】"],
==================================================
< $mydomain = 'example.com';
---
> $mydomain = 'hoge.org';
> $myhostname = 'mail.hoge.org';
< $QUARANTINEDIR = undef;
---
> # $QUARANTINEDIR = undef;
< $db_home = "$MYHOME/db";
---
> # $db_home = "$MYHOME/db";
< @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );
---
> @mynetworks = qw( 127.0.0.1/32 10.0.0.1/32 );
< $inet_socket_port = 10024;
---
> $inet_socket_bind = '127.0.0.1';
> $inet_socket_port = 10026;
< $virus_admin = undef;
---
> $virus_admin = 'admin@mail.hoge.org';
> $spam_admin = 'admin@mail.hoge.org';
< $mailfrom_notify_admin = undef;
< $mailfrom_notify_recip = undef;
< $mailfrom_notify_spamadmin = undef;
---
> $mailfrom_notify_admin = "virusalert\@$mydomain";
> $mailfrom_notify_recip = "virusalert\@$mydomain";
> $mailfrom_notify_spamadmin = "spam.police\@$mydomain";
< # $notify_method = 'smtp:[127.0.0.1]:10025';
---
> $forward_method = 'smtp:[127.0.0.1]:10025';
> $notify_method = '$forward_method';
< $X_HEADER_TAG = 'X-Virus-Scanned';
< $X_HEADER_LINE = "$myproduct_name at $mydomain";
> $banned_filename_re = new_RE(
> qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,
> qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?$'i,
> qr'^application/x-msdownload$'i,
> qr'^application/x-msdos-program$'i,
> qr'^application/hta$'i,
> qr'^(?!cid:).*\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,
> qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)$'i,
> qr'^\.(exe-ms|dll)$',
> );
#endregion
~
$enable_dkim_verification = 0;
$enable_dkim_signing = 0;
&size(16){&font(b){3. 設定反映};};
書き換えた設定をプロセスに反映させる為に再起動を行う。
また、デフォルトでは自動起動がOFFになっている為、自動起動をONに変更する。
# systemctl enable amavis.service
# systemctl restart amavis.service
# netstat -an | egrep -i "tcp.*10026.*LISTEN"