Ubuntu20.04にWSDをインストールする 

# 経緯
Windows10 バージョン1709以降、SMBv1がデフォルトで無効化された。
これに伴い従来のNetBIOS方式による探索ができなくなってしまったため、ネットワークの一覧にLinuxマシンが表示されなくなってしまった。
この問題の解決策として、

①Windows側の設定でSMB 1.0/CIFS ファイル共有を有効にする
②Linuxマシン側をWSDに対応させる

①はセキュリティリスクとなるため却下。必然的に②の方法をとることになる。


###### WSDとは
> WSDとは、Windowsからネットワーク上の周辺機器にアクセスするための仕様の一つで、Webサービス標準に則ったプロトコルで通信するもの。Windows VistaおよびWindows Server 2008で導入された仕様で、ネットワーク対応プリンタなどで利用されている。
(https://e-words.jp/w/WSD.html より引用)
<br>
本稿ではUbuntu20.04LTSへのWSDの導入方法について記載する。

githubにて<a href="https://github.com/christgau/wsdd">wsdd</a>という便利なものが配布されているので、これを利用する。


# 環境
・Ubuntu20.04LTS (Focal Fossa)
・smbd Version 4.13.17
・Windows10 21H2 バージョン19044

# 導入の手順
## インストール
<a href="https://github.com/christgau/wsdd">wsdd</a>のgithubに記載の通り進める。
<br>
christgau氏のwsddリポジトリを追加する。

```
[root@hogehoge]#
echo "deb https://pkg.ltec.ch/public/ distro main" >> /etc/apt/sources.list.d/christgau-wsdd.list
```
:::note
"distro"は使用するUbuntuの開発コード名の前半分を記入
Ubuntu 20.04 LTS なら "Focal"
（ 参照: https://releases.ubuntu.com/ ）
:::

<br>
パッケージ認証のための証明書も忘れず登録し、インストール。

```
# apt-key adv --fetch-keys https://pkg.ltec.ch/public/conf/ltec-ag.gpg.key
# apt update
# apt install wsdd -y
```
:::note warn
リポジトリを直接突っ込むのはセキュリティやら依存関係やらで望ましくないらしい。
将来的にapt-keyが使えなくなるのに備えて、DockerやSnapなんかのサンドボックス環境を勉強しようと思う。
:::

## 環境設定

### サービス登録
```
# systemctl enable wsdd
# systemctl status wsdd
● wsdd.service - Web Services Dynamic Discovery host daemon
     Loaded: loaded (/lib/systemd/system/wsdd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-03-31 01:36:33 JST; 17min ago
   Main PID: 22584 (python3)
      Tasks: 1 (limit: 4627)
     Memory: 12.5M
     CGroup: /system.slice/wsdd.service
             └─22584 python3 /usr/bin/wsdd
```


サービスのユニットファイルは /lib/systemd/system/wsdd.service


ユニットファイルの中はこのようになっている。
```/lib/systemd/system/wsdd.service 
[Unit]
Description=Web Services Dynamic Discovery host daemon
After=network-online.target smbd.service    #smbd.service追記
Wants=network-online.target smbd.service    #smbd.service追記

[Service]
Type=simple
EnvironmentFile=/etc/wsdd.conf
ExecStart=/usr/bin/wsdd $WSDD_PARAMS
User=daemon
Group=daemon

[Install]
WantedBy=multi-user.target
```
ここから、wsddの設定ファイルは /etc/wsdd.conf と分かった。
また、起動時にSambaと紐づけたいのでその旨を追記。

### wsdd本体の設定
サイトによってはユニットファイルに直接記入しているものもあったが、混乱を避けるためにも wsdd.conf へ記入。
```/etc/wsdd.conf
# command line parameters for wsdd (consult man page)
WSDD_PARAMS="-p -i enp2s0"
```
NICを指定しないと起動しないので -i オプションはおそらく必須。
加えて、ワークグループは環境依存として -p オプションを選択。

:::note
各パラメータの詳細は ~$ man wsdd かgithubを参照のこと。
:::

<br>

### ufwの設定
……あまり美しくない(・ω・;)

打ち込むのがすごく面倒なので適当なところに以下のファイルを作成して実行。
リンクローカルアドレスは環境に合わせて適宜変更してください。
```wsdd_ufw_settings.sh
#!/bin/bash

#ipv4ポートをローカルネットワークに開放
sudo ufw allow from 192.168.1.0/24 to any port 3702 proto udp comment 'WSDD'
sudo ufw allow from 192.168.1.0/24 to any port 5357 proto tcp comment 'WSDD'
sudo ufw allow from 192.168.1.0/24 to any port 5358 proto tcp comment 'WSDD'
#ipv6ポートをローカルネットワークに開放
sudo ufw allow from fe80::/10 to any port 3702 proto udp comment 'WSDD'
sudo ufw allow from fe80::/10 to any port 5357 proto tcp comment 'WSDD'
sudo ufw allow from fe80::/10 to any port 5358 proto tcp comment 'WSDD'
sudo ufw reload
sudo ufw status
```
```bash shell
[root@hogehoge]~# source wsdd_ufw_settings.sh
```
加えて、NetBIOSで使用していた137,138.139/tcp | 137,138/udp は不要なので閉じておく。


<br>

# まとめ
:::note alert
中小企業や社員個人を狙ったサイバー攻撃も増えてきたし、
いい加減に脆弱性を抱えたSMBv1を使うのは止めよう。
:::