それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

自宅サバのpostfix のメール送信を外部サーバーに任せる(SSHでvpsから送信)

postfix via ssh でメール送信を安全にする

VPN経由でメール送信をすると大変。VPNの管理がめんどくさい。

だったらHTTPS/SSHで配送すればいい。

SSHpostfix配送する。

単純に、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 の中で curlHTTPS経由でメールを送る。 サーバー側に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 で配送ができないので、困る。

だったらレンサバ・VPSAmazon AWS経由で送信すればいい。それだけ。

OB25Bがある?だったらレイヤを変えて送信すればいい。25を使わず、SSHHTTPSでメールを配送すればいいだけである。

VPN接続してレイヤを合わせるのは、維持管理がめんどくさいので、単純にコマンドをパイプで繋いだらUNIXらしくていいじゃないか。

GoogleGMAILがxoauth 対応しないとめんどくさいので、1台だけXOAUTHサーバーを作っておいて、そこへSSHでメール送信すればいいわけである。

関連資料