今日は、Linux上のメールサーバーについて話しましょう。 サーバー、広く使用されているインターネットプロトコル(SMTP)、およびPOPやIMAPなどの他のプロトコルの構成方法について説明します。 その結果、あなたはメールを操作するための完全なシステムの所有者になります。
LinuxのSMTPサーバーから始めましょう
SMTPサーバー
SMTP(Simple Mail Transfer Protocol)は、コンピューター間でメールを送信するためのルールを定義しますが、メッセージを保存または視覚化するためのルールを規制しません。 これはシステムに依存しないプロトコルです。つまり、メールの送信者と受信者は異なるOSを持つことができます。
SMTPは、サーバーが標準のSMTPポートであるポート25を使用して別のサーバーにプレーンASCIIテキストを送信できることのみを要求します。
現在、ほとんどのLinuxディストリビューションには、 sendmailとpostfixの 2つの最も一般的なSMTP実装が組み込まれています 。
Sendmailは、多くのLinuxディストリビューションで使用されている人気のあるオープンソースメールサーバーです。 そのマイナスには、やや複雑なアーキテクチャと不十分なレベルの保護が含まれます。
Postfixはもう少し高度なシステムであり、このメールサーバーを開発する際、セキュリティの問題に特別な注意が払われました。
メールサービスのコンポーネント
典型的な郵便サービスは、3つの主要なコンポーネントで構成されています。
メールクライアント (メールエージェント(メールユーザーエージェント、MUA)とも呼ばれます)。 ユーザーと対話するのは彼と一緒です。たとえば、これらはThunderbirdまたはMicrosoft Outlookの電子メールクライアントです。 ユーザーはメールを読んだりメールを書いたりすることができます。
メールサーバーまたはメールトランスポートエージェント(MTA)。 このコンポーネントは、SendmailとPostfixなどのシステム間で電子メールを移動する役割を果たします。
メール配信エージェント(MDA)。 このコンポーネントは、受信したメッセージをユーザーのメールボックスに配信します。 たとえば、これらはPostfix-maildropとProcmailです。
メールサーバーのセットアップ
サーバーを構成するために、Postfixパッケージが選択されました。 これは、ほとんどの最新のLinuxディストリビューションの標準メールサーバーであるシステム管理者の間で一般的な選択肢です。
Postfixがシステムにインストールされているかどうかを確認することから始めましょう:
$ rpm -qa | grep postfix
Postfixが見つからなかった場合、たとえば、次のコマンドを使用して、Red Hatベースのディストリビューションにインストールできます。
$ dnf -y install postfix
次に、postfixサービスを開始し、システムの起動時にその自動開始を整理します。
$ systemctl start postfix $ systemctl enable postfix
UbuntuのようなDebianベースのディストリビューションでは、Postfixは次のようにインストールできます。
$ apt-get -y install postfix
インストール中に、サーバー構成を選択するよう求められます。 使用可能な4つのオプション(設定なし、インターネットサイト、スマートホスト付きインターネット、サテライトシステム、ローカルのみ)の中から、必要なPostfixユーザーおよびグループアカウントの作成につながる設定なしを選択します。
サーバーのセットアップ
Postfixメールサーバーをインストールした後、設定する必要があります。 ほとんどの設定ファイルは/ etc / postfix /ディレクトリにあります。
メインのPostfix設定ファイルは/etc/postfix/main.cfにあります。 パラメーターは多数ありますが、最も重要なものを検討してください。
myhostname
このパラメーターは、メールシステムのホスト名を指定するために使用されます。 これは、Postfixがメールを受信するインターネット上のホスト名です。
一般的なメールサーバーのホスト名は、mail.example.comおよびsmtp.example.comです。
このパラメーターを次のように構成します。
myhostname = mail.example.com
mydomain
この設定により、サーバーが処理しているメールドメイン(example.comなど)を指定できます。
mydomain = example.com
明源
このパラメーターを使用すると、サーバーから送信されるメールで使用されるドメイン名を指定できます。 $ mydomainの値を割り当てます。
myorigin = $mydomain
設定では、変数名の前に
$
記号を追加してパラメーターを参照できます。
目的地
このパラメーターには、Postfixサーバーが受信メールの最終宛先と見なすドメインのリストが含まれます。
この場合、サーバーのホスト名とドメイン名がありますが、このパラメーターには他の名前が含まれている場合があります。
mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain
mail_spool_directory
Postfixメールサーバーは、メール配信の2つのモードを使用できます。
- ユーザーのメールボックスに直接。
- キューの中央ディレクトリでは、メールは/ var / spool / mailフォルダーに分類されますが、ここには各ユーザーのファイルがあります。
mail_spool_directory = /var/spool/mail
mynetworks
この変数は重要な設定です。 Postfixサーバーを介してメールを転送できるサーバーを指定できます。
通常、ローカルクライアントコンピューターからのメールのみが許可されます。 それ以外の場合、スパマーはサーバーに関心がある可能性があります。
mynetworksパラメーターが正しく構成されていない場合、スパマーはサーバーをメールリレーとして使用できます。 これにより、DNSブラックリスト(DNSBL)やリアルタイムブラックホールリスト(RBL)などのブラックリストのいずれかにスパム対策システムが非常に迅速に配置されます。 サーバーがそのようなリストに入るとすぐに、それを使用して送信された手紙を受け取ることができる人はほとんどいません。
この設定は次のようになります。
mynetworks = 127.0.0.0/8, 192.168.1.0/24
smtpd_banner
この変数を使用すると、クライアントが接続したときにサーバーが返す応答を設定できます。
どのメールサーバーが使用されているかを示さないように、この値を変更することをお勧めします。
inet_protocols
この変数を使用すると、接続を確立するときにPostfixが使用するIPバージョンを指定できます。
inet_protocols = ipv4
構成ファイルに加えられた変更を有効にするには、Postfixサービスを再起動する必要があります。
$ systemctl reload postfix
実際、Postfix設定ファイルにはさらに多くの設定があります。 たとえば、セキュリティレベルを管理するには、デバッグオプションとその他のパラメータを設定します。
おそらく、サーバーのセットアップ、パラメーター値の入力、間違いを犯します。 次のコマンドを使用して設定を確認できます。
$ postfix check
このツールを使用すると、エラーが発生した行を見つけて修正できます。
メッセージキューの確認
メールキューがいっぱいになることがあります。 これは、ネットワークエラーなどの多くの要因、またはメールの送信を遅らせる可能性のある何らかの理由によって発生する可能性があります。
メッセージキューを確認するには、次のコマンドを使用します。
$ mailq
彼女はキューにメッセージを表示します。 キューがいっぱいで、メッセージの送信に数時間かかる場合、次のコマンドを使用してメッセージの送信プロセスを開始できます。
$ postfix flush
キューを確認すると、空になっているはずです。
メールサーバーのテスト
Postfixでサーバーをセットアップしたら、テストする必要があります。 テストの最初の手順は、 mailxやmailなどのローカルメールクライアントを使用することです(これはmailxへのシンボリックリンクです)。
同じサーバーでアドレスが提供されている人にメールを送信してみてください。それが機能する場合は、別のアドレスにメールを送信してください。
$ echo "This is message body" | mailx -s "This is Subject" -r "likegeeks<likegeeks@example.com>" -a /path/to/attachment someone@example.com
次に、別のサーバーから送信された電子メールを受け入れます。
問題が発生した場合は、ログを確認してください。 Red Hatベースのディストリビューションでは、必要なものは/ var / log / maillogにあります。 Debianディストリビューションでは、必要なファイルは次の場所にあります: /var/log/mail.log 、またはrsyslogd設定で指定されたパス。 ここでは、必要に応じて、Linuxでのロギングに関する資料、およびrsyslogdの構成方法を説明します。
それでも問題が解決しない場合は、DNS設定を確認して、 Linuxネットワークコマンドを使用してMXレコードを確認してください。
スパムの戦い
スパムメッセージからスパムを検出するための多くのソリューションがあります-スパム。 最も優れているのは、オープンソースのSpamAssassinプロジェクトです。
次のようにインストールできます。
$ dnf -y install spamassassin
次に、対応するサービスを開始し、スタートアップに追加する必要があります。
$ systemctl start spamassassin $ systemctl enable spamassassin
SpamAssassinをインストールしたら、/ etc / mail / spamassassin / local.cfファイルでその設定を確認します 。
SpamAssassinは、さまざまなスクリプトを使用した通信の調査結果に基づいて、通常の文字とスパムを区別できます。 チェックの結果はポイントで評価されます。
電子メールの最終グレードが高いほど、スパムである可能性が高くなります。
構成ファイルのrequired_hits 5パラメーターは、評価が5以上の場合、SpamAssassinがメッセージをスパムとしてマークすることを示します。
report_safeパラメーターの値は0、1、または2です。0に設定すると、スパムとしてマークされたメッセージは元の形式で転送されますが、ヘッダーがスパムであることを示すように変更されます。
このパラメーターが1または2に設定されている場合、SpamAssassinはレポートを生成して受信者に送信します。
値1と2の違いは、最初のケースではスパムメッセージがメッセージ/ rfc822形式でエンコードされ、2番目のケースではテキスト/プレーン形式でエンコードされることです。
一部のメールクライアントがmessage / rfc822メッセージを実行するため、テキスト/プレーンエンコーディングの方が安全です。これは、特定の条件下でクライアントコンピューターのウイルス感染を引き起こす可能性があります。
SpamAssassinをインストールして構成したら、Postfixと統合する必要があります。 これを行う最も簡単な方法は、おそらくprocmailを使用することです。
ファイル/ etc / procmailrcを作成し、次を追加します。
:0 hbfw | /usr/bin/spamc
次に、Postfix構成ファイル- /etc/postfix/main.cfを編集し、 mailbox_commandパラメーターを次のように設定します。
mailbox_command = /usr/bin/procmail
最後に、PostfixおよびSpamAssassinサービスを再起動します。
$ systemctl restart postfix $ systemctl restart spamassassin
SpamAssassinは必ずしもスパムを認識するとは限らないため、不要な文字でメールボックスを埋めることになります。
幸いなことに、メッセージは、Postfixメールサーバーに到達する前に、リアルタイムブラックホールリスト(RBL)を使用してフィルタリングできます。 これにより、メールサーバーの負荷が軽減され、クリーンな状態が維持されます。
Postfix構成ファイル/etc/postfix/main.cfを開き、 smtpd_recipient_restrictionsパラメーターを変更し、他のパラメーターを次のように構成します。
strict_rfc821_envelopes = yes relay_domains_reject_code = 554 unknown_address_reject_code = 554 unknown_client_reject_code = 554 unknown_hostname_reject_code = 554 unknown_local_recipient_reject_code = 554 unknown_relay_recipient_reject_code = 554 unverified_recipient_reject_code = 554 smtpd_recipient_restrictions = reject_invalid_hostname, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client dsn.rfc-ignorant.org, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client list.dsbl.org, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net, permit
次に、Postfixサーバーを再起動します。
$ systemctl restart postfix
上記のブラックリストは最も頻繁に使用されますが、他の同様のサーバーを見つけることができます。
SMTP接続のセキュリティ
TLS経由でSMTPトラフィックを転送して、仲介者を介した攻撃から保護することをお勧めします。
最初に、 opensslコマンドを使用して証明書とキーを生成する必要があります。
$ openssl genrsa -des3 -out mail.key $ openssl req -new -key mail.key -out mail.csr $ cp mail.key mail.key.original $ openssl rsa -in mail.key.original -out mail_secure.key $ openssl x509 -req -days 365 -in mail.csr -signkey mail_secure.key -out mail_secure.crt $ cp mail_secure.crt /etc/postfix/ $ cp mail_secure.key /etc/postfix/
次に、Postfix設定ファイル/etc/postfix/main.cfに次を追加する必要があります。
smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/mail_secure.crt smtpd_tls_key_file = /etc/postfix/mail_secure.key smtp_tls_security_level = may
最後に、Postfixサービスを再起動する必要があります。
$ systemctl restart postfix
ここで、クライアントをサーバーに接続するときに、TLSを選択する必要があります。 ここで、設定を変更した後に最初にメールを送信すると、証明書が署名されていないため、警告が表示されます。
POP3およびIMAPの基本
したがって、SMTPを介して電子メールを送受信するプロセスを確立しましたが、本格的なメールサービスの組織はこれで終わりではありません。 以下の状況を考慮してください。
- ユーザーは、インターネットに接続せずにメールを表示するには、メールのローカルコピーが必要です。
- ユーザーのメールクライアントはmboxファイル形式をサポートしていません。 これは、mailxやmuttなどの多くのコンソールメールクライアントが読み取れる単純なテキスト形式です。
- ユーザーは常に高速接続を使用してサーバーのファイルシステムにアクセスしたり、mboxファイルを操作したりすることはできません。そのため、ネットワークに接続せずにローカルコピーを作成して作業する必要があります。
- セキュリティ制限は、ユーザーが電子メールゲートウェイに直接アクセスできないことを示します。たとえば、メッセージキューのパブリックフォルダーを操作することは許可されていません。
これらすべての特殊なケースを考慮するために、他のプロトコルが作成されています。 電子メールにアクセスするためのプロトコルとして説明できます。
最も広く使用されているのは、POP(Post Office Protocol)とIMAP(Internet Message Access Protocol)の2つの一般的なメールアクセスプロトコルです。
POPは非常に単純なアイデアに基づいています。 Linuxの中央メールサーバーは常にインターネットに接続されており、すべてのユーザーの手紙を受信して保存します。 ユーザーがPOPプロトコルを使用してサーバーに接続し、レターをダウンロードするまで、受信したレターはすべてサーバー上のキューに残ります。
ユーザーが電子メールを送信する場合、メールクライアントは通常、SMTPを介して中央サーバーを介して送信します。
SMTPサーバーとPOPサーバーは問題なく同じマシンで実行できることに注意してください。 これは最近の一般的な慣行です。
キャッシュされたコピーのみがクライアントに保存されているサーバーにユーザーメールのソースコピーを保存するなど、POP機能は使用できません。 これにより、IMAPが開発されました。
IMAPを使用すると、サーバーはメールへの3つのアクセスモードをサポートします。
- オンラインモードは、メールサーバー上のファイルシステムへの直接アクセスに似ています。
- オフラインモードは、クライアントがメールを受信した後にネットワークから切断したときのPOPの動作に似ています。 このモードでは、サーバーは通常レターのコピーを保存しません。
- オフラインモードでは、ユーザーはレターのキャッシュコピーを保存でき、サーバーはこれらのレターのコピーも保存します。
IMAPとPOPにはさまざまな実装がありますが、この分野ではDovecotサーバーが非常に人気があり、両方のプロトコルで作業できます。
POP3、POP3S、IMAP、およびIMAPSサーバーは、それぞれポート110、995、143、および993でリッスンします。
Dovecotをインストールする
ほとんどのLinuxディストリビューションにはDovecotがプリインストールされていますが、自分でインストールすることもできます。 Red Hatベースのシステムでは、これは次のように行われます。
$ dnf -y install dovecot
Debianベースのシステムでは、IMAPとPOP3は2つの異なるパッケージで提供されます。
$ apt-get -y install dovecot-imapd dovecot-pop3d
ここで、IMAPおよびPOP3 over SSL / TLSを使用するための自己署名証明書を作成するよう求められます。 はいと答え、プロンプトが表示されたら、システムのホスト名を入力します。
次に、対応するサービスを開始し、スタートアップに追加できます。
$ systemctl start dovecot $ systemctl enable dovecot
Dovecotを構成する
メインのDovecot設定ファイルは/etc/dovecot/dovecot.confにあります。 一部のLinuxディストリビューションでは、このファイルは/etc/dovecot/conf.d/フォルダーにあり、includeディレクティブは構成ファイルを含めるために使用されます。
Dovecotの設定に使用されるオプションの一部を以下に示します。
プロトコル :サポートするプロトコル。
protocols = imap pop3 lmtp
ここで、 lmtpはLocal Mail Transfer Protocolの略です。 listen :サーバーがリッスンするIPアドレス。
listen = *, ::
ここで、アスタリスクはすべてのIPv4インターフェイスを意味し、二重コロンはすべてのIPv6インターフェイスを意味します。
userdb :認証用のユーザーデータベース。
userdb { driver = pam }
mail_location :これは/etc/dovecot/conf.d/10-mail.confファイルのエントリです。 次のようになります。
mail_location = mbox:~/mail:INBOX=/var/mail/%u
Dovecotには標準のSSL証明書とキーファイルが付属しており、これらは/etc/dovecot/conf.d/10-ssl.confファイルで使用されます。
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem
ユーザーがDovecotに接続しようとすると、証明書が署名されていないため、サーバーは警告を表示します。 必要に応じて、適切な証明機関で署名付き証明書を購入できます。
ファイアウォールでDovecotサーバーのポートを忘れずに開いてください。
$ iptables -A INPUT -p tcp --dport 110 -j ACCEPT $ iptables -A INPUT -p tcp --dport 995 -j ACCEPT $ iptables -A INPUT -p tcp --dport 143 -j ACCEPT $ iptables -A INPUT -p tcp --dport 993 -j ACCEPT
また、SMTPポートを忘れないでください。
$ iptables -A INPUT -p tcp --dport 25 -j ACCEPT
次に、ルールを保存します。 Linuxでiptablesを操作する機能を更新する場合は、 この資料をご覧ください。
または、firewalldを使用している場合、これを行うことができます。
$ firewall-cmd --permanent --add-port=110/tcp --add-port=995 $ firewall-cmd --permanent --add-port=143/tcp --add-port=993 $ firewall-cmd --reload
また、何か問題が発生した場合は、ログファイル/ var / log / messages 、 / var / log / maillog、および/var/log/mail.logを確認してください 。
まとめ
これで、Linuxサーバーでメールサービスを構成できます。 ご覧のとおり、それほど時間はかかりません。 もちろん、ここで説明するパッケージ(Postfixなど)には多くの設定がありますが、ここで説明する一連のアクションをマスターし、基本を理解した場合、必要なものはすべてドキュメントから簡単に見つけることができます。
親愛なる読者! Linuxでメールサーバーをどのように構成しますか?