Postfixでメールサーバ(smtp authも)
Postfixとは
PostfixとはMTA(Message Transfer Agent)である。メール転送サーバですね。SMTPサーバですので、受信するには別途POP3やIMAPサーバが必要になります。MTAとしてはsendmailが一番有名なのですが、設定が呪文のように書かないといけません。かなり細かく設定ができるので利点もあるのですが、自宅サーバではそこまで必要ないと思います。それに比べPostfixは文献も多く、何より設定が簡単です。ほぼ、デフォルトである程度セキュリティも確保されて稼動します。自宅サーバには向いてるかなと思います。
やりたいこと
メールサーバでやりたいことです。
- ISPがOutbound 25 BlockingをしているのでISPのメールサーバにリレーさせる
- LAN内部からは無条件で送信
- 外部からのメール送信は認証をかける(smtp auth)
- もちろんスパム中継サーバにさせない
- スパム対策をしたい
- ウイルススキャンをしたい
- アカウント管理を簡単に
インストール
いつもので。認証でsmtp authを使用するのでpostfix-tlsとSASLが必要になります。
インストの最中でいろいろ聞かれて、答えた内容で設定ファイルが作成されます。
#apt-get install postfix-tls sasl2-bin libsasl2-modules
Postfixの設定
/etc/postfix/main.cf
以下にPostfixの設定内容です。場所は「/etc/postfix/main.cf」。「/usr/share/postfix/main.cf.dist」に詳細なコメントが書かれたサンプルがある。
#新着メールの通知無効 biff = no #smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) #ドメインの追加を無効user@host.$mydomain) append_dot_mydomain = no #インターフェイスの設定 inet_interfaces = all #エイリアスの設定 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #ホスト名、ドメインの設定 myhostname = nai.homelinux.net mydomain = nai.homelinux.net myorigin = /etc/mailname #許可するドメインとか mydestination = nai.homelinux.net, localhost.$mydomain, $mydomain, localhost #許可するネットワーク mynetworks = 192.168.0.0/24, 127.0.0.0/8 #受信者の検索テーブル local_recipient_maps =$alias_maps #拡張アドレスの区切り文字 recipient_delimiter = + #MailDir形式にする home_mailbox = Maildir/ #デフォルトのリレーホストを指定します。 relayhost = [xxx.xxx.xxx.xxx] ### smtp auth の設定 ### #smtp authを有効 smtpd_sasl_auth_enable = yes #ローカルrealmと一緒にする。realmってなに??訳は"領域"らしい smtpd_sasl_local_domain = $myhostname #anonymousログイン禁止 smtpd_sasl_security_options = noanonymous ##メール許可条件 #-$mynetworks #-認証済 #-自サーバ宛 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_auth_destination, reject #OutlookExpress対応 broken_sasl_auth_clients = yes
受信者リストについて
local_recipient_mapsで設定ができる受信者検索テーブルだが、デフォルトだとproxy:unix:passwd.byname $alias_mapsになっている。このままだと、システムユーザのホームディレクトリにまでメールが届けられてします。対処としてはエイリアスに全てのユーザをrootに置き換えるようにするか、特定のテーブルをlocal_recipient_mapsに定義してやることになる。別ページで解説するバーチャルドメインを使用するというのも手だ。エイリアスに書くなら以下にようにする。
daemon:root bin:root sys:root sync:root games:root man:root lp:root mail:root news:root uucp:root proxy:root
設定したらエイリアスデータベースの作成&更新をする必要がある。
#postalias /etc/aliases #newaliases
smtp suthの設定
上でmain.cfの設定は済んでいているが、smtp authの認証はUNIXパスワードと別管理の方がよろしいのでその設定などをする。
/etc/postfix/sasl/smtpd.conf
認証方法などを記述する。今回はsaslのパスワードファイルを使うことにする。
pwcheck_method:auxprop mech_list: cram-md5 digest-md5
pwcheck_methodには以下を指定できる。
| 値 | 内容 |
|---|---|
| saslauthd | saslデーモンを使用する。PAM、DB、SQLなどで認証させたい時に使用。だが、plainかlogin認証のみになる。 |
| auxprop | saslのパスワードファイル(/etc/sasldb2)を使用する。mech_listで指定しないとplainとか優先されてしまう。 |
| pwcheck | Unixのパスワードデータベースを使用する。 |
mech_listについて認証方法を指定する。main.cfにあるsmtpd_sasl_security_optionsの値に注意。mech_listでplainを選択し、smtpd_sasl_security_optionsで無効にすると矛盾が発生する。
| 値 | 内容 |
|---|---|
| login | 平文。ユーザ名NULLユーザ名NULLパスワードをBase64でエンコードしただけ。 |
| plain | loginと同じ平文パスワード。詳しくわからないけど、ちゃんとした仕様が決まってないみたいだが一番使われているらしい |
| cram-md5 | サーバから送られてくる任意の文字から、パスワードを組み合わせダイジェストを作成し送信する。パスワード自体が流れない為セキュリティが確保される。 |
| digest-md5 | cram-md5を強化した形。辞書攻撃や選択平分攻撃などの対策がなされている |
※cram-md5,digest-md5を指定すると強制的にpwcheckはauxpropになってしまう。
パスワードファイルの作成
/etc/sasldb2にパスワードファイルが作成される
#saslpasswd2 -u nai.homelinux.net user
パスワードの確認
こんなん出ればok
#sasldblistusers2 user@nai.homelinux.net: userPassword
てすとー
telnetを使用して稼動確認。太文字部分を入力、赤文字が出ればok
$telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 220 ESMTP Postfix EHLO localhost 250-nai.homelinux.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250 8BITMIME QUIT 221 Bye Connection closed by foreign host.