差分表示


SSHを使って自宅サーバからのPOPによるメール受信を安全に使う
//parent=メールサーバ
&include_htmlfile(comp/popoverssh,http://kamoland.com/comp/);
*POP over SSHでセキュアにメール受信

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

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

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

,前提,バージョン
,OS,RedHat 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アドレスから接続されることになるので,
それを利用して制限をかける.

&ltitle(/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の再起動を行わせることにしました.

&ltitle(/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をインストールする.

&link(PortForwarder Home,http://www.fuji-climb.org/pf/JP/);からダウンロードしてくる.


***configurationファイル
 kamolandの場合,こんな具合.

&ltitle(pf.conf);
--(
Host KamoLand
    HostName kamoland.com
    LocalForward 10110 kamoland.com:110
--)

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

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


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

それで起動すると,

#img(http://kamoland.com/comp/image/pppoverssh1.png,l)
#img(,c)

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

----


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

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

#img(http://kamoland.com/comp/image/pppoverssh2.png,l)
#img(,c)

#img(http://kamoland.com/comp/image/pppoverssh3.png,l)
#img(,c)

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

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

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


© 2019 KMIソフトウェア