トップ   編集 編集(GUI) 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

PPTPサーバ

Last-modified: 2015-01-25 (日) 02:57:05 (1491d)
Top / PPTPサーバ

手軽なVPN環境PPTP

自宅のサーバはOpenVPNを仕込んでは居るが、どうしてもOpenVPNが使用出来ない場合に自宅サーバのネットワークに入る為の手段として、手軽なPPTPサーバを構築する事にした。

PPTPの利点は、Windows側で標準対応している事だ。インターネットに接続さえされていれば簡単にログインする事が出来る。

無論、下の情報は自己責任という事で。(CentOS4・CentOS5)

PPTPインストール

兎にも角にも、まずはPPTPdをインストールする。

CentOS4とCentOS5では方法がやや異なるので、それぞれ記載する。

■CentOS4の場合

・必要なRPMパッケージをダウンロードする。

# wget http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/dkms-2.0.17.5-2.el4.rf.noarch.rpm
# wget http://heanet.dl.sourceforge.net/sourceforge/poptop/ppp-2.4.3-5.rhel4.i386.rpm
# wget http://downloads.sourceforge.net/poptop/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm

・PPTPパッケージを作成

# wget http://downloads.sourceforge.net/project/poptop/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz
# rpmbuild -ta --target i686 pptpd-1.3.4.tar.gz
# mv /usr/src/redhat/RPMS/i686/pptpd-* .

 pptpd-1.3.4-1.i686.rpm が作成される

・標準のpppパッケージを削除する

# rpm -e ppp

・パッケージをインストールする。

# rpm -ivh ppp-2.4.3-5.rhel4.i386.rpm
# rpm -ivh dkms-2.0.17.5-2.el4.rf.noarch.rpm
# rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
# rpm -ivh pptpd-1.3.4-1.i686.rpm

■CentOS5の場合

CentOS5の場合はkernel_ppp_mppeパッケージは不要だ。理由は標準でkernelに組み込まれている為。

これは現在自分が使用しているCentOS5対応のOpenVZカーネルでも変わらない。

・PPTP本体をダウンロードする。

# wget http://downloads.sourceforge.net/project/poptop/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz

CentOS5の場合、pppのバージョンが2.4.4の為、このままパッケージ化してインストールすると下記のようなエラーが発生する。

Sep 29 01:00:01 app pppd[10978]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.4

これはバージョンの差異によるエラーな為、予め2.4.4で使用出来るようspacファイルを編集する必要がある。

# tar zxvf pptpd-1.3.4.tar.gz
# vi pptpd-1.3.4/pptpd.spac

57行目付近を下記のように編集する

(echo '#undef VERSION'; echo '#define VERSION "2.4.3"') >> plugins/patchlevel.h
      ↓
(echo '#undef VERSION'; echo '#define VERSION "2.4.4"') >> plugins/patchlevel.h

編集後再度アーカイブする

# tar zcvf pptpd-1.3.4.tar.gz pptpd-1.3.4

・パッケージを作成

# rpmbuild -ta --target i686 pptpd-1.3.4.tar.gz
# mv /usr/src/redhat/RPMS/i686/pptpd-* .

 CentOS5に調整された pptpd-1.3.4-1.i686.rpm が作成される

・パッケージをインストールする。

# yum install ppp dkms -y
# rpm -ivh pptpd-1.3.4-1.i686.rpm

PPTPの設定

設定ファイル1:etc/pptpd.conf

vi /etc/pptpd.conf

最終行に下記を入力する

localip サーバのIP
remoteip PPTPクライアントに割り当てるスコープ
例:
localip 192.168.0.254
remoteip 192.168.0.100-110

設定ファイル2:/etc/ppp/options.pptpd

# vi /etc/ppp/options.pptpd

18行目付近にあるname項目を編集する

name
↓
name 任意の文字列(ホスト名等)
例:
name pptpserver

設定ファイル3:/etc/ppp/chap-secrets

# vi /etc/ppp/chap-secrets

ユーザ名とパスワードを設定する

ユーザID options.pptpdに設定したname項目の文字列 "パスワード" *
例:
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
userid          pptpserver    "password"        *

その他ファイル

# vi /etc/sysctl.conf

ip_forward項目を1に変更する

net.ipv4.ip_forward = 1

sysctl.confを適用する

# sysctl -p

iptablesを設定している場合、以下のように解放しておく必要がある。

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -i ppp+ -j ACCEPT
iptables -A FORWARD -i ppp+ -j ACCEPT

PPTP起動

サービスを起動させる。設定内容に問題が無ければ素直に起動するはず。

# /etc/init.d/pptpd start
# chkconfig pptpd on

Security向上の打開策案

そのまま運用していると、パスワードアタックを受けた場合に突破される危険性がある。

そこで5分毎にパスワードを変更して、疑似的なワンタイムパスワードな環境を作る。

以下のような簡単なPerlスクリプトを作成した。

# vi /usr/local/bin/pppmkpasswd.pl

内容は下記の通り

#!/usr/bin/perl
 
$id = "userid"; ←PPTPのユーザID
$domain = "pptpserver"; ←options.pptpdに設定したname項目の文字列
 
$pass = `mkpasswd -l 20 -s 0 -d 5 -c 5 -C 5`;
$pass =~ s/\n//;
 
$line = "$id\t$domain\t\"$pass\"\t\*";
 
print "$line\n";

これをrootユーザ権限のCronへ設定する。

# chmod 700 /usr/local/bin/pppmkpasswd.pl
# crontab -e

以下のように設定をする。

*/5 * * * * /usr/local/bin/pppmkpasswd.pl > /etc/ppp/chap-secrets

これで5分毎にパスワードが変化するようになった。

内容は以下のように、パスワードの部分がランダムな20桁になる。

# cat /etc/ppp/chap-secrets
userid  pptpserver "qHultb7LngZ57UTe3jz0"  *

これをWebブラウザ上で閲覧可能にするよう、CGIの作成を行った。

これはms-chap-v2を放置しておくより、購入した証明書のSSL上に置いておく方がまだマシだと判断した為。

もちろんSSLに加え、BASIC認証のあるページに配置するのが最低条件となる。

# vi ppp.cgi

内容は下記の通り。

#!/usr/bin/perl
 
$chap = `cat /etc/ppp/chap-secrets`;
 
@data = split(/\t/,$chap);
 
$data[2] =~ s/\"//g;
 
print "Content-type: text/html \n\n";
print "<html><body>\n";
print "pptp change password<br>\n";
print "<input type=\"text\" size=\"50\" value=\"$data[2]\" readonly>";
print "</body></html>\n";

CGIの所有者を変更し、実行権限を付ける。

# chown apache:apache ppp.cgi
# chmod 755 ppp.cgi

後はPPTP接続毎に、SSL+BASIC認証の設定されているWebページでパスワードの確認を行う。

少々手間だが、標準のそのままの状態よりかは安全になるかと思われる。

個人利用程度であれば、これで十分と判断した。これで準備が整った。

PPTPクライアントの設定

次はWindows側のクライアント設定を行う。

Windows側のPPTP設定方法は省略とさせて頂く。

参考サイト

CentOS で VPN 構築

本家PPTPd poptop