
| Postfixを使用する |
MTAにはsendmailでは無く、設定が容易でセキュリティにも配慮され、sendmailと互換性のあるPostfixを
使用したいと思います。MTAとは、メールを送信したり受け取ったりするプログラムになります。
また、ここではセキュリティ強化の為、SMTP Authを使用する設定を行っていきます。本来、メールを
送信する際は、認証という機能がありませんでした。なので、設定によってはいくらでもそのメールサーバを
使用してメールを送信できてしまいます。スパムメールを送る際の踏み台にされてしまうということです。
このようにならない為にも、送信する時にも認証を施し、第三者中継を拒否し、正当なユーザだけが
メールの送信をできるように設定します。
このページで紹介していく事は、Postfixの設定方法、SMTP Authの設定方法、Postfixを稼動させるに
あたっての注意点などを取り上げていきたいと思います。
| Postfixの設定 |
Fedora Coreの場合、デフォルトではsendmailが使用されるようになっていて、動いてる状態になっています。
またインストールの仕方によっては、Postfixが入ってないこともあるので、先ずはPostfixの導入と
sendmailの停止をしたいと思います。
| # rpm -q postfix ←Postfixがインストールされてるかの確認 # yum -y install postfix ←上記でインストールされていない場合 # service sendmail stop ←sendmailの停止 # chkconfig sendmail off ←自動起動しないように設定 |
次に通常使用するMTAをPostfixに変更します。
| # alternatives --config mta There are 2 programs which provide 'mta'. Selection Command ----------------------------------------------- 1 /usr/sbin/sendmail.postfix *+ 2 /usr/sbin/sendmail.sendmail Enter to keep the current selection[+], or type selection number: 1 ←1を入力してEnter # chkconfig --level 345 postfix on ←自動起動の設定 # service postfix start |
最初のalternativesコマンドで通常使用するMTAの設定を行います。ここで1の欄にpostfixが有り、
初期状態では、sendmailを使用するようになっていますので、1を入力してEnterを押し、Postfixに
変更しました。変更すると「+」がPostfixに付くようになります。続いて、Postfixが自動起動するように
設定をし、サービスをとりあえず開始しました。またsendmailを使用する予定が無いのなら
アンインストールしてしまってもいいです。
| # yum -y remove sendmail |
次にPostfixの設定をしていきたいと思います。設定ファイルは、/etc/postfix/main.cfになります。
| # vi /etc/postfix/main.cf #myhostname = virtual.domain.tld ←68行目 ↓ myhostname = linux.chibi.name ←FQDNで指定、コメント解除 #mydomain = domain.tld ←75行目 ↓ mydomain = chibi.name ←ドメイン名を指定、コメント解除 #myorigin = $mydomain ←91行目 ↓ myorigin = $mydomain ←コメント解除 #inet_interfaces = all ←105行目 ↓ inet_interfaces = all ←コメント解除 inet_interfaces = localhost ←108行目 ↓ #inet_interfaces = localhost ←コメントアウト mydestination = $myhostname, localhost.$mydomain #mydestination = $myhostname, localhost.$mydomain $mydomain ←156、157行目 ↓ #mydestination = $myhostname, localhost.$mydomain mydestination = $myhostname, localhost.$mydomain $mydomain ←コメントアウトを逆に #mynetworks_style = subnet ←243行目 ↓ mynetworks_style = subnet ←コメント解除 #mynetworks = 168.100.189.0/28, 127.0.0.0/8 ←257行目 ↓ mynetworks = 192.168.1.0/24, 127.0.0.0/8 ←ネットワークアドレスの指定、コメント解除 #relay_domains = $mydestination ←289行目 ↓ relay_domains = $mydestination ←コメント解除 (行数については、場合によって異なるので、あくまでも目安です) |
先ずは基本的な設定をしました。少し説明を入れると、myhostnameはFQDNの指定です。
これは、「ホスト名.ドメイン名」という形で指定します。ホスト名は、hostnameコマンドで確認できます。
myoriginは、メールアドレスの「@以降」に付加する値の設定です。
inet_interfaces = allは、リモートからのメールの配送を受け付けるようにする設定です。
mydestinationは、届けられたメールが自分あてかどうかを判断するためのものです。
mynetworksでは、ネットワークアドレスとローカルアドレスの指定を行います。ネットワークアドレスは
自分の環境に合わせてください。なお、mynetworks_style、mynetworks、relay_domainsは第三者中継を
防ぐ為の大事な設定です。
続きの設定に入ります。またセキュリティ強化の為、SMTP Authを利用するのでそれに伴い記述を
追加します。
| #home_mailbox = Maildir/ ←414行目 ↓ home_mailbox = Maildir/ ←コメント解除 // 以下を追加で記述 smtpd_sasl_auth_enable = yes ←SMTP Authの有効 smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, \ reject_unauth_destination broken_sasl_auth_clients = yes message_size_limit = 2048000 ←メッセージのサイズの上限を設定 smtpd_banner = $myhostname ESMTP ←バナーをESMTPで返す smtpd_helo_required = yes ←HELOを必要とする disable_vrfy_command = yes ←VRFYコマンドの拒否 |
mailboxはMaildir形式にしました。他にもmbox形式がありますが、こちらの場合はメールスプール
ディレクトリに複数のメッセージがひとまとめにされ、ユーザ単位で保存される形になります。
最悪の場合、/var/spool/mailディレクトリを含むパーティションに空き容量が無くなってしまうと
全ユーザへのメール配送がストップしてしまう可能性があります。これに対し、Maildir形式では
メールは各ユーザのホームディレクトリ内にあるMairdirディレクトリに、1メッセージ=1ファイルの
形式で保存されます。mboxのような心配はありませんので、Mairdir形式を利用することを
お勧めします。もしmbox形式で行く場合には、mailbox_size_limitとmessage_size_limitで
制限をかけたほうがいいと思います。前者はメールボックスの最大容量で、後者はメールサイズの
最大サイズになります。
メールは受信する時は認証があるのに、送信をする時には認証というものがありません。
これは設定によっては、誰でもこのSMTPサーバを利用してメールが送信できてしまうことになります。
先の設定で不正中継対策はしていますが、ここでもSMTP Authを利用して、更に不正中継の可能性を
排除します。また、SMTP Authはメールクライアントソフトが対応している必要があります。
最近ではかなり対応してきているので問題は無いと思います。
broken_sasl_auth_clients = yesという記述は、Outlookなどでログイン認証をする場合に必要な
記述になります。
その他の部分では、disable_vrfy_command = yesでVRFYコマンドを禁止にしています。
またsmtpd_bannerで、メールサーバの情報を与えないようにしてあります。smtpd_helo_required = yesで
HELOが必要なようにしています。第三者中継する為に使用するソフトでは、HELOコマンドを送信しないものが
多いので、このHELOを必須にしておけば、それだけ第三者中継の可能性を排除することができます。
allow_percent_hackは中継を指定してのメッセージ送信を許可するかどうか。
ただし、送信者が中継を指定してメッセージを送信できるかどうかは、smtpd_client_restrictions
で中継できる送信者の記述をする必要が有り、デフォルトの設定では中継はできないので、
yesのままで実害は無しです。
最後に、main.cfを変更してますので、Postfixを再起動しておきます。
| # service postfix restart |
| Cyrus SASL (SMTP Auth)の設定 |
それでは、具体的なSMTP Authの設定をしていきたいと思います。
なお、ユーザについてはシステムアカウントのユーザをそのまま使用します。
| # vi /usr/lib/sasl2/smtpd.conf pwcheck_method: saslauthd mech_list: plain login |
↑のような記述をしてください。この場合は、Linuxのシステムアカウントに基づいて認証を行う設定に
なります。この場合、/etc/passwdと/etc/shadowを基に認証が行われますので、特別な設定は必要無く、
ユーザを作成すればいいだけです。
次にCyrus SASLの起動です。
| # service saslauthd start # chkconfig --level 345 saslauthd on |
| 注意事項+補足 |
メールの不正中継の拒否がちゃんとできているか確認したい場合は、こちらですることができます。
Address to test:にIPアドレスを入力し、「Test for relay」というボタンを押せばスタートです。
最後にAll tests performed, no relays acceptedという表示されれば、ちゃんと拒否できてることになります。
SMTP Authにはシステムアカウントに基づく設定にしましたので、メールソフトでSMTP Authの設定を
する場合は、そのままアカウントのパスワードを入力してください。また新規にメール用のユーザを
作成する場合は、useradd -s /sbin/nologin ユーザ名 や、useradd -s /bin/false ユーザ名
として、システムへのログインはできないようにしたほうがいいです。
Postfixはsendmailと互換性があります。
よく無償で配布されているCGIでsendmailを使用して、メールを送信できるものがありますが、
これはPostfixで可能です。また、sendmail自体を削除してしまってもこれまた可能です。
sendmailを削除してしまった後でも、which sendmailとコマンドを打てば、sendmailのプログラムの場所が
出てきますので、これを使ってCGIのメール送信機能などを利用することができます。
| # vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT // 編集後 # service iptables restart |
最終更新 : 06/12/2005