ちょっと事情があって,今日はメールサーバを構築していた.
事情の方はそのうち解決策を見つけるか,諦めたときに話すとして,こちらの話をしてしまおう.
まず,いろいろと面倒くさいことが多いのでDNSは登録してしまった方がいい.
俺は今回,Dynamic DO!.jpに登録した.もちろん無料ですよ.
このへんの親切なDynamic DNSというのはDynamicDNS Client Tool「DiCE」とかを使うと非常に楽に設定できたりする.
でも,そんなものに頼るのはWindowsだけでいいので,Linuxを使うなら自前でなんとかしよう.
なんのことはない,IPアドレスが変わったときに,
wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード'
という動作ができればいいだけのことである.
まぁそのへんは何かスクリプトを作るといいです.
俺はこのへんを参考にしました.
http://240net.ddo.jp/linux/linuxddns.html
さて,このくらいは訳はない.
本題のメールサーバに入ろう.
まず,UbuntuはDebian系なので,インストール時点でSendmailが入っている可能性がある.
Senmdailでも構わないのだが,今回はPostfixを使う.
$ sudo apt-get install postfix postfix-pcre
Postfixをインストールしたら,設定をしなければならない.
インストール画面で多少聞かれるのだが,いずれにしろmain.cfを書き換える必要がある.
その前にPostfixをランレベル3,5で自動起動するように設定する.
(0:シャットダウン,1:シングルユーザーモード,2:ネットワークなしのマルチユーザーモード,3:通常のマルチユーザーモード,4:未使用,5:グラフィカルログインによるマルチユーザーモード,6:システムの再起動)
#chkconfig --level 35 postfix on
#chkconfig --list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
次にrootのエイリアスを設定する.
エイリアスとはつまり別名のこと.たとえば管理者rootでメールを送信するとroot@example.comとかになっちゃうのだけれど,これがイヤなので,user@example.comで送りたい.
そんなときに使うといいかもしれないエイリアス.
/etc/aliasesを開いて,
root:hoge
と追記しておけば問題ないです.編集し終えたらnewaliasesコマンドを実行して,エイリアスデータベースを作成します.
# /usr/bin/newaliases
そしていよいよPostfixの設定.
/etc/postfix/main.cfを編集します.
最低限のメール送信に大事なところは以下の通り.
(DO!.jpはmxレコードに対応しており,ホスト名とドメイン名は同じhoge.ddo.jpで大丈夫)
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, $mydomain
mynetworks = 172.16.50.0/27
(ここはLAN内の自分のネットワークを指定する.)
alias_map = hash:/etc/aliases
alias_databese = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
(ここは受信側の設定なので今はやらなくてもいい)
設定が終了したらPostfixを再起動しましょう.
# /etc/init.d/postfix reload
ログは/var/log/mail.logにあります.
動作確認,そしてメールを送信してみましょう.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
これで入力待ちになればOK.
送信してみましょう.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
ehlo hoge.ddo.jp // 自分のホスト名を入力します
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XVERP
250 8BITMIME
mail from:
250 Ok
rcpt to:
250 Ok
data // メール本文の始まりを宣言
354 End data with
subject: test // メールのタイトル
test message // メールの本文
. // ドットはメール本文の終了を意味します
250 Ok: queued as 922A5142893
quit // セッションを終了します.
221 Bye
Connection closed by foreign host.
これでメールが送れる,予定でした.
さぁ,ここからが本題です.こんなどこのHPにでも乗っているような手引きでメールが送れるのであればここには書かない.
つまり,当然のごとく遅れていなかったのです.
宛先をgmail,yahooメール,ezweb.ne.jpと変更してみましたが,すべてダメでした.
というわけで/var/log/mail.logを読みます.
Nov 17 17:47:46 h3poteto postfix/smtp[14678]: connect to alt1.gmail-smtp-in.l.google.com[74.125.142.26]:25: No route to host
主にこんなエラーが出ています.
つながってないことは誰でもわかりますが,これが噂のOP25Bというやつです.
主にこれはスパムメール対策としてISPで行われていることが多い.
つまり,俺で言うならniftyですね.
一応確認してみましょう.
$ nslookup -type=mx gmail.com
として,表示される文字列の中に「alt1.gmail-smtp-in.l.google.com has AAAA address 2607:f8b0:400e:c03::1b」などという文字があるはずです.
$ telnet alt1.gmail-smtp-in.l.google.com 25
としてみましょう.これで,gmailのサーバに25番ポートからSMTP接続しているのですが,
Trying 74.125.142.27...
telnet: Unable to connect to remote host: No route to host
このように出てくれば,25番ポートからの接続がISPのおかげでできないということになります.
最近こういうプロバイダは多いのでしょうか,よくわかりませんが…….
さて,対策をします.
自分が契約しているISP側で規制されているので,そこを無理やりこじ開けることはできません.
なので,自分のサーバから送信するメールを,一度自分のISPをリレーして送るようにします.
まず,自分が契約しているISP(俺で言うならnifty)の契約情報書類を探してきて,ユーザ名,パスワード,送信メールサーバの情報を見つけます.
ユーザ名: hoge001
パスワード: mypasswd
送信メールサーバ: smtp@example.ne.jp
/etc/postfix/main.cfを再び編集します.
# OP25B対策の設定
relayhost = [smtp.example.ne.jp]:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/isppasswd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter =
次に/etc/postfix/master.cfを開き,編集します.
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
これらのコメントアウトを外します.
main.cfにて記述した,password_mapsのハッシュの場所に,パスワードファイルを作ります.
$ sudo emacs /etc/postfix/isppasswd
存在しないと思うので新規に作成します.中身は以下のように書いておけば大丈夫.
smtp.example.ne.jp hoge001:mypasswd
これを有効にします.
# postmap /etc/postfix/isppasswd
インストールしてない場合は,saslのライブラリをインストールします.
$ sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
これで設定は終わりです.
postfixを再起動して,メールが送信できるか確認してみると,無事できました.
# /etc/init.d/postfix reload
.....
いやいや,後半は手こずりました.
25番ポートに制限があるってことはすぐにわかったんですけど,リレーしないと送れないってことなんですね.
参考サイト:
http://linux.kororo.jp/cont/server/postfix.php
http://dqn.sakusakutto.jp/2010/07/postfixoutbound-port-25-blocki.html