postfix via ssh でメール送信を安全にする
VPN経由でメール送信をすると大変。VPNの管理がめんどくさい。
SSH でpostfix配送する。
単純に、SSH起動して、SSH経由でsendmail を起動すればいい。
/etc/postfix/master.cf
master cf で sshを起動する設定を掛けばいい
master.cf にssh設定を書く
## ssh でVPSから送信する。 ssh-relay-hateml unix - n n - - pipe user=mail argv=/usr/bin/ssh -i /etc/mail/ssh-sendmail-key root@ssh.server.local -p 2222 /usr/sbin/sendmail -i $recipient
これは、次のコマンドをpostfixで呼び出すだけである。
cat sample-mail.txt | sudo -u mail ssh -i /etc/mail/ssh-sendmail-key root@ssh.server.local -p 2222 /usr/sbin/sendmail
master.cf に curl/phpスクリプトを指定する。
## https で送信する。 php-relay unix - n n - - pipe user=www-data argv=/usr/bin/php -f /takuya/stdin.php $recipient
これは、次のphpコマンドをpostfixで呼び出すだけである。
cat sample-mail.txt | sudo -u www-data /usr/bin/php -f /home/takuya/https_sendmail.php takuya@example.com
https_sendmail.php の中で curl でHTTPS経由でメールを送る。 サーバー側にphpファイルを設置しておく
https_sendmail.php は簡単にcurl を使えばいいだけですね。
<?php // 処理の概要 $ch = curl_init("https://www.example.com/index.php?key=$KEY"); curl_exec($ch); curl_close($ch);
サーバー側で、受け取ってあげればいい。 /var/www/virtualhosts/sendmail.example.com/www-data/index.php
<?php ## 処理の概要を抜粋 // 認証 if ( $key != $_POST['key] ){ exit; } // メール送信 mail( $_POST['mail']['to'], $_POST['mail']['subject'], $_POST['mail']['message'], $_POST['mail']['additional_headers '], $_POST['mail']['additional_params'], ):
どの配送を使うか決める
master.cf に複数記述した配送方式から外部向けのデフォルト送信先を変えておけばいいわけである。
/etc/postfix/main.cf
main.cf で選ぶ
default_transport = ssh-relay-hateml
transport map で決めてあげればメアド毎に配送を決められる。
HTTPS/SSHで転送すれば確実。もう、ポートスキャンやセキュリティに悩まなくて済む。
まとめ
別サーバーにSMTPの配送を任せるが、OP25B で配送ができないので、困る。
だったらレンサバ・VPSやAmazon AWS経由で送信すればいい。それだけ。
OB25Bがある?だったらレイヤを変えて送信すればいい。25を使わず、SSHやHTTPSでメールを配送すればいいだけである。
VPN接続してレイヤを合わせるのは、維持管理がめんどくさいので、単純にコマンドをパイプで繋いだらUNIXらしくていいじゃないか。
Google のGMAILがxoauth 対応しないとめんどくさいので、1台だけXOAUTHサーバーを作っておいて、そこへSSHでメール送信すればいいわけである。