FreeBSD 11.1にBlacklistdをインストールする方法
FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。
独自の電子メールサーバーを実行することは、かなりやりがいがあります。あなたはあなたのデータを担当しています。また、配信オプションの柔軟性も向上します。ただし、いくつかの課題があります。サーバーを脆弱性にさらすリスクを冒し、サーバーをスパマーが使用する潜在的なリレーにする可能性があります。
これで、独自のメールサーバーを実行してみましょう。
インストールに必要なソフトウェアは3つありますが、これらはFreeBSDベースシステムに含まれていません。
OpenSMTPdは、メール転送エージェント(MTA)およびメール配信エージェント(MDA)です。つまり、SMTP
プロトコルを介して他のメールサーバーと通信でき、個々のユーザーのメールボックスへのメール配信も処理します。OpenSMTPdを設定して、外部サーバーと通信し(spamdでフィルタリング)、ローカルユーザーにメールを配信したり、ユーザー間でローカルメールを配信したりできるようにします。
Dovecotは、ローカルのメールボックスを読み取り、IMAPまたはPOP3経由でユーザーに提供するMDAです。ローカルユーザーのメールボックスを使用して、このコンテンツを提供します。
Spamdはメールフィルタリングサービスです。spamdを介してメールを転送でき、さまざまなブラックリスト、ホワイトリスト、およびグレーリストに基づいてメールをフィルタリングします。
このメールサーバーの一般的なアイデアには、いくつかの異なるパスが必要です。
Outside world -> Firewall -> spamd -> OpenSMTPD -> User mail boxes
Outside world -> Firewall (spamd-whitelist) -> OpenSMTPD -> User mailboxes
Outside world -> Firewall (IMAP/POP3) -> Dovecot
Outside world -> Firewall (SMTPD submission)
このチュートリアルでは、ファイアウォールにOpenBSDのPFのFreeBSDバージョンを使用します。ipfw
構成が非常に似ているを使用することもできます。
注: デフォルトでは、Vultrはポート25をブロックします。ポート25は、SMTPサーバーがあらゆる場所で使用します。完全に機能する電子メールサーバーを実行する場合は、そのポートを開いておく必要があります。
まず、必要なプログラムをインストールする必要があります。
sudoアクセスが設定されたユーザーとして実行していると仮定すると、次のコマンドを実行できます。それらは、ポートを使用しているかパッケージを使用しているかによって異なります。
これらのユーティリティに組み込まれた特定の機能が必要でない限り、パッケージを介してインストールすることをお勧めします。より簡単で、サーバー時間とリソースが少なくて済み、直感的でユーザーフレンドリーなインターフェースを提供します。
sudo pkg install opensmtpd dovecot spamd
次のmake
コマンドは、多くのコンパイルオプションを提供します。デフォルトで問題なく動作します。何をしているのか正確に知らない限り、これらを変更しないでください。
sudo portsnap fetch update # or run portsnap fetch extract if using ports for the first time
cd /usr/ports/mail/opensmtpd
make install # Installs openSMTPd
make clean
cd /usr/ports/mail/dovecot
make install # Installs dovecot
make clean
cd /usr/ports/mail/spamd
make install # Installs spamd
make clean
次の行をに追加する必要があります/etc/rc.conf
。
pf_enable="YES"
pf_rules="/usr/local/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
obspamd_enable="YES"
obspamd_flags="-v"
obspamlogd_enable="YES"
dovecot_enable="YES"
PFを構成するには、/usr/local/etc/pf.conf
次のように作成します。
## Set public interface ##
ext_if="vtnet0"
## set and drop IP ranges on the public interface ##
martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
0.0.0.0/8, 240.0.0.0/4 }"
table <spamd> persist
table <spamd-white> persist
# Whitelisted webmail services
table <webmail> persist file "/usr/local/etc/pf.webmail.ip.conf"
## Skip loop back interface - Skip all PF processing on interface ##
set skip on lo
## Sets the interface for which PF should gather statistics such as bytes in/out and packets passed/blocked ##
set loginterface $ext_if
# Deal with attacks based on incorrect handling of packet fragments
scrub in all
# Pass spamd whitelist
pass quick log on $ext_if inet proto tcp from <spamd-white> to $ext_if port smtp \
-> 127.0.0.1 port 25
# Pass webmail servers
rdr pass quick log on $ext_if inet proto tcp from <gmail> to $ext_if port smtp \
-> 127.0.0.1 port 25
# pass submission messages.
pass quick log on $ext_if inet proto tcp from any to $ext_if port submission modulate state
# Pass unknown mail to spamd
rdr pass log on $ext_if inet proto tcp from {!<spamd-white> <spamd>} to $ext_if port smtp \
-> 127.0.0.1 port 8025
## Blocking spoofed packets
antispoof quick for $ext_if
## Set default policy ##
block return in log all
block out all
# Drop all Non-Routable Addresses
block drop in quick on $ext_if from $martians to any
block drop out quick on $ext_if from any to $martians
pass in inet proto tcp to $ext_if port ssh
# Allow Ping-Pong stuff. Be a good sysadmin
pass inet proto icmp icmp-type echoreq
# Open up imap/pop3 support
pass quick on $ext_if proto tcp from any to any port {imap, imaps, pop3, pop3s} modulate state
# Allow outgoing traffic
pass out on $ext_if proto tcp from any to any modulate state
pass out on $ext_if proto udp from any to any keep state
これは、動作するPF構成です。比較的シンプルですが、説明が必要ないくつかの癖があります。
まず、後でデバイスで使用する$ext_if
変数を定義しますvtnet0
。外部インターフェイスでドロップする必要がある無効なIPアドレスも定義します。
我々はまた、2つのテーブルを定義し、spamd
そしてspamd-white
-この2つのテーブルは、それのデフォルトの設定ではspamdによって作成されます。同様に、webmail
いくつかの主要なウェブメールプロバイダーが通過できるようにするために使用するという名前のテーブルを定義します。
テーブルを表示するには、コマンドpfctl -t tablename -T show
を使用して、テーブル内の要素を一覧表示できます。
いくつかのPFルールを設定します。ローカルインターフェースでの処理をスキップし、外部インターフェースで統計を有効にし、着信パケットをスクラブします。
次は、重要な部分の1つで、spamdまたはOpenSMTPdへのトラフィックの送信を管理します。
最初はリダイレクトルールです(ここでの構文に注意してください。FreeBSD11は古いスタイルのPF構文(OpenBSD 4.6より前)を使用しているため、構文が奇妙に見える場合があります。spamd
表にリストされている、またはspamd-white
テーブルには、我々はこれらの接続を扱うspamdをデーモンに至るまでの接続をリダイレクトする。次の3つのルールは、私たちが実際にメールを受信できるようにすることをパススルールールです。私たちは、に記載されているIPアドレスからのメッセージを通過spamd-white
し、webmail
まっすぐに至るまでのテーブルOpenSMTPd。また、送信ポート(587
)でメッセージを受け入れます。
次に、デフォルトのポリシーを設定し、SSHおよびICMPメッセージを受け入れるいくつかのハウスキーピングルールがあります。
次に、Dovecotにアクセスするために、外部インターフェイスでIMAPとPOP3を渡します。
最後に、すべての発信トラフィックを許可します。セキュリティをさらに追加したい場合は、渡すポートを制限できますが、使い捨てサーバーの場合は、すべてを渡すことは問題ありません。
PFを開始します。
sudo service pf start
ファイアウォールのセットアップが完了したので、メールサーバーの構成に進みます。
OpenSMTPdには、非常にシンプルで読みやすい設定構文があります。以下に示すように、作業構成全体は14行に収まります。
#This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
ext_if=vtnet0
# If you edit the file, you have to run "smtpctl update table aliases"
table aliases file:/etc/mail/aliases
table domains file:/etc/mail/domains
# Keys
pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"
# If you want to listen on multiple subdomains (e.g. mail.davidlenfesty) you have to add more lines
# of keys, and more lines of listeners
# Listen for local SMTP connections
listen on localhost hostname mail.example.com
# listen for filtered spamd connections
listen on lo0 port 10026
# Listen for submissions
listen on $ext_if port 587 tls-require auth pki mail.example.com tag SUBMITTED
# Accept mail from external sources.
accept from any for domain <domains> alias <aliases> deliver to maildir "~/mail"
accept for local alias <aliases> deliver to maildir "~/mail"
accept from local for any relay tls
accept tagged SUBMITTED for any relay tls
最初に、外部インターフェースと、いくつかのテーブル、エイリアス、ドメインを再度定義します。次に、メールを処理するすべてのドメインのSSLキーと証明書に進みます。
次のセクションでは、リッスンするインターフェースとポートを定義します。まず、mail.example.com
ドメインのローカルホストでローカル接続をリッスンします。次に、スパムフィルター処理されたメッセージと送信されたメッセージを外部インターフェイスでリッスンします。最後に、提出物をリッスンします。これらはポート587
で行われ、セキュリティ上の理由から、認証を要求します。
最後にaccept
設定です。domains
テーブル内のエイリアス用にテーブルで定義されているドメインのメッセージを受け入れaliases
、ホームディレクトリにmaildir
形式で配信します。次に、ローカルメールボックスのすべてのローカル接続を受け入れてメッセージを中継し、メールを送信できるようにします。最後に、送信されたメッセージをリレーに受け入れます。提出ポートに認証を必要としない場合、これはセキュリティ上の大きな危険になります。これにより、誰でも私たちのサーバーをスパムリレーとして使用できます。
FreeBSDには、デフォルトのエイリアスファイル/etc/mail/aliases
が次の形式で付属しています。
vuser1: user1
vuser2: user1
vuser3: user1
vuser4: user2
これは、さまざまなメールボックス、およびこれらの定義されたメールボックスに送信されたメッセージを転送する場所を定義します。ユーザーをローカルシステムユーザーまたは転送先の外部メールボックスとして定義できます。デフォルトのFreeBSDファイルは非常にわかりやすいので、参照用に参照できます。
FreeBSDはデフォルトのドメインファイルを提供しませんが、これは信じられないほど簡単です:
# Domains
example.com
mail.example.com
smtp.example.com
これは、新しい行でリッスンする各ドメインのプレーンテキストファイルです。#
記号でコメントできます。このファイルは単純に存在するので、使用する構成の行を減らすことができます。
メールサーバーとの通信をセキュリティで保護するには、自己署名証明書と署名済み証明書の2つの方法があります。証明書に自己署名することは確かに可能ですが、Let's Encryptなどのサービスは無料で非常に使いやすい署名を提供します。
まず、certbotプログラムをインストールする必要があります。
sudo pkg install py-certbot
または、ポートを使用してインストールすることもできます。
cd /usr/ports/security/py-certbot
make install
make clean
次に、証明書を取得する80
には、外部インターフェイスのポートを開いていることを確認する必要があります。のフィルタリングルールのどこかに次の行を追加します/usr/local/etc/pf.conf
。
pass quick on $ext_if from any to any port http
次に、実行pfctl -f /usr/local/etc/pf.conf
してルールセットをリロードします。
次に、証明書を取得する任意のドメインに対してコマンドを実行できます。
certbot certonly --standalone -d mail.example.com
certbot renew
証明書の有効期限が切れないように、crontabエントリを6か月に1回実行するように設定することをお勧めします。
次に、関連するすべてのドメインに対して、正しいキーファイルを指すように行を変更できます。
pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"
証券を編集します。
sudo chmod 700 /usr/local/etc/letsencrypt/archive/mail.example.com/*
注: 元のキーファイルごとにこれを行う必要があります。そうしないと、OpenSMTPdはそれらを開きません。
これでサービスを開始できます:
sudo service smtpd start
ここでは、OpenBSDのspamdデーモンを使用して、インターネットから取得するスパムの量を減らしています。基本的に、これは、さまざまなスパム送信元からの不良として知られているIPからのメッセージと、(デフォルトでは)着信接続の「グレーリスト」をフィルタリングします。Spamdはまた、ブラックリストとグレーリストの接続を「途切れさせる」ことでスパマーのタイミングを無駄にしようとします。つまり、応答を数秒にわたって分散させ、クライアントを通常よりも長く開いたままにします。
接続のグレイリストは、ブラックリストまたはホワイトリストにない新しいIPアドレスが接続するときに行われます。新しいアドレスが接続されると、spamdは無害なエラーメッセージを含むメッセージをドロップし、一時的なリストに追加します。スパマーは配信されたメッセージに対して支払いを受けるので、エラーで再試行することはありませんが、正当なサービスは比較的すぐに再試行します。
マウントするには、次のコマンドを実行する必要がありますfdescfs
。
mount -t fdescfs null /dev/fd
次に、この行を/etc/fstab
次の行に追加する必要があります。
fdescfs /dev/fd fdescfs rw 0 0
デフォルトの設定ファイル(にあります/usr/local/etc/spamd/spamd.conf.sample
)は正常に動作します。これを編集して、新しいソースを追加したり、使用するソースを変更したりできます。
sudo cp /usr/local/etc/spamd/spamd.conf.sample /usr/local/etc/spamd/spamd.conf
次のようにしてサービスを開始できます。
sudo service obspamd start
この時点でspamdが設定されています。
グレイリストアプローチの1つの問題は、大規模なメールサービスが多くの異なるスプールの1つを介してメールを送信することが多く、毎回同じサーバーがメッセージを送信することが保証されないことです。これに対する1つの解決策は、さまざまなWebメールサービスで使用されるIP範囲をホワイトリストに登録することです。これは、PF構成でWebメールテーブルが使用されるものです。スパマーが使用するIPアドレスを含める場合、この戦略は逆効果になる可能性がありますが、テーブルに入力する範囲に注意している限り問題ありません。
電子メール範囲をwebmailテーブルに追加するには、次のコマンドを実行します。
pfctl -t webmail -T add 192.0.2.0/24
ユーザーがSSH経由でログインせずにメールにアクセスできるようにするには、IMAPやPOP3をサポートするMDAが必要です。非常に人気のあるプログラムは、かなり単純な構成と強力な機能を備えたDovecotです。
デフォルトの設定をコピーできます:
cd /usr/local/etc/dovecot
cp -R example-config/* ./
構成は、かなりの数の異なるファイルで構成されています。設定とdovecotのデフォルトの違いを確認するには、以下のコマンドを実行します。
sudo doveconf -n
以下は、単純で機能する構成です。
# 2.3.2.1 (0719df592): /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 11.2-RELEASE amd64
# Hostname: mail.example.com
hostname = mail.example.com
mail_location = maildir:~/mail
namespace inbox {
inbox = yes
location =
mailbox Archive {
auto = create
special_use = \Archive
}
mailbox Archives {
auto = create
special_use = \Archive
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = create
autoexpunge = 60 days
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Mail" {
auto = no
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox Spam {
auto = no
special_use = \Junk
}
mailbox Trash {
auto = no
autoexpunge = 90 days
special_use = \Trash
}
prefix =
separator = /
}
passdb {
args = imap
driver = pam
}
ssl = required
ssl_cert = </usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_dh = </usr/local/etc/dovecot/dh.pem
ssl_key = </usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
userdb {
driver = passwd
}
ほとんどの設定ファイルは conf.d
重要なものはあり10-auth.conf
、10-mail.conf
と10-ssl.conf
。
で使用するさまざまなメールボックスを設定できます15-mailboxes.conf
。上記の表示は多くのシステムに適した構成ですが、使用距離は異なる場合があります。できるだけ多くのクライアントでこれをいじることをお勧めします。
ほとんどのデフォルト設定は適切です。認証にシステムユーザーを使用する場合は、を編集する必要があります10-auth.conf
。
次の行のコメントを外します。
!include auth-system.conf.ext
Diffie-Hellmanパラメータを生成する必要があります。
sudo nohup openssl dhparam -out /usr/local/etc/dovecot/dh.pem
注: 実行には長い時間がかかります。予想よりもはるかに長い。
これでDovecotを起動できます:
sudo service dovecot start
この時点で、機能的で安全な、比較的スパムのないメールサーバーが完成しました。
ここからさらに検討する必要があるのは、SpamAssassinを使用してヒューリスティックにスパムを取り除くことと、信頼できるソースから出されたスパムのブラックリストを見つけることです。
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の未来は、日々成長を続けています。