LoginSignup
6
4

More than 5 years have passed since last update.

iPhoneのL2TP/IPsec接続でセキュアなwebサイトを作る on SoftLayer

Last updated at Posted at 2014-12-15

本エントリは2枚目 SoftLayer Advent Calendar 2014の15日目向けに書いてみました!
※本当はvSphere on SoftLayerをやりたかったんですが、ベアメタルサーバを使う必要があるため、課金が厳しい的判断で今回は諦めました……。

やりたいこと

スマホ(iPhone)で特定のユーザしか見えないサイトを作りたい!
しかも、ユーザー以外にはサイトの存在さえ知られたくない!

前提

IP-VPNでつなげた状態でないと閲覧できないWebサーバを作成します。
VPNで使用するのは、お手軽に出来そうなL2TP/IPSec。
※iPhoneで使用可能なVPNプロトコルについては、下記のアップルの資料を参照しています。
iOS:サポートしている VPN プロトコル

構成イメージ

kousei.png

iPhoneユーザはまずVPN接続を張った上で、Webサーバのアドレス(ローカルアドレス)を叩くことでサイトを閲覧できます。

VPN-GW

タイプ:VirtualServer,Vyatta
OS:Vyatta Community Edition for VSI6.6.0
スペック:1CPU/1GBmemory

Webサーバ

タイプ:VirtualServer
OS:CentOS6.0-64 LAMP for VSI
スペック:1CPU/1GBmemory

設定

SoftLayer側設定

VPN-GW

eth0がPrivateネットワーク側インターフェース
eth1がPublicネットワーク側インターフェース

NAT設定
vyatta@VPN-GW01# show nat
    source {
        rule 1 {
         outbound-interface eth0
         source {
             address 0.0.0.0/0
         }
         translation {
             address [VPN-GWのPrivate IP]
         }
     }
 }
VPN設定
vyatta@VPN-GW01# show vpn 
 ipsec {
     ipsec-interfaces {
         interface eth1
     }
     nat-networks {
         allowed-network 0.0.0.0/0 {
         }
     }
     nat-traversal enable
 }
 l2tp {
     remote-access {
         authentication {
             local-users {
                 username test {
                     password [パスワード]
                 }
             }
             mode local
         }
         client-ip-pool {
             start [プライベート側ネットワークの割り当てIPの開始アドレス]
             stop [プライベート側ネットワークの割り当てIPの終了アドレス]
         }
         ipsec-settings {
             authentication {
                 mode pre-shared-secret
                 pre-shared-secret [プリシェアードキー]
             }
         }
         outside-address [VPN-GWのPublic IP]
 }
 }

Webサーバ

ドキュメントルールに接続確認用のページを作るだけです(その他は、SoftLayerでデプロイされるLAMP構成はデフォルト)

※ドキュメントルートは

#more /etc/httpd/conf/httpd.conf

で確認すると

DocumentRoot "/var/www/html"

という記載があったので、/var/www/htmlの配下にindex.htmlというファイルを作成しました。

iPhone側設定

今回はiPhone6
iOS:8.1.2
を使用しています。


1.[設定]>[一般]に移動します。
IMG_4173.PNG


2.[一般]>[VPN]に移動します。
IMG_4174.PNG


3.[VPN]で[VPN構成を追加]を選択します。
IMG_4175.PNG


4.下記のように設定します。
タイプ:L2TP
説明:任意
サーバ:VPN-GWのIPアドレス(またはDNS名)
アカウント:VPN-GW側で作った接続ユーザ名
パスワード:VPN-GW側で作った接続ユーザ用のパスワード
シークレット:VPN-GW側で設定したプリシェアードキー
IMG_4172.PNG


5.[VPN設定を保存]して完了!

接続テスト

iPhoneで接続確認

上記で作ったVPN設定を選択して(※)、接続ボタンをONにします。
※複数設定がある場合は明示的に選択する必要があります。選択された設定にはチェックマークが付いてます。
IMG_4177.PNG

Webサーバのローカルアドレスに接続してみます。
私が作ったハイセンスなページが見えているので接続成功です!
画面左上でVPN接続が成功していることもわかります。
IMG_4179.PNG

VPN-GW側で確認

VPN-GW側で接続されているか確認します。

vyatta@VPN-GW01:~$ show vpn ipsec state
src [VPN-GWのPublic IP] dst [iPhoneのグローバルIP]
        proto esp spi 0x02dacb1b reqid 16504 mode transport
        〜中略〜
src [iPhoneのグローバルIP] dst [VPN-GWのPublic IP]
        proto esp spi 0xced962b6 reqid 16504 mode transport
        replay-window 32 
        〜中略〜

アクセス中であることがわかります。

本構成のメリット

  • VPN-GWをVitualServerで作っているのでお安い!
  • iPhoneに余計なアプリを入れる必要がない!
  • わかりやすいようにWebにしたけど、他のアプリケーション通信もたぶん可能だよ!

課題

vyattaがSPOFになっているので冗長化をするにはどうすればよいか?
 vyattaをVRRPで冗長化?
 別DCに同じ構成を作る?

6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4