SSHを使って自宅サーバでSMTPによるメール送信を安全に使う SMTP over SSHでセキュアにメール送信自宅サーバでメールサーバを立てたので,外からメール送信するときに,そいつを使いたい. しかしなにも考えずにメールサーバのSMTPをインターネットに対して自由に公開すると, 文句なしにSPAMの踏み台と化してしまうため,非常によろしくない. 外部からの接続でも,俺が接続した場合だけ,自由にSMTPを使えるようにする必要がある. (Postfixでいうところの,「"trusted" SMTP clients」とみなす) このために,SMTP接続元を認証する必要があるのですが,その方法にはこんなのがあります.
検討すると,
ということで,SMTP over SSHでやることにしました.将来的にはSMTP認証もやってみたい気はするが, 大変そうだわい.
方針SSHポートフォワードを使って,インターネット上のクライアントPCからメールサーバに接続した場合, Postfixのsmtpdから見た接続元IPアドレスは,メールサーバ(正確にはSSHサーバが動作しているマシン) のIPアドレスとなる. このIPアドレスを,「信頼できるクライアント」としてPostfixが認識するようにする. しかしプロバイダの契約が非固定IPアドレスの場合,このIPアドレスはまた例によってADSL接続するたびに変動するのであった. 少し工夫が必要.
メールサーバ側の設定ADSL接続時にプロバイダから取得したIPアドレスを,どっかファイルに記録しておいて, それをPostfixに参照させるようにしてみた.
1.とりあえず空ファイルで作っておく
# touch /etc/ppp/ppp-adrs
2.ADSL接続時:ファイルにIPアドレスを記録/etc/ppp/ip-up.local に追加 echo $IPLOCAL > /etc/ppp/ppp-adrs /usr/sbin/postfix reload
3.切断時:ファイルをクリア/etc/ppp/ip-down.local に追加 echo '' > /etc/ppp/ppp-adrs でも可能性として,切断後,ADSLに再接続(新アドレス取得)してから上記ip-up.localの「postfix reload」が実行されるまでの隙に, 旧のアドレスを割り当てられた別のマシンがSMTPアクセスしてきた場合,そいつを信頼できるクライアントとみなしてしまう, ということがないとは言えないか. 一応あった方がいいな.
4.Postfixの設定Postfixの設定を以下のように変更して,さっきのファイルに記録されたIPアドレスを 信頼できるクライアントとして認識させる./etc/postfix/main.cf を一部変更 - 太字が変更箇所 myhostname = mail.kamoland.com myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain $mydomain mynetworks = 192.168.0.0/24, 127.0.0.0/8, /etc/ppp/ppp-adrs alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mail_spool_directory = /var/mail
クライアント側の設定PortForwarderの入手については,「POP over SSHでセキュアにメール受信」を参照.
configurationファイルpf.conf - 太字の行を今回追加Host KamoLand HostName kamoland.com LocalForward 10110 kamoland.com:110 LocalForward 10025 kamoland.com:25 クライアント機自身(localhost)の10025ポートを,メールサーバのSMTP(25)ポートへ転送させます. 10025に深い意味はありません.
メーラー設定要は,SMTPサーバの設定を,localhostのポート10025に変更するだけだ.これでひとまずOK.
雑感メール周りがずいぶんSSH Port Forwardingに依存してしまったので,SSHのセキュリティホールには注意が必要だな.これ(SMTP over SSH)とPbSを組み合わせれば,さらに安全性を高めることはできるわな. つまり,この方法における/etc/ppp/ppp-adrsファイルが常時存在するのではなく, POP認証が通ってから一定時間の間しか存在させないようにすると. しかしそれだけだったら,PbSを本格的に導入しなくても,自分でPerlとかでスクリプトを書いても実現できそうだな. /var/log/maillogを常駐監視して,ファイルを作ったり消したりすればいいだけだから. 今後の課題だ. |