以前の記事でPOPTOPでPPTPを導入したんですが、やはりパスワードが平文で保存されるのが不安なのと、あと実家から家へPPTP接続をしようとしたら、FTPとかの一般的な接続は全部大丈夫なのにPPTPだけが全く繋がらなくて、eo光ってPPTP駄目なのかも・・・?
という危険性があったので、PPPoverSSHでPPTP接続を試してみました。
実家の件に関しては、ウィルスバスターのファイアーウォールが原因でした
メリット( ´∀`)
ちなみに今回の方法、PPTPdを入れなくて大丈夫な上にpppdが入っている環境ならばどのディストリでもイケるハズ=CentOS5でも大丈夫という最大のメリットがあります!ヾ(゚∀゚)ノ
ちなみに、オイラは家のCentOS4.5と会社のCentOS5で試したので、RedHat系ならまず問題ないでしょう。
上の方でどれでも大丈夫と言っておいてナンですが、他のは各自で試してください。

あと、今回試す方法はSSHとPPPだけを使用するのでパッケージを入れなくて済む事ですね。
PPTPdはカーネルを弄る必要があったので、例え同環境で検証したとしても既に動いているサーバに入れるのは怖かったんですが、今回の場合は失敗してもSSHdの設定戻してVPN用のアカウントを消せば大丈夫という、素晴らしいお得感があります。

デメリット(;´Д`)
デメリットは、SSHのポートを空けないといけない事です。
PPTPなら接続してからローカルIPアドレスで繋げば良かったんですけど、今回VPNはSSHサーバを経由して接続を行うので、SSHが外部から接続出来ることが絶対条件です。
なので、TCPwrapperやIPTablesでガチガチに固めている人は、その設定変更もしないといけないので少し面倒なのと、SSHが外部から接続できてしまうので少しリスキーになってしまいます。
鍵認証+パスフレーズをしておけば、余程の事がない限りまず問題ないんですけどそれでもアタックは来ますからねぇ。

あと、今回の方法では実はパスワードが平文で保存される問題は解決していません
SSHの鍵認証を行うので、鍵を持っていなければ繋げれないんですが、接続する時のIDとパスワードはPPTPと一緒で暗号化されてません。
解説サイトではパスワードすら設定してないケースもあるんですが、これってセキュリティ的に鍵さえ手に入れば問答無用で接続できちゃうので、個人的にはチョット危険だと思っています。
セキュリティを考えるなら、鍵+平文でもいいからパスワードを設定して、パスワードを毎週変更、鍵は月1とかでコマメに変更する必要があるかもしれません。

とまぁ、前置きがかなり長くなってしまいましたが、PPTPと同じくらい便利ですよヾ(゚∀゚)ノ
サーバ管理者にも優しいっていう部分は、個人的にはかなりGOODです。
お金がある企業なら、RTXシリーズ買ってIPSecした方が、より安全で確実だとは思うんですけど、中小企業や個人事業主はそうもいきませんもんね。

もぐらプロジェクト
今回は、上記サイトのPPPoverSSHToolを使用してWindowsマシンからLinuxサーバに接続を行います。
基本的なサーバ設定例はもぐらプロジェクトに載っているのですけど、ウチの環境での構築方法を書こうと思います。
# visudo
pptp ALL = NOPASSWD: /usr/sbin/pppd
※visudoを使用して、上記を追記します。


尚、VPN用のユーザをpptpとしています。
/etc/sudoersを直接viで編集しても問題ありませんでしたが、visudoを使用するのが一般的です。
# vi /etc/ppp/pppoverssh
#!/bin/sh
/usr/bin/sudo /usr/sbin/pppd local proxyarp nocrtscts 192.168.0.200: nodetach ms-dns 192.168.0.100 nodefaultroute auth nodefaultroute name pppd
※192.168.0.200:VPNサーバアドレス
※192.168.0.100:DNSサーバアドレス

# chmod 755 /etc/ppp/pppoverssh
# vi /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
user pppd password 192.168.0.1
※接続ユーザーの設定、パスワードなしで設定する場合は「""」と設定する

# vi /etc/shells
/etc/ppp/pppoverssh

pppoversshのシェルスクリプトは、chmod +xの実行権を与えるだけでは環境によってはうまくいきません。

20071012_01.JPGVPN用ユーザーを作成する前に、SSH用の公開鍵と秘密鍵を作成します。
作成にはPuttyの中にあるputtygen.exeを使用します。

Puttyのダウンロードはこちら

(1)公開鍵、秘密鍵を「SSH-2 RSA」で作成する。

(2)「公開/秘密鍵ペアの作成」を選択して鍵を作成後、秘密鍵はパスフレーズなしで保存しておく。

(3)公開鍵は保存したものを貼り付けるとエラーが発生するので、上の「OpenSSHのauthorized keyファイルにペーストするための公開鍵」を使用する。

秘密鍵を読み込めば公開鍵はいつでも作成できるので、あえて今保存しておく必要性はありません。
今回の秘密鍵のやりかたは、SSH接続用のアカウントに設定すればそのアカウントでも鍵認証を行って、よりセキュアなサーバ構築が可能です。

その場合は、パスフレーズを必ず設定して下さい。
また、秘密鍵は第三者に渡らないように、厳重に保管しておく事。
※chap-secretsでパスワードを設定してない場合、鍵とユーザー名があれば接続できてしまうので、出来ればパスワードは設定しておく事をおすすめします。
# useradd pptp
# su - pptp
$ touch .hushlogin
$ mkdir .ssh
$ chmod 700 .ssh
$ vi .ssh/authorized_keys
※puttygenで作成した「OpenSSHのauthorized keyファイルにペーストするための公開鍵」の部分を全部貼り付ける。
$ chmod 600 .ssh/authorized_keys
$ exit
# chsh -s /etc/ppp/pppoverssh pptp
※PPTPのシェル変更


全ての設定が終わったら、接続確認を行う。
# su - pptp
※pptpユーザーに切り替える
~??#澄}!}!} }8}"}&} } } } }#}$則}%}&英}2逹'}"}(}"
上記のような、不明な文字が出てきたら正常に設定が出来ている

設定の確認後、Windowsの設定を元にVPNの接続設定を行う。
無事に接続できれば、PPTPと同じ感覚でVPNを使用する事が出来ますヾ(゚∀゚)ノ

あとは、前書いたみたいにip_forwardの設定をすれば完璧です。