CentOS5でPPTPサーバを作る

出先から自宅のファイルサーバや開発用のWebサーバにアクセスしたい。これらのサーバはセキュリティのためプライベートIP(192.168.x.x)からしかアクセスできないように設定してある。これまではsshのポートフォワーディングを使ったり、一時的にファイアウォールでSource NATしたり、都度サーバ側のiptablesを特定のグローバルIPからの通信を許可するように変更したりして対応してきたが、いい加減面倒になったのでVPNを張れるようにする。

出先で使うクライアントはWindows XPなので、VPNのプロトコルとして標準で使えるPPTPを使用することにする。CentOS用のpptpdはSourceForgeで入手できる。

[root@ml115 ~]# wget http://poptop.sourceforge.net/yum/beta/packages/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
[root@ml115 ~]# rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm

また、PPPのパッケージも必要だ。こちらはyumでインストールできる。

[root@ml115 ~]# yum install ppp

まず/etc/pptpd.confを設定する。変更するのはとりあえずlocalipとremoteipだけでいい。localipはpptpサーバのアドレスで、remoteipはクライアントに付与するアドレス。ルーティングの問題を避けるため、localipはサーバのLAN側アドレスとして、remoteipも同じセグメントから重複しないように取るのが安全。

localip 192.168.0.254
remoteip 192.168.0.100

次に/etc/ppp/options.pptpdを設定する。nameがpptpdになっていることを確認し、ms-dnsにpptpでクライアント側に通知するDNSサーバを指定する。

name pptpd
ms-dns 192.168.0.10
ms-dns 192.168.0.11

最後に/etc/ppp/chap-secretsにパスワードを設定する。1つ目がユーザ名、2つ目は先ほどpptpd.confで設定したnameと同じもの、3つ目がパスワード、4つ目は認証を許可するIPアドレスだが、インターネットから接続する場合はワイルドカード*になる。なお実際のパスワードはもっとセキュアなものを使う。

# client        server   secret                  IP addresses
pptpuser      pptpd    pptppassword        *

ここまででpptpdの設定は終了。service pptpd startでデーモンを開始し、必要であればchkconfig pptpd onで自動起動するようにする。

次に、PPTPサーバのiptablesでPPTPの通信と、PPTPで張られたVPN上の通信を許可する。すこしザルな気もするが、最低限必要な設定は以下のとおり。/etc/sysconfig/iptablesの*filterのところに追記して、service iptables restartで反映させる。

-A RH-Firewall-1-INPUT -i ppp0 -p tcp --dport 1723 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp1 -j ACCEPT

1行目の1723/tcpはPPTPで使用するプロトコル。ppp0インターフェースは当サイトの環境ではBフレッツのPPPoEを使っているため、インターネット側インターフェースはppp0となる。2行目のppp1インターフェースはPPTPクライアントが接続されるインターフェース。ひとつ気になるのが何かの間違いでPPPoEがppp1としてつながった場合、この設定ではインターネットにサーバをフル公開してしまうなぁ。

ここまでの設定でCentOSサーバはPPTPサーバとして動作する。クライアントのWindows XP側の設定は以下のとおり。

  1. コントロールパネルのネットワーク接続をクリック。
  2. 新しい接続ウィザードを起動
  3. 職場のネットワークへ接続する(0)を選択して次へをクリック
  4. 仮想プライベートネットワーク接続(V)を選択して次へをクリック
  5. 会社名に適当な名前を入力して次へをクリック
  6. 最初の接続にダイアルしないを接続して次へをクリック(常時接続環境がないのであればダイヤル先を選択)
  7. ホスト名またはIPアドレスにPPTPサーバを入力して次へをクリック
  8. 自分のみを選択して次へをクリック
  9. 完了をクリックして終了
  10. 接続ダイアログボックスが出たら、ユーザ名とパスワードを入力して接続をクリック

なお、この手順のとおりでPPTPサーバを構築すると、セキュリティ上非常に脆弱になる。/etc/ppp/chap-secretsに記述したユーザ名とパスワードを総当り攻撃で破られると、プライベートネットワークにフルアクセスを許してしまうからだ。当面は、PPTPで繋ぎたいときにはsshでログインして、都度iptablesで許可をすることにしよう。あれ?これじゃ当初の目的を果たしていないかも。