プライベートLANのセキュリティー設定

CentOSで、プライベートLAN側のセキュリティー設定についてのメモ。

1.現状のゾーン設定確認

以下コマンドで確認すると、プライベートネットワークeth1は、デフォルトのpublicになっている。

# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth1

2.プライベート用のゾーン作成

プライベートネットワーク用のゾーンprivateを作成する。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/creating-a-new-zone_working-with-firewalld-zones

以下コマンドでOK。

firewall-cmd --new-zone=private --permanent

許可するサービスを追加。httpを追加の場合は以下。

firewall-cmd --permanent --zone=private --add-service=http

定義ファイル/etc/firewalld/zones/private.xmlを直接修正するでも良い。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/zone-configuration-files_working-with-firewalld-zones

以下は、ssh(※ポート変更済み)とnfsを有効とした場合。

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>private</short>
  <description>private lan</description>
  <service name="ssh-XXXX"/>
  <service name="nfs"/>
</zone>

定義を読み込む。

firewall-cmd --reload

3.ゾーンへのネットワークインターフェースの割り当て

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assigning-a-network-interface-to-a-zone_working-with-firewalld-zones

firewall-cmd --zone=private --change-interface=eth1 --permanent

警告メッセージが出るので、以下でやる方がいいかもしれないが、上記コマンドで特に問題はない。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assigning-a-zone-to-a-connection-using-nmcli_working-with-firewalld-zones

以下コマンドで、eth1に対しては、ゾーンprivateが適用されていることを確認。

# firewall-cmd --get-active-zones
public
  interfaces: eth0
private
  interfaces: eth1

Windows11タスクバーからのVPN接続

Windows11にアップデートしたら、タスクバーのWiFiマークをクリックしてもVPN接続が出てこない。以前はWiFiアクセスポイントのリストの上にVPN接続先が表示されていたのだが、これは不便。

Windows11_taskbar_wifi
Windows11のタスクバーWiFiクリック

もしかしてと、右クリックしてみたら、オプションで追加できるよう。

右クリックで、[クイック設定の編集]をクリックして、下の[+追加]をクリックして[VPN]を追加する。

Windows11_add_vpn_to_taskbar
クイックメニューVPNを追加

これで、タスクバーからVPN接続ができるようになる。

Windows11_taskbar_menu_vpn
Windows11のタスクバーWiFi(VPN追加状態)

これでマシになったといえ、以前は1)タスクバーのWiFiマークをクリックで、2)VPNの接続ができたのが、1)タスクバーのWiFiマークをクリック、2)VPNをクリック、3)VPNの接続となっている。MicroSoftは、なんでアップデートで前より使いにくくするのかな・・・

ConoHa VPS のプライベートネットワーク設定

手順は以下ページにある。

https://support.conoha.jp/v/privatenetwork/

振り当てられたIPv4アドレスを、自分で設定する必要がある。

CentOS8では、コンソールで設定する場合は、nmcliコマンドを使うのが推奨されているらしい。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/getting-started-with-system-administration_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_configuring-and-managing-network-access

マニュアルに従い、IPv4アドレスを以下のように設定した。

1)デバイスの確認

nmcli device status

デバイスeth1があるが、まだコネクションが定義されていない状態。

2)コネクションの設定

コネクション名もeth1として、アドレスは10.10.10.3の場合、以下のように設定した。

nmcli connection add con-name eth1 ifname eth1 type ethernet
nmcli connection modify eth1 ipv4.address 10.10.10.3/24
nmcli connection modify eth1 ipv4.method manual
nmcli connection modify eth1 connection.autoconnect yes

3)コネクションのDown/Up

nmcli connection down eth1
nmcli connection up eth1

デバイス状態にて、eth1もconnectedとなったことが確認できた。

4)セキュリティー設定

デフォルトではpublicの設定が適用されるが、プライベート用の設定を適用する。

NATトラバーサル機能の無効化

クラウドにSoftEtherVPNサーバーを設置して、ファイアウオールでListnerポートを開ける前にクライアントから接続できないことを確認しようとしたら、あっさり接続できてしまった。デフォルトでは、NATトラバーサル機能が有効になっているため、管理ポートへの接続できない場合には、NATトラバーサル機能で接続してしまう。

adminip.txtのIP制限だけでいいという考えもあるが、ファイアウオールによる接続制限も有効にしたいので、サーバー側のNATトラバーサル機能を無効にする。

(繋がった時の状況)

状態としては、以下。ファイアウォールはL2Tp/IPSec用の設定となっている。

  • サーバーはデフォルトで NATトラバーサル機能が有効
  • ファイアウオールで、Listner ポートは開放していない
  • サーバーのFirewallDでは、ssh,dhcpv6-client,ipsecが許可
  • ニフクラのファイアウォールではssh,udp500,4500を許可※
  • OUT側の制限は共になし

※ニフクラでは、自分で設定したもの以外にデフォルトルールが設定されている

https://cloud.nifty.com/spec/fw/default.htm

SoftEther VPNサーバー管理マネージャー で、接続先ホスト名「サーバーのホスト名」、ポート「Listnerのポート」を指定して接続すると繋がってしまう。NATトラバーサル機能で繋がっている。TCPコネクションを見ると、Listnerポートでは接続しておらず、プロセス内での接続が発生してるだけ。

# ss -np | grep vpnserver
tcp ESTAB 0 0 127.0.0.1:40000 127.0.0.1:45962 users:(("vpnserver",pid=3282,fd=81))
tcp ESTAB 0 0 127.0.0.1:45962 127.0.0.1:40000 users:(("vpnserver",pid=3282,fd=80))

接続先ホスト名「サーバーのホスト名/tcp」としてtcp接続に限定すると、期待通り接続に失敗する。

SoftEther VPN サーバー管理マネージャ

(NATトラバーサル機能について)

https://ja.softether.org/4-docs/2-howto/6.VPN_Server_Behind_NAT_or_Firewall/1.Dynamic_DNS_and_NAT_Traversal#NAT_.E3.83.88.E3.83.A9.E3.83.90.E3.83.BC.E3.82.B5.E3.83.AB.E6.A9.9F.E8.83.BD

ファイアウオールがあっても穴を作って通しちゃうという素晴らしい(というか恐ろしい)機能なので、扱いが要注意。開発者さんの以下ブログを参照。

http://d.hatena.ne.jp/softether/20121128#p2

http://d.hatena.ne.jp/softether/20121128#p7

「日本国内の 約 95.7% のファイアウォール・NAT を「外から内に」通過することができます。」とあるのが非常に興味深い。この数値はどう測ったのだろうか。

クライアントではTCP接続できないと、「/tcp」の指定が無ければNATトラバーサルで接続する仕様になっているらしい。

https://ja.softether.org/4-docs/3-kb/VPNFAQ011

(NATトラバーサルの無効化方法)

管理ポートの接続は確実に制限したいのでサーバーのNATトラバーサル機能を無効にする。サーバー停止した状態で、コンフィグファイルを編集することで、サーバー側のNATトラバーサル機能を無効にできる。

cd /usr/local/vpnserver
cp -p vpn_server.config vpn_server.config.org
vi vpn_server.config
-------------------------------
:
declare ServerConfiguration
{
:
bool DisableNatTraversal true
:
-------------------------------

再起動すると、管理ListnerのTCPポートを閉じた状態では、クライアントから接続できないことが確認できた。

SoftEther VPNでL2TP/IPSec

ConoHaのVPSサーバー(CentOS 7.6)にインストールしたSoftEther VPNでL2TP用のサーバー設定した時の作業メモ。

利用目的としては、 外で公共Wifiを使う時のセキュリティ対策と、サイト管理作業時のIPアクセス制限をVPSサーバーに限定するため。後、東京リージョンのサーバーなので、地方や海外でもradikoでJ-Waveが聴けるというメリットもある。

1.管理マネージャーからの設定

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/1

1)不要機能の無効化

管理マネージャーから以下をすべて無効にする。

  • OpenVPN / MS-SSTP
  • ダイナミックDNS ※configファイルの書き換え
  • VPN Azure

2)余分なリスナーを削除

 使わないリスナーは削除する。

3)暗号化と通信関係の設定

「使用する暗号化アルゴリズム」はデフォルトから強いものに変更。

「インターネット接続の維持機能を使用する」のチェックを外す。

4)仮想HUBの設定

「DEFAULT」があれば削除して、新たに適当な名前でデフォルト用Hub(以下、仮にHubDummy)と利用するHub(以下、仮にHubReal)を作成する。

  • 「匿名ユーザーに対してこの仮想HUBを列挙しない」にチェックを入れる。
  • 最大同時セッション数の制限を設定する

5)IPSec / L2TP 設定

「L2TP サーバー機能を有効にする(L2TP Over IPSec)」を有効にする。

「IPSec事前共通鍵」を適当に設定。

「接続時のユーザー名で仮想HUBが省略された場合に接続する仮想HUBの選択」にHubDummyを設定する。

6)仮想NATおよび仮想DHCPサーバー機能

HubRealの 「仮想Hubの管理」から「仮想NATおよび仮想DHCPサーバー機能」を開いて、

「SecureNAT機能を有効」にする。

「SecureNATの設定」で、「仮想NAT機能を使用する」と「仮想DHCPサーバー機能を使用する」にチェックを入れる。

7)ローカルブリッジ設定

新しいローカルブリッジを定義する。

以下にあるようにtapデバイスを使うようにした。

https://ja.softether.org/4-docs/1-manual/3/3.6#3.6.9_tap_.E3.83.87.E3.83.90.E3.82.A4.E3.82.B9.E3.81.AE.E4.BD.BF.E7.94.A8

仮想HUBにHubRealを選択し、「作成する種類」は「新しいtapデバイスとのブリッジ接続」を選択して、「ローカルブリッジ」を追加する。

8)ユーザーの作成

HubRealの「仮想HUBの管理」から、ユーザーを作成する。とりあえずはパスワード認証で。

2.ポート開放

使用するポートは、UDPの500と4500。

https://ja.softether.org/3-spec#SoftEther_VPN_Server_.E3.81.AE.C2.A0L2TP.2FIPsec_.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E6.A9.9F.E8.83.BD.E3.81.AE.E4.BB.95.E6.A7.98

サーバーでIPSecのポートを公開する。

firewall-cmd --permanent --add-service=ipsec
firewall-cmd --reload

3.クライアント接続

SoftEtherのサイトのチュートリアルはここ。

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide

3.1 Windows10からの接続

SoftEtherのサイトはWindows7のままなので、以下サイトが参考に。

http://www.seil.jp/doc/index.html#fn/pppac/use/pppac-client/win10_l2tp.html

ユーザー名は、「ユーザー名@HUB名」を入れる。 事前共有キーは、「IPSec事前共通鍵」のこと。

3.2 iPhone/iPadからの接続

iOS12.1.4の場合、「設定」から「VPN」で、「VPN構成を追加」で設定できる。タイプは「L2TP」にし、 アカウントは「ユーザー名@HUB名」、 シークレットに「IPSec事前共通鍵」を設定。

SoftEtherのサイトは 、古いiOSで英語版だけど参考まで。

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/2