Linuxメールサーバー

電子通信の送受信、スパムとの戦い、クライアントとのやり取りが可能なメールサーバーをセットアップする方法 実際、すべてが非常に簡単です。



今日は、Linux上のメールサーバーについて話しましょう。 サーバー、広く使用されているインターネットプロトコル(SMTP)、およびPOPやIMAPなどの他のプロトコルの構成方法について説明します。 その結果、あなたはメールを操作するための完全なシステムの所有者になります。







LinuxのSMTPサーバーから始めましょう



SMTPサーバー



SMTP(Simple Mail Transfer Protocol)は、コンピューター間でメールを送信するためのルールを定義しますが、メッセージを保存または視覚化するためのルールを規制しません。 これはシステムに依存しないプロトコルです。つまり、メールの送信者と受信者は異なるOSを持つことができます。



SMTPは、サーバーが標準のSMTPポートであるポート25を使用して別のサーバーにプレーンASCIIテキストを送信できることのみを要求します。



現在、ほとんどのLinuxディストリビューションには、 sendmailpostfixの 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つのモードを使用できます。





 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でサーバーをセットアップしたら、テストする必要があります。 テストの最初の手順は、 mailxmailなどのローカルメールクライアントを使用することです(これは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を介して電子メールを送受信するプロセスを確立しましたが、本格的なメールサービスの組織はこれで終わりではありません。 以下の状況を考慮してください。





これらすべての特殊なケースを考慮するために、他のプロトコルが作成されています。 電子メールにアクセスするためのプロトコルとして説明できます。



最も広く使用されているのは、POP(Post Office Protocol)とIMAP(Internet Message Access Protocol)の2つの一般的なメールアクセスプロトコルです。



POPは非常に単純なアイデアに基づいています。 Linuxの中央メールサーバーは常にインターネットに接続されており、すべてのユーザーの手紙を受信して​​保存します。 ユーザーがPOPプロトコルを使用してサーバーに接続し、レターをダウンロードするまで、受信したレターはすべてサーバー上のキューに残ります。



ユーザーが電子メールを送信する場合、メールクライアントは通常、SMTPを介して中央サーバーを介して送信します。



SMTPサーバーとPOPサーバーは問題なく同じマシンで実行できることに注意してください。 これは最近の一般的な慣行です。



キャッシュされたコピーのみがクライアントに保存されているサーバーにユーザーメールのソースコピーを保存するなど、POP機能は使用できません。 これにより、IMAPが開発されました。



IMAPを使用すると、サーバーはメールへの3つのアクセスモードをサポートします。





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でメールサーバーをどのように構成しますか?



All Articles