スマートロックにスマートプラグ、電球やセキュリティカメラなど、安くて便利なIoT製品・スマートホーム製品が選び放題使い放題の昨今ですが、心配なのがこれらの機器の脆弱性対策です。
IoTデバイスを標的とするボットネットの存在はいくつかレポートされていますし、実際に稼働もしており、日本でも何台もの機器が参加させられてしまっていると思ったほうが良いでしょう。ユーザーとしては、使用している安物の機械がボットネットに巻き込まれる程度であれば直接の実害は無いとも言えるのですが、LAN内に侵入される可能性があることを考えると相当心配です。特にクリプトユーザーは、もしIoT機器から侵入されて、PCやタブレットの中身まで探られたら・・・なんて考えると、心配で眠れなくなってしまうのではないでしょうか?
僕が仕事をしている事務所では、光回線インターネットを引いて固定IPアドレスを割り当てていますが、いわゆる家庭用の無線LAN対応ルーターでLANを構成しています。そして仕事では当然のごとくPCやタブレットでクリプトを扱うため、LANはなるべくクリーンに、知らないデバイスが繋がるようなことは無いようにしておきたいです。しかし、いまどきのおもちゃのようなスマートホームデバイスは使いまくりたい、だからといって同じLAN内では使いたくないわけです。
このような要望に対応する場合、一般的にはYAMAHAやCISCOのルーターかL3以上のスイッチをつかって複数のLANに分離するのが最善ですが、逸般家庭であれば何台か余っているであろうラズパイをつかって、別セグメントの無線LAN環境をつくってやればいいな、というわけでやってみましたので、興味が有る方は参考にしてみてください。
ネットワークの構成
一般的なWiFiルータを使用した家庭内LANに、WiFiのみのLANを追加するイメージです。LAN側に有線ケーブルで接続したラズパイ4を使用して、WiFiのみのLANを構成します。

192.168.11.0/24 : 事務所のLAN。エレコムのルータ(192.168.11.1)から外に出ることができる。インターリンクの固定IPアドレス1個を利用。WiFiは使用しているがMACアドレス制限を行い、管理できないデバイスの接続は禁止。
192.168.12.0/24 : ラズパイ4のWiFiで構成するIoT用のLAN。事務所のLANにケーブルで接続したラズパイ4からエレコムのルータ経由で外に出ることができる。IoTに限らず新しい機器のセットアップ時に利用したりゲストにも開放しているLAN。事務所のLAN(192.168.11.0/24)へはアクセスさせない。
ラズパイの設定
ITmediaの記事「ラズパイを無線LANルーター化する ~アクセスポイント編~」を参考に設定しました。
使用するソフトウェアのインストール
sudo install -y hostapd dnsmasq iptables
WiFiアクセスポイントを構成するために “hostapd”、dhcpサーバを構成するために “dnsmaqs”、ネットワーク設定を行うために “iptables” をインストールしておきます。(iptablesはおそらく標準で既にインストールされている可能性が高いです)
wlan0のネットワーク設定
/etc/dhcpcd.conf
に
interface wlan0
static ip_address=192.168.12.1/24
static domain_name_servers=8.8.8.8 8.8.4.4
を追加、ラズパイ4のWiFiのIPアドレスを指定することで別セグメントのLANの構成を開始します。
hostapdの設定
hostapdを使用してWiFiアクセスポイントを構成します。
/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
hw_mode=b
channel=7
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
ieee80211ac=0
wmm_enabled=1
ieee80211d=1
country_code=JP
ieee80211h=1
local_pwr_constraint=3
spectrum_mgmt_required=1
wpa=2
wpa_key_mgmt=WPA-PSK
ssid=group205
wpa_passphrase=(WiFiの暗号化パスフレーズを設定)
と、設定ファイルを設置したら /etc/default/hostapd にて
DAEMON_CONF="/etc/hostapd/hostapd.conf"
として、設定ファイルを読み込ませるようにしておきます。
(当然ですが、ssid=group205 と wpa_passphrase=(WiFiの暗号化パスフレーズを設定) の部分は、お好みのSSIDとパスワードを設定しましょう!)
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
で、hostapdを自動起動するようにしておきます
ポートフォワーディングの有効化
/etc/sysctl.conf に net.ipv4.ip_forward=1 を追加して、ポートフォワーディングを有効化しておきます。
root@pi4:~# grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward=1
設定を反映させるために、sysctl -p を実行しておきましょう。
root@pi4:~# sysctl -p
net.ipv4.ip_forward = 1
iptablesの設定
iptablesをつかってIPマスカレード設定とLAN間のアクセス制限の設定を行います。
IPマスカレード設定
(なつかしいなIPマスカレード!家庭用WiFiルータが一般的になる前は、linuxマシンでインターネット接続して、LinuxホストでIPマスカレード設定して、家庭内LANのWindowsマシンからもインターネット接続できるようにする、とかやってたよね〜!テレホとかISDNの時代に!覚えてます?え?誰も聞いてない?)
root@pi4:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
で、サクッとIPマスカレード設定することが出来ます。
事務所側LANへのアクセス禁止設定
IoT用のLANから業務用のLANへのアクセスを禁止するため
iptables -A FORWARD -s 192.168.12.0/24 -d 192.168.11.0/24 -j DROP
として、IoT用のLANから業務用LAN宛の全てのパケットを捨てるようにしてしまいます。
iptables設定の保存と自動適用
root@pi4:~# iptables-save > /etc/iptables.ipv4.net
として、/etc/iptables.ipv4.net に設定を保存します
root@pi4:~# cat /etc/iptables.ipv4.net
# Generated by xtables-save v1.8.2 on Mon Sep 13 16:53:00 2021
*nat
:PREROUTING ACCEPT [2868:572257]
:INPUT ACCEPT [1014:224114]
:POSTROUTING ACCEPT [153:30194]
:OUTPUT ACCEPT [232:36384]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Sep 13 16:53:00 2021
# Generated by xtables-save v1.8.2 on Mon Sep 13 16:53:00 2021
*filter
:INPUT ACCEPT [5126:735430]
:FORWARD ACCEPT [113369:65585305]
:OUTPUT ACCEPT [4557:754897]
-A FORWARD -s 192.168.12.0/24 -d 192.168.11.0/24 -j DROP
COMMIT
# Completed on Mon Sep 13 16:53:00 2021
こーいう感じになってます。マスカレード設定とLANアクセス設定があることが確認できますね。
iptables-restore < /etc/iptables.ipv4.net
これを /etc/rc.local の最後(最後といってもexit 0の前)に追加しておいて、再起動したときも再度適用されるようにしておきます。
DHCPサーバの設定
dnsmasqをつかってdhcpサーバを構成します
root@pi4:~# cat /etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.12.100,192.168.12.200,255.255.255.0,48h
dhcp-option = option:router, 192.168.12.1
dhcp-option = option:dns-server, 8.8.8.8, 8.8.4.4
192.168.12.0/24 のうち、192.168.12.100から192.168.12.200まで(101個のアドレス)貸し出されるようにしており、有効期限は48時間としています。
IPマスカレード設定したラズパイ4(192.168.12.1)をルータとし、DNSサーバーはgoogle public dns serverを使うようにしています。
root@pi4:~# systemctl restart dnsmasq
dnsmasqを再起動して設定を有効化しておきます。
接続と動作確認
接続と動作確認にはやはりノートパソコンが便利でしょう。hostapdの設定で決めたSSIDとパスフレーズを使用して、IoT側のWiFiに接続し、インターネット接続が可能なこと、事務所側のLANへの接続が出来ないことを確認すればOKです。
あまり使用頻度は高くないのですが、僕はこういうときにWindows10のノートパソコンを使用しています。
コマンドプロンプトを開いて ipconfig と叩けば、WiFiに割り当てられているIPv4アドレスが確認できますので、それが192.168.12.1xxになっていれば、IoT用WiFiへの接続は成功しています。
次にブラウザを開いてみれば、インターネット接続の確認はすぐにできるかと思います。
最後に、事務所側のLANに接続できないことを確認しますが、このとき ping 192.168.11.200 と、ラズパイ4の事務所側のLANのアドレスにだけは接続できてしまうことに注意してください。その他、事務所側のLANで開放しているSMBファイルサーバーや開発環境などにアクセスできないことを確認すれば一安心です。
終わりに
今回の記事では、LANにあるリソースを保護することを目的とし、メンテしにくい・更新されない可能性があるIoT機器について分離した別のLANを用意することにより、目的を達成することが出来たとおもいます。
ちょうどこの記事を書いているタイミングでlog4jの脆弱性が発覚し、けっこうな騒ぎになってきています。javaは業務システムでよく使用されていることもあり、SIerのみなさんは対応に追われていることでしょうが、本当に怖いのはこのような脆弱性を含む製品が放置され、botnetやハッカー集団の攻撃用ツールとして悪用されてしまうことだと思っています。
メンテしにくい・更新されない可能性があるIoT機器については、今回のような脆弱性を含むものであっても放置されてしまう可能性がありますが、ラズパイをIDS/IPSとして活用することによりこれらの問題についても対応できないか、(このエントリは特に連載ではないのですが、事務所のネットワークは常に安全な状態を保ちたいため)今後もやっていこうと思っていますので、興味のあるかたはブックマークしたりSNSをフォローしてみてください。