連休です

暇です

こんな時は、VPNサービスでも構築します

ということで、OCI上にVPNサーバーを構築して、VPNサービスを展開してみましょう。

ホスト通しの接続(Site to Site)ではなくて、Windows11クライアント等から、いっぱい接続されてしまうサーバーを構築します。

で、今回は、素のWindows11で、VPN接続を実現する為に、libreswanを使います。

セキュリティ強度を上げて、業務用途でも使えるぐらいにしてみたいと思います。

しっかり、クライアント管理も行って、やばい人は、Banするようにしてみました。


まず、Publicサブネットをさくっと作って下さい。

で、Ubuntu 22.04 を、Public IP 付きで、 作成しましょう。 A1.FlexでもOk

そいつのNSGは、以下です。

イングレス ソースCIDR:0.0.0.0/0 UDP  500,4500
エグレス 宛先CIDR:0.0.0.0/0 UDP  500,4500

後、VPN越しに接続が必要なとこは、エグレスを開けて下さい。

それと、イングレス TCP 22 は、開けてね。

 

まず、カーネルパラメーターです。

/etc/sysctl.d/50-libreswan.conf

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 0

 

次、必要なアプリをインストールします。

apt install libreswan iptables iptables-persistent rsyslog

 

Libreswanのコンフィグです。

サンプルでは、

サーバーIP:10.6.0.206

グローバルFQDN:vpnsv.live-on.top

クライアント払い出しIP:10.99.99.2-10.99.99.250

DNS:10.6.0.180,8.8.8.8

です。

/etc/ipsec.d/oci-ipsec.conf

conn ikev2-cp
    # The server's actual IP goes here - not elastic IPs
    left=10.6.0.206
    leftcert=vpnsv.live-on.top
    leftid=@vpnsv.live-on.top
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    leftrsasigkey=%cert
    # Clients
    right=%any
    # your addresspool to use - you might need NAT rules if providing full internet to clients
    rightaddresspool=10.99.99.2-10.99.99.250
    rightca=%same
    rightrsasigkey=%cert
    # DNS servers for clients to use
    modecfgdns=10.6.0.180,8.8.8.8
    narrowing=yes
    # recommended dpd/liveness to cleanup vanished clients
    dpddelay=30
    dpdtimeout=120
    dpdaction=clear
    ikev2=insist
    rekey=no
    # ikev2 fragmentation support requires libreswan 3.14 or newer
    fragmentation=yes
    ike=aes256-sha256-modp2048
    esp=aes256-sha256,aes256-sha1

include /etc/ipsec.d/allowed-ikev2-cp.conf

 

こっちのファイルは、許可したクライアント(CN)を記述します。 

/etc/ipsec.d/allowed-ikev2-cp.conf

conn allowed-ikev2-cp-1
    also=ikev2-cp
    rightid="CN=hogehoge.net, O=livetop"
    auto=add

conn allowed-ikev2-cp-2
    also=ikev2-cp
    rightid="CN=hogehoge2.net, O=livetop"
    auto=add

 

パーミッションを修正しないとダメ

chmod 600 /etc/ipsec.d/oci-ipsec.conf

chmod 600 /etc/ipsec.d/allowed-ikev2-cp.conf

 


こっから面倒くさい 証明書作成です

基本、パスワードは、空で良いです。

まずは、CAとサーバー証明書です。

期限は、12か月としています。

 

証明書作成
mkdir ${HOME}/certsig
certutil -N -d sql:${HOME}/certsig

 

CA証明書作成
CAの名前とかは適当なんですが、他の証明書と合わせないとダメなんで、統一しておきましょう。
certutil -S -x -n "livetop CA" -s "O=livetop,CN=livetop CA" -k rsa -g 4096 -v 12 -d sql:${HOME}/certsig -t "CT,," -2
Is this a CA certificate [y/N]? y
Enter the path length constraint, enter to skip [enter]
Is this a critical extension [y/N]? N

 

サーバー証明書
certutil -S -c "livetop CA" -n "vpnsv.live-on.top" -s "O=livetop,CN=vpnsv.live-on.top" -k rsa -g 4096 -v 12 -d sql:${HOME}/certsig -t ",," -1 -6 -8 "vpnsv.live-on.top"
Generating key.  
0
2
8
Is this a critical extension [y/N]? N
0
1
8
Is this a critical extension [y/N]? N

p12形式へエクスポート
pk12util -o l2tpsv.p12 -n "vpnsv.live-on.top" -d sql:${HOME}/certsig/
作成したp12形式証明書をpluto DBへインポートする。
ipsec import l2tpsv.p12


クライアント証明書です

こいつは、1つを共有しても良いんですが、接続してくる人を識別したいなら、1つづつ作って配布しましょうね。

サンプルでは、クライアント名(CN)を hogehoge.net としています。

 

certutil -S -c "livetop CA" -n "hogehoge.net" -s "O=livetop,CN=hogehoge.net" -k rsa -g 4096 -v 12 -d sql:${HOME}/certsig -t ",," -1 -6 -8 "hogehoge.net"
Generating key.  
0
2
8
Is this a critical extension [y/N]? N
0
1
8
Is this a critical extension [y/N]? N

p12形式へエクスポート
pk12util -o hogehoge.p12 -n "hogehoge.net" -d sql:${HOME}/certsig/

クライアント証明書 p12形式(hogehoge.p12)を Windowsにインポート(ダブルクリックで良しです)します。 自動で配置させれば良い感じのとこに収まります。但し、保存場所は、現在のユーザーでなくて、ローカルコンピューターを選択してね。

 

仕上げに、暗号強度に問題があるので、Windowsのレジストリを修正しましょうね。グループポリシーなんかで、修正させれば良いかと
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256  [DWORD 32bit] 1


最後に、firewallを設定します。

払い出した 10.99.99.2-10.99.99.250 に対して IPマスカレード設定をすることで、内部を自由に接続させてあげましょう。

いやなら、iptablesや OCIのNSG で、制限するのも有りです。

iptables -F
iptables -X

iptables -t nat -A POSTROUTING -s 10.99.99.2/24 -o enp0s6 -j MASQUERADE

保存
netfilter-persistent save


さーて、Windows11 の設定ですね。

ネットワークとインターネットのとこに、VPNがあるので選択します。

VPN接続を追加します。

サーバー名:vpnsv.live-on.top

VPNの種類:IKEv2

サインイン情報の種類:証明書

保存して、詳細オプションで、その他のVPNプロパティを修正しましょう。

セキュリティ-> 認証 -> コンピューターの証明書を使う <- 選択する。

 

これで良いかと思います。

 


基本的には、こんな感じですね。

設定変更したら、再起動しましょう。

systemctl restart ipsec

 

動作確認

ipsec status

 

ログ閲覧
journalctl -u ipsec

 

接続記録確認
cat /var/log/auth.log

 

全部やり直しは、管理してるデータベースを削除します。

systemctl stop ipsec

rm /var/lib/ipsec/nss/*.db

 

指定ユーザーの期限が切れたら、クライアント証明書を作り直して配布すれば継続します。

やばいユーザーに配布してしまったら、/etc/ipsec.d/allowed-ikev2-cp.conf から、やばいユーザー(CN)を削除すれば拒否します。

/etc/ipsec.d/allowed-ikev2-cp.conf を修正したら、systemctl restart ipsec しましょう。

 

Joomla templates by a4joomla