UniFiスイッチ アクセスコントロール

この記事で実現すること

この記事ではホームユーザー向けにUniFiスイッチのL3レイヤおよびL2レイヤアクセスコントロール(ACL)の機能を紹介します。

UniFiスイッチの一般的な使い方

UniFiスイッチにはPro AggregationなどのL3スイッチ機能を持つものがあり、異なるサブネットへのルーティングが出来ます。もっとも個人向けのUniFiではDream MachineなどのUniFiゲートウェイを中心として複数のサブネットにルーティングするデザインが一般的です。
それに対して、CloudKey+などのゲートウェイ無しのコンソールで配下のスイッチ・AP・監視カメラを管理するスタイルで別途ホームゲートウェイに接続したり、別のセキュリティゲートウェイ(firewall)を用意するケースもあるでしょう。

Ubiqutiがお勧めするのは前者であり、UniFiゲートウェイで配下の端末やアクセスコントロールを集中管理できるのがメリットとしています。管理がとても楽なのは間違いありません。

L3ネットワーク

少し煩雑でもできるだけ用途別のトラフィックを1つのサブネットに留めておきたいというニーズはあると思います。必ずしもインターネットを利用しない端末やサーバーのバックアップなど、仮想マシンから複数の足を出してユーザーが利用するネットワーク、バックアップ専用ネットワークと使い分けたりします。こういった用途はスイッチの単位でトラフィックを閉じ込める事もできますが、ゲストや家族向けなど複数のスイッチに跨ってアクセスコントロールが必要な場合もあります。

以下は一例(私の自宅の環境)です。

  • Serverセグメントには仮想サーバー群、NASが設置してあります
  • FamilyセグメントはiOS、Windowsを中心に家族が利用する端末があります。
  • GuestセグメントはIoT、会社の端末が接続します。

これらは全てタグ有り(デフォルト1以外のタグ)のネットワークで構成されています。タグ無しのデフォルトネットワークはUniFiのCloudkeyと監視カメラ、メインの仮想マシン(ESXi)が接続されています。こういったセグメント構成は個人向けとしてはよくある形ではないかと思います。
それでGuestは当然、ServerやFamilyと繋ぐ必要はない一方で、FamilyからServerへのアクセスは必要となります。セグメントを超える場合(ルーティングする場合)はすべからくゲートウェイ(firewall)を経由するネットワークデザインも有りなんですが、macOSからNASへのバックアップ(TimeMachine)などやはり様々なデータフローがあるので、全てをゲートウェイ経由というのは少しやりすぎではないかと思うのです。そこで私の場合は、L3スイッチを効果的に使うべく、FamilyからServerへのセグメント越えはL3スイッチを使ったルーティングにしています。

L3ネットワークの作成

以下のようにコンソールのネットワークを開きます。

すでに構成されたセグメントを見るとわかるように、どのL3スイッチ上にL3ネットワークを作るかを指定します。
作り方は簡単で、New Virtual Networkをクリックし、赤枠で囲ったL3スイッチを選択し、新たなセグメントで割り当てるスイッチ自身のIPアドレス、VLAN IDを指定するだけです。

Auto-Scale Networkのチェックは外し、Host IP Addressを新しいセグメントのIPアドレスを指定します。一般的な24ビットのネットワークであれば第3オクテットの数字を10などとしてスイッチのIPを決めます。またVLAN IDもそれに合わせておいた方がわかりやすいですね。

なお、UniFiのL3スイッチはDHCP機能を持ちますので、簡易にIPv4アドレスをホストに割り当てたい場合には利用できます。但し、DHCPオプションの高度な事はできませんし、IPv6の割り当て機能もありません。

インターネットにルーティングするためのデフォルトゲートウェイの指定以外に、このようにL3スイッチ経由で特定のセグメントにルーティングするならばスタティックルーティングの設定が個々の端末に必要になります。このためにはDCHPサーバーにOption121によるスタティックルーティングの情報を登録する必要があるのですが、今のUniFi Consoleにはそれを設定する機能がありません。
そういうわけで私はスイッチのDHCPを使わず、firewallのDHCPを利用してスタティックルーティングの情報を各端末に配布しています。同様にIPv6もfirewall側で配布しています。

なお、UniFiのL3にはInter-VLANと呼ばれる、UniFi以外のゲートウェイにルーティングするための専用VLAN(4040)が存在します。L3スイッチから直接ゲートウェイの指定IPにルーティングする機能があり、これを併用すれば端末のデフォルトゲートウェイをスイッチにしてさえおけば、個別のスタティックルーティングの設定は不要になります。今回の記事ではこの説明は割愛します。

L3アクセスコントロール

さて、本題です。UniFiではL3レイヤのACLとL2レイヤのACLが可能です。L3レイヤのACLは当然L3スイッチを対象としていますが、L2の方は、USW-Flex-Miniなどの小型スイッチ以外のL2スイッチについて対応しています。

L3の方は簡単です。L3 Network Isolation (ACL)で、Source Networkから見て、接続できない(Isolate)ネットワークを指定するだけです。

ここでは、Guestから隣接するL3ネットワーク全てに接続できないという指定をしています。L3 Network IsolationからCreate Entryをクリックして作成します。

これでGuestセグメントから他のセグメントへのルーティングは出来なくなりました。

L2アクセスコントロール

今度はL2、MACアドレスレベルのACLです。今や端末のMACアドレスを指定してアクセス制御するというのは手間が大変なので実施しなくなってきています。唯一使うケースはゲートウェイを除いて他の端末とは相互にアクセスしない(Isolated)、これに尽きるのではないでしょうか。ゲストネットワークではそれを利用するニーズがあるでしょう。

元々Wi-FiのレベルではIsolationを有効にする機能はありました。たとえば飲食店向けにWi-Fiをゲストに開放し、管理用端末は有線LANとしておくことで目的は達成できます。

これは対象Wi-FiにClient Device Isolationのチェックをするだけでとても簡単に実現できていました。

しかしながら自宅でゲスト向けの有線端末を使う場合は、無線端末と有線端末とは相互にアクセスできる状況にありました。私の場合、会社の端末やIoTは私の情報資産があるネットワークと分離できていることが必須と考えていましたが、自宅のIoTと会社の端末が同一ネットワークで相互にアクセス可能なのは少し気になるところでした。

これは、UniFiゲートウェイを利用されている方はとても簡単で、前述したNetwork Switch Isolation SettingsDevice Isolation(ACL)にチェックを入れるだけで実現できます。
これでインターネットへの接続は可能な状態で同一セグメントの端末同士のアクセスが行えなくなります。

独自のfirewallなどのゲートウェイを使っている方は少し工夫が必要です。前述した方法だと、UniFiはどのMacアドレスがゲートウェイなのか理解できないため、ゲートウェイ宛のパケット(およびDHCPなどのIP割り当て)もフィルタされてしまいます。

私のように独自ゲートウェイ(firewall)を利用している方は、別の方法でACLを実現します。

UniFiのSecurityメニューからACLを選びます。
以下の赤枠で囲ったところが相互にアクセスできないようにするACLのリストです。

まず、ここでは、ゲートウェイのMACアドレスは”00:0c:29:02:7c:96”とします(私の仮想環境ESXi上のFirewall兼DNS兼DHCP)。
L2 ACLルールの中身は以下の通りです。

  1. Source Any(全ての端末)からDestination”firewall”のアクセスを許可します。
  2. Source ”firewall”からDestination Anyのアクセスを許可します。
  3. Source AnyからDestination MACアドレスff:ff:ff:ff:ffのアクセスを許可します。これはarpによるIPアドレスからMACアドレスの解決に必要です。
  4. Source AnyからDestination Anyを拒否します。

なお、スイッチにSSHして確認すると以下のように定義されています。(GuestのVLAN IDは***としています)

1
2
3
4
5
6
mac access-list extended global_mac_acl
permit any 00:0c:29:02:7c:96 00:00:00:00:00:00 vlan eq ***
permit 00:0c:29:02:7c:96 00:00:00:00:00:00 any vlan eq ***
permit any ff:ff:ff:ff:ff:ff 00:00:00:00:00:00 vlan eq ***
deny any any vlan eq ***
permit any any

これで対象のネットワークでインターネットだけを許可し、その他無線、有線違いのアクセスはできなくなります(Flex miniを除いては)。
この設定は2024年11月7日のUNA8.6.9(Official)から有効になったようです。

UniFi リリース
https://community.ui.com/releases/UniFi-Network-Application-8-6-9/e4bd3f71-a2c4-4c98-b12a-a8b0b1c2178e
Fixed an issue where MAC ACLs didn’t function correctly when using any as source or destination.

私の自宅にはUniFi Switchが6台とAPが2台ありますが、Flex miniを除き、一括で全てのスイッチにコンフィグを流し込んでくれるのは改めて便利だなと感じるところです。

なお、ご参考までに、IPv4単位のフィルタも可能です。先ほどのACLに最終2行に記載してあります。

  1. 192.168.1.128/25から192.168.2.0/24を許可
  2. 192.168.1.0/24から192.168.2.0/24を拒否

このように、192.168.1.0/24の後半128個のサブネットから192.168.2.0/24セグメントへのアクセスは許可し、192.168.1.0/24の前半のサブネットから192.168.2.0/24へのアクセスは拒否するといったACLが実現可能です。