SSHを使って自宅サーバからのPOPによるメール受信を安全に使う

POP over SSHでセキュアにメール受信

 自宅サーバでメールサーバを立てたので,外からPOPでメール受信したい.

しかしなにも考えずにPOPで接続すると,IDパスワード,メール内容が生でインターネット上を流れるので, よろしくない.

SSHのポートフォワード機能を使うことで,暗号通信にしてしまおう.

前提バージョン
OSRedHat Linux 7.1J (Kernel 2.4.18-27.7.x)
接続環境rp-pppoe-2.6-5 と ppp-2.4.0-2 によるADSL常時接続
POP3サーバimap-2001a-1.71.0 のipop3
SSHサーバopenssh-3.1p1-5
SSHポートフォワーダPortForwarder 1.1.1 (Windowsバイナリ版)


セキュリティまわりの設定

 インターネットから直接POP3のポート(TCP110)に接続することは,禁止する.

つまり,SSH経由でしかメールを受信できないようにします.

iptables

 TCP110ポートは,インターネット(ppp0)に対して開けない. まぁ自分でサーバを公開しようという人なら,当然そういう設定にしているでしょう.

これにより,iptablesが正しく動作している限り,ssh経由でしか接続されないことが保証されるはず...

xinetd

 しかし,脆弱性が毎日のように発見されるご時世.iptablesのトラブルに備えてさらなる防御を考える.

今回使ったpop3のサーバー(imap-2001のipop3)は,普通にrpmからインストールするとxinetd経由で起動するようになっていました. xinetd経由の場合,xinetdの設定で結構細かく防御できるぞ.

SSHポートフォワードを使う場合,ipop3へは必ずサーバ自身のglobalアドレスから接続されることになるので, それを利用して制限をかける.

/etc/xinetd.d/ipop3 を編集

#        bind                    = 192.168.0.254  # can not apply
        only_from               = 192.168.0.0/24
#        disable                 = true

bindを設定したかったんでですが,それをやると残念ながら接続できなくなりました.

そこでonly_fromを使って接続元を限定してやるんですが, サーバ自身のglobalアドレスは,固定IPアドレスでない限り,ADSLにつなぎにいくごとに変動します.

そのため,ADSL接続時の実行スクリプトで,取得したglobalアドレスを反映したonly_from行の編集と, xinetdの再起動を行わせることにしました.

/etc/ppp/ip-up.local に追加

cp /etc/xinetd.d/ipop3 /etc/xinetd.d/ipop3.bak
sed -e "s/only_from.*$/only_from = 192.168.0.0\/24 $IPLOCAL/g" /etc/xinetd.d/ipop3.bak >/etc/xinetd.d/ipop3
/sbin/service xinetd restart

sedを使って/etc/xinetd.d/ipop3の内容を更新し,xinetdをリスタートしています.何かややこしいわい.

なお,192.168.0.0/24 というのは私の宅内LANのアドレスです.宅内LANからは直接POPでつなぎたいので, 特別扱いにしています.

iptablesとxinetdの二段構え. これだけやっておけば,悪い奴にインターネットからPOP経由で変なことをやられるということは, まずないと思う.(断言はできませんが)


sshまわりの設定

 sshの話を書き出すと面倒だな.キー作成の部分だけにしときます. インストールは普通にやってください.

メールユーザ(ここでは,「admin」)に対して,sshで外から接続させるための設定を行う.

# su admin
$ cd
$ . .bash_profile
(adminでログインすれば,上3行は不要)

$ ssh-keygen -t rsa1

〜パスフレーズ入力〜

$ cd .ssh/
$ mv identity.pub authorized_keys
〜 identity をクライアント機にコピーしてくる(PortForwarderで使います) 〜

あと,セキュリティを考えてlibwrapの設定(/etc/hosts.allow,/etc/hosts.deny)は必須だし,

(/etc/ssh/)sshd_configで,

PasswordAuthentication no
PermitRootLogin no
としておくことも必要かな.ここらへんはそれぞれのポリシーで.

PortForwarderのインストール,設定

 メールの受信に使うクライアント機(WindowsXP)には,PortFowarderをインストールする.

PortForwarder Homeからダウンロードしてくる.

configurationファイル

 kamolandの場合,こんな具合.

pf.conf

Host KamoLand
    HostName kamoland.com
    LocalForward 10110 kamoland.com:110

クライアント機自身(localhost)の10110ポートを,メールサーバのPOP3(110)ポートへ転送させます.

10110に深い意味はありません.

identityファイル

sshのキー作成のところでできたidentityファイルを持ってきて,先ほど作ったpf.confと同じディレクトリに入れておく.

それで起動すると,

そして,ユーザ名(admin)とパスフレーズ(キー作成時に入力したもの)を入力すれば,接続できる.


メーラー設定

 要は,POP3サーバをlocalhostのポート10110に変更するだけなんですが.

Becky!でいうと,こんな感じです.

以上,これで自宅サーバのメールをどこからでも取得できる.めでたし.

...しかしこれだけじゃ,受信はできても「送信」ができないんだな.さて,そのうちやらねば.

→ やりました.SMTP over SSHでセキュアにメール送信

kamolandをフォローしましょう


© 2021 KMIソフトウェア