FreeBSD 11.1にBlacklistdをインストールする方法
FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。
このチュートリアルでは、OpenSMTPD、Dovecot、Rspamd、およびRainLoopを使用してOpenBSDで実行されるフル機能の電子メールサーバーを示します。OpenSMTPDは、OpenBSDのデフォルトのメールサーバーです。予想されるユーザー数に対して十分なストレージがあるVultr Compute Cloudインスタンスを選択してください。
rootとしてタスクを実行するようにユーザーアカウントを設定します。
su -
usermod -G wheel <username>
echo "permit nopass keepenv :wheel" > /etc/doas.conf
exit
OpenBSD用のパッケージリポジトリを設定します。
doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit
必要なパッケージを追加します。
doas pkg_add opensmtpd-extras opensmtpd-filter-rspamd dovecot dovecot-pigeonhole rspamd redis
デフォルトでは、OpenSMTPDはlocalhostでのみ待機します。外部インターフェイスでリッスンするように明示的に構成する必要があります。セキュリティのために、システムユーザーではなく仮想ユーザーを使用するように構成する必要があります。
デフォルト/etc/smtpd.conf
ファイルをバックアップし、新しいファイルを最初から作成します。
cd /etc/mail
mv smtpd.conf smtpd.conf.default
smtpd.conf
以下に示すように新規作成します。example.com
ドメインに置き換えます。この初期構成では、OpenSMTPのテスト中にrspamdフィルターはアクティブ化されません。スパムフィルターは後で有効になります。
pki "mail" cert "/etc/ssl/mail.crt"
pki "mail" key "/etc/ssl/private/mail.key"
table aliases file:/etc/mail/aliases
table credentials passwd:/etc/mail/credentials
table virtuals file:/etc/mail/virtuals
filter "rspamd" proc-exec "/usr/local/libexec/smtpd/filter-rspamd"
# To accept external mail, replace with: listen on all
# listen on all tls pki "mail" hostname "mail.example.com"
listen on egress port submission tls-require pki "mail" hostname "mail.example.com" \
auth <credentials>
action "local_mail" mbox alias <aliases>
action "domain_mail" maildir "/var/vmail/example.com/%{dest.user}" \
virtual <virtuals>
action "outbound" relay
# Uncomment the following to accept external mail for domain "example.org"
# match from any for domain "example.com" action "domain_mail"
match from local for local action "local_mail"
match from local for any action "outbound"
match auth from any for any action "outbound"
OpenSMTPDとDovecotは認証データベースを共有できます。このデータベースは、システムパスワードファイルの形式に似ており、Dovecot用に2つの追加フィールドがあります。2つの特別なフィールドは、仮想ホームディレクトリとメールの場所を定義します。パスワードはフグの形式です。このチュートリアルでは、3つのサンプルユーザーを作成します。
パスワードを生成し、それらを/etc/mail/credentials
ファイルに連結します。
doas su
smtpctl encrypt example_password1 >> /etc/mail/credentials
smtpctl encrypt example_password2 >> /etc/mail/credentials
smtpctl encrypt example_password3 >> /etc/mail/credentials
exit
出力は次のようになります。
$2b$10$agmNBPvFm1zqCjbbZC3JbO4Ns2jJNZQfTS45MAnKi.IPrkKITyTa6
$2b$10$LwkcKVVnwG8hDxu2W4YKD.K0kQ2oylOmQ9SBUb0hIopBsmNxYPb4e
$2b$10$bgLW/GMZyRXKbROgRQIvRu4xbeOqOJJXlgEAKuS5sIrBvfdPvEzeq
編集/etc/mail/credentials
して必須フィールドを追加します。各行は、UIDとGIDが2000のシステムアカウントvmailにマップされます。example.comを自分のドメインに置き換えます。仮想ユーザー名は完全なメールアドレスです。
[email protected]:$2b$10$agmNBPvFm1zqCjbbZC3JbO4Ns2jJNZQfTS45MAnKi.IPrkKITyTa6:vmail:2000:2000:/var/vmail/example.com/john::userdb_mail=maildir:/var/vmail/example.com/john
[email protected]:$2b$10$LwkcKVVnwG8hDxu2W4YKD.K0kQ2oylOmQ9SBUb0hIopBsmNxYPb4e:vmail:2000:2000:/var/vmail/example.com/adam::userdb_mail=maildir:/var/vmail/example.com/adam
[email protected]:$2b$10$bgLW/GMZyRXKbROgRQIvRu4xbeOqOJJXlgEAKuS5sIrBvfdPvEzeq:vmail:2000:2000:/var/vmail/example.com/natalie::userdb_mail=maildir:/var/vmail/example.com/natalie
/etc/mail/credentials
権限を読み取り専用に設定します。_smtpd
_dovecot
vmail
システムユーザー、グループ、およびホームディレクトリを作成します。
vmailシステムユーザーを作成すると、次の警告が表示されますuseradd: Warning: home directory '/var/vmail' doesn't exist, and -m was not specified
。これは予想されることです。これにより、からのドットファイルでディレクトリが乱雑になるのを回避できます/etc/skel
。vmailアカウントはログインを許可しないため、これらは必要ありません。
doas chmod 0440 / etc / mail / credentials doas chown smtpd: dovecot / etc / mail / credentials doas useradd -c "仮想メールアカウント" -d / var / vmail -s / sbin nologin -u 2000 -g = uid -L staff vmail doas mkdir / var / vmail doas chown vmail:vmail / var / vmail
/etc/mail/virtuals
有効なメールアドレスを定義するために作成します。
/var/vmail/example.com/<user>
。このファイルで定義されていないアドレスに対して試行されたメール配信は、配信ステータス通知で返送されます。
[email protected]:[email protected] [email protected]:[email protected] [email protected]:[email protected] [email protected]:[email protected] [email protected]: vmail [email protected]:vmail [email protected]:vmail
この例では、自己署名証明書を使用しています。有効な署名付き証明書がある場合は、それを使用してください。共通名の入力を求められたら、サーバーのFQDNと一致していることを確認してください。この例では、mail.example.comを使用しています。
doas su
cd /etc/ssl
openssl genrsa -out private/mail.key 4096
openssl req -x509 -new -nodes -key private/mail.key -out mail.crt -days 3650 -sha256
chmod 0400 /etc/ssl/private/mail.key
exit
OpenSMTPD構成構文チェッカーを使用します。問題が見つからない場合は、smtpdデーモンを再起動します。
doas smtpd -n
doas rcctl restart smtpd
外部のメールアカウントから、テストメールをいずれかのユーザーに送信します。
/var/vmail
、メールをに配信し/var/vmail/example.com/<username>/new
ます。1576339842.4d64757b.example.com:2,
。すべてのメールヘッダーを含むファイルの内容を確認して、メール配信が適切に機能することを確認します。
Return-Path: <n0244e80da3-54b1ed125c5342fc-adam===example.org@bounce.example.org>
Delivered-To: [email protected]
Received: from spruce-goose-ba.twitter.com (spruce-goose-ba.twitter.com [199.59.150.96])
by mail.example.com (OpenSMTPD) with ESMTPS id 75b514d3 (TLSv1.2:ECDHE-RSA-AES256-GCM- SHA384:256:NO)
for <[email protected]>;
Sat, 14 Dec 2019 11:10:40 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=twitter.com;
s=dkim-201406; t=1576339839;
bh=jhKB5/w9v87GaXSuizT576ntJ/72gvLRDhsqmGQQrCE=;
h=Date:From:To:Subject:MIME-Version:Content-Type:List-Unsubscribe:
Message-ID;
b=TWn/QVUJ1VDlWiweWoanwHLABCL1nqmm0+TBzh3PjmYNm0quRMXB7QL2ykzHGME5A
DTz/JFHa0cOvQsrdhxxbjOLFKimK0nF+Ou5kI+2HzTzfVNZS0qGnTVP/tZyaIsWjjl
an5EiR6HFOHG4iClOOEOJW4oLDEZfPTefrlW+378bmHGIRUNDvVKrbXKunL9fJFAb3
JSrhWQNwbrF/aARFzw4nKfb1I7vTRSrN1eXE5JxzGwI2XAjqDIWdR5ExwUNbJH5ZPs
wQ85j8KLZEEgQkbH9CypgeUMJWsVK95FqOCCaqKMS10M7intGMb3aeiiFcB7yDHi9t
u7rVESm4eGp/g==
X-MSFBL: DM7pSZns+YDRgNEmGNre9aPjZTtc1tDlN97w5rQDBts=|eyJ1IjoibWF0dEBnb2J
sYWNrY2F0LmNvbUBpaWQjIzU0YjFlZDEyNWM1MzQyZmNiNThiMzVmNzI0NDZlMGF
mQHVzYiMjNkAyNDRAMTA4MjgwNTAxMDYzNzk1MDk3NkAwQDA4MjY5ZWI4OTI3YzR
kNTFiNTZkMjY3YzY2OGRmN2IwY2Y4M2ExZGIiLCJyIjoibWF0dEBnb2JsYWNrY2F
0LmNvbSIsImciOiJCdWxrIiwiYiI6InNtZjEtYmd4LTM0LXNyMS1CdWxrLjE4NiJ
9
Date: Sat, 14 Dec 2019 16:10:39 +0000
...
Dovecotでは、デフォルトのクラスで許可されているよりも多くのファイルを読み取りおよび書き込み用に開く機能が必要です。これを怠ると、トラブルシューティングが困難なエラーが発生します。
Dovecotデーモンのログインクラスを定義します。の下部に/etc/login.conf
次の行を追加します。
dovecot:\
:openfiles-cur=1024:\
:openfiles-max=2048:\
:tc=daemon:
を作成します/etc/dovecot/local.conf
。
auth_mechanisms = plain
first_valid_uid = 2000
first_valid_gid = 2000
mail_location = maildir:/var/vmail/%d/%n
mail_plugin_dir = /usr/local/lib/dovecot
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
mbox_write_locks = fcntl
mmap_disable = yes
namespace inbox {
inbox = yes
location =
mailbox Archive {
auto = subscribe
special_use = \Archive
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
prefix =
}
passdb {
args = scheme=CRYPT username_format=%u /etc/mail/credentials
driver = passwd-file
name =
}
plugin {
imapsieve_mailbox1_before = file:/usr/local/lib/dovecot/sieve/report-spam.sieve
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_name = Junk
imapsieve_mailbox2_before = file:/usr/local/lib/dovecot/sieve/report-ham.sieve
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_name = *
sieve = file:~/sieve;active=~/.dovecot.sieve
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
sieve_pipe_bin_dir = /usr/local/lib/dovecot/sieve
sieve_plugins = sieve_imapsieve sieve_extprograms
}
protocols = imap sieve
service imap-login {
inet_listener imaps {
port = 0
}
}
service managesieve-login {
inet_listener sieve {
port = 4190
}
inet_listener sieve_deprecated {
port = 2000
}
}
ssl_cert = </etc/ssl/mail.crt
ssl_key = </etc/ssl/private/mail.key
userdb {
args = username_format=%u /etc/mail/credentials
driver = passwd-file
name =
}
protocol imap {
mail_plugins = " imap_sieve"
}
Dovecotにはバグがあり、ファイルssl_cert
とのssl_key
設定がlocal.conf
ファイルで上書きされないため、コメント化する必要があります。この手順を怠ると、Dovecotが正しく起動しなくなります。
/etc/dovecot/conf.d/10-ssl.conf
図のように編集します。
...
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/ssl/dovecotcert.pem
#ssl_key = </etc/ssl/private/dovecot.pem
...
Sieveスクリプトは、スパムとハムについてRspamdをトレーニングします。電子メールをジャンクフォルダーに出し入れすると、Rspamdをトレーニングするイベントがトリガーされます。
これらのファイルはにあります/usr/local/lib/dovecot/sieve
。
report-ham.sieve
ファイルを作成します。
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" {
set "mailbox" "${1}";
}
if string "${mailbox}" "Trash" {
stop;
}
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "sa-learn-ham.sh" [ "${username}" ];
report-spam.sieve
ファイルを作成します。
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "sa-learn-spam.sh" [ "${username}" ];
ファイルをコンパイルします。
sievec report-ham.sieve
sievec report-spam.sieve
次の2つのシェルスクリプトを作成します。 /usr/local/lib/dovecot/sieve
以下を追加 sa-learn-ham.sh
#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_ham
以下を追加 sa-learn-spam.sh
#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_spam
ファイルを実行可能にします。
chmod 0755 sa-learn-ham.sh
chmod 0755 sa-learn-spam.sh
Dovecotを有効にして起動します。
rcctl enable dovecot
rcctl start dovecot
Dovecotが正しく起動したことを確認してください。
ps ax | grep dovecot
88005 ?? I 0:00.11 /usr/local/sbin/dovecot
69640 ?? I 0:00.03 dovecot/anvil
91207 ?? I 0:00.03 dovecot/log
98178 ?? I 0:00.19 dovecot/config
34712 ?? I 0:00.06 dovecot/stats
96674 ?? I 0:00.03 dovecot/imap-login
8891 ?? S 0:00.02 dovecot/imap
Dovecotが正しく読み取れることを確認します /etc/mail/credentials
doveadm user [email protected]
field value
uid 2000
gid 2000
home /var/vmail/example.com/john
mail maildir:/var/vmail/example.com/john
メールユーザーがログインできることを確認します。
doveadm auth login [email protected]
Password: ********
passdb: [email protected] auth succeeded
extra fields:
[email protected]
userdb extra fields:
[email protected]
mail=maildir:/var/vmail/example.com/john
uid=2000
gid=2000
home=/var/vmail/example.com/john
auth_mech=PLAIN
これは基本的なRspamd構成です。詳細については、公式ドキュメントを参照してください。この例では、DKIM署名を有効にするドメインの定義を作成します。
で公開鍵/秘密鍵のペアを作成し/etc/mail/dkim
、正しい権限を設定します。
doas su
mkdir /etc/mail/dkim
cd /etc/mail/dkim
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
chmod 0440 private.key
chown root:_rspamd private.key
公開鍵を含むDKIMのDNSレコードを作成します。DKIMレコードの作成方法の詳細については、DNSプロバイダーを参照してください。からコンテンツをコピーして、以下に示すようにDKIMレコードの一部の/etc/mail/dkim/public.key
後に貼り付けp=
ます。この例では、SPFレコードも作成されることに注意してください。
default._domainkey.example.com. IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClcuK3FV3Ug64li8iFsuJ2ykgb7FMZsujk9uG79ppPUp57vCfjzO7F+HBfx5qIwvlGxv2IJXK86FZwhpUX+HFCDUtfB2z0ZNGerWcZfNzM1w1Bru/fdMd2tCYkiHEa5RWIkLfs/Fm+neXxRZfAG2UDWmAghNbgzYv7xViwgufDIQIDAQAB"
example.com. IN TXT "v=spf1 a ip4:192.0.2.1 mx ~all"
DMARCレコードを作成します。
_dmarc.example.com. IN TXT "v=DMARC1;p=none;pct=100;rua=mailto:[email protected]"
/etc/rspamd/local.d/dkim_signing.conf
構成ファイルを作成します。
このselector="default";
行は、default._domainkey....
上記で作成したDKIM DNSレコード()の最初の部分から派生しています。
domain {
example.com {
path = "/etc/mail/dkim/example.com.key";
selector = "default";
}
}
Rspamdを有効にして起動します。
doas rcctl enable redis rspamd
doas rcctl start redis rspamd
以下の行を変更し、/etc/mail/smtpd.conf
OpenSMTPDを再起動してRspamdを有効にします。
...
listen on all tls pki "mail" hostname "mail.example.com" filter "rspamd"
listen on egress port submission tls-require pki "mail" hostname "mail.example.com" \
auth <credentials> filter "rspamd"
...
rcctl restart smtpd
POP3またはIMAP電子メールクライアントでメールサーバーをテストします。ウェブメールが不要な場合は、ここで終了してください。
プロンプトが表示されたら、PHPの最新バージョンを選択してください。
pkg_add php php-curl php-pdo_sqlite php-zip pecl73-mcrypt zip unzip wget curl
RainLoopウェブメールのtarballを取得してに抽出し/var/www/htdocs/
ます。
自動アップデーターを含むスタンダードエディションを使用してください。
cd /tmp
wget https://www.rainloop.net/repository/webmail/rainloop-latest.zip
unzip rainloop-latest.zip -d /var/www/htdocs/rainloop
chown -R www:www /var/www/htdocs
/etc/examples/acme-client.conf
へ/etc
ファイルの下部に次の行を追加します。
domain webmail.example.com {
domain key "/etc/ssl/private/webmail.example.com.key"
domain full chain certificate "/etc/ssl/webmail.example.com.crt"
sign with letsencrypt
}
webmail.example.com
/etc/httpd.conf
以下の例に従って編集してください。
prefork 3
types { include "/usr/share/misc/mime.types" }
server "default" {
listen on egress port 80
root "/htdocs"
directory index index.html
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
}
httpd構文チェックを実行します。
httpd -n
httpdを有効にして起動します。
rcctl enable httpd
rcctl start httpd
Let's Encrypt証明書をリクエストします。
acme-client -v webmail.example.com
RainLoopのサーバー定義を追加 /etc/httpd.conf
server "webmail.example.com" {
listen on egress port 80
block return 302 "https://$SERVER_NAME$REQUEST_URI"
}
server "webmail.example.com" {
listen on egress tls port 443
root "/htdocs/rainloop"
directory index "index.php"
tcp { nodelay, backlog 10 }
tls {
certificate "/etc/ssl/webmail.example.com.crt"
key "/etc/ssl/private/webmail.example.com.key"
}
hsts {
max-age 31556952
preload
}
# Value below is 25MB in bytes. 1MB = 1048576 bytes
connection max request body 26214400
location "/data*" {
block return 403
}
location "*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
最大25メガバイトの添付ファイルを許可するようにPHPを構成します。で次の変更を行います/etc/php-7.3.ini
。
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 25M
...
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 29M
構成ファイルをにコピーして、必要なPHPモジュールを有効にします。 /etc/php-7.3/
cp /etc/php-7.3.sample/* /etc/php-7.3/.
の構文を確認してください /etc/httpd.conf
httpd -n
httpdとphp-fpmを有効にして起動します。
rcctl reload httpd
rcctl enable php73_fpm
rcctl start php73_fpm
にアクセスしhttps://webmail.example.com/?admin
ます。
デフォルトのユーザー名はadmin
です。デフォルトのパスワードは12345です。
各構成セクションを参照し、必要な変更を加えます。設定が完了したら、次のWebメールにログインしますhttps://webmail.example.com
CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。
FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。
サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。
CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。
Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。
CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。
WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。
FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。
Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。
ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。