Ubuntu18.04 UFWで2分ごとに出力されるブロックログへの対策

本番移行に向けてお試し用のUbuntu18.04をいじっているが、使い始めた直後から2分ごとに出力されているログがある。





症状

結論からすると、WiFiルーターのバグで SRC がちゃんと設定されていない IGMP パケットが飛んできているみたい。

/var/log/ufw.log
Jul  6 12:00:54 localhost kernel: [19526.125026] [UFW BLOCK] IN=ens33 OUT= MAC=dd:dd:dd:dd:dd:dd:ss:ss:ss:ss:ss:ss:08:00 SRC=0.0.0.0 DST=224.0.0.1 LEN=36 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2

見づらいので行分割してみるとこんな感じ。
IN=ens33
OUT=
MAC=dd:dd:dd:dd:dd:dd:ss:ss:ss:ss:ss:ss:08:00
SRC=0.0.0.0
DST=224.0.0.1
LEN=36 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF
PROTO=2

 

syslogにも出力されていて、問題解析しようとするとだいぶ邪魔。

 

PROTO

そもそもこれ何だっけ?プロトコル番号2か…
IANA / Protocol Numbers

これでいくと、IGMPってことになる。

最初にこれを見たのは、この情報だけでも送信元がある程度絞れる場合があるかもしれないと思ったから。なんとなくルーターが怪しい。

 

MAC

MACアドレスは3つの要素を含んでいる。
RedHat / Why do we see long MAC address in iptables log message?

送信先MAC: dd:dd:dd:dd:dd:dd
送信元MAC: ss:ss:ss:ss:ss:ss
タイプ: 08:00(ethernet frame carried an IPv4 datagram)

 

MACアドレスからIPアドレスを特定しよう…
俺的備忘録 〜なんかいろいろ〜 / LAN内で利用されているIPアドレスを調べる『arp-scan』コマンド

コマンド実行すると、少しずつ表示されていく…

$ sudo apt install arp-scan
$ sudo ufw disable
$ sudo arp-scan -I ens33 -l
Interface: ens33, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 65536 hosts (http://www.nta-monitor.com/tools/arp-scan/)

172.16.sss.sss ss:ss:ss:ss:ss:ss (Unknown)

 

送信先MACは 01:00:5e:00:00:01 だったのだが対応するIPアドレスが出てこない。MACアドレスで検索してみたらマルチキャストパケットになっていることが分かった。

で、ここから割り出した送信元は WiFiルーター であった。

 

SRC

送信元が0.0.0.0って?
Wikipedia / 0.0.0.0

無効、不明、または適用外の対象を表す模様。何も特定できない…

 

DST

送信先の224.0.0.1って?
ネットワークエンジニアとして / Multicast IP Address

サブネット上にいるマルチキャストに対応するホストのことだそうで、送信元がWiFiルーターであることを考えると、ネットワーク上の機器を束ねようとしていると考えられ、納得の送信先。

 

対策

どうやらルーターがIGMPプロトコルで端末を束ねようとしてパケットを発信しているらしいことが分かった。

根本対策として発信元を塞ぐ

うちでは特に束ねなくていいのでIGMPを無効化させようと思った。通常はこれが対策になると思う。

しかし、ブリッジモードで動作しているこのルーター、設定項目が出てこない…ルーターモードの時には設定できた気がするんだけど…

余計なパケットを宅内に飛ばさないためには、ルーターモードに戻してパケットが出ないようにするのが正しい。しかし、物理ポートが1つ使えなくなるのと、ちょっと設定に時間がかかる(家族の視線…)ので他の方法を考えることに。

本格対処はまた今度。

IPアドレスを指定した無効化

将来的にIGMPでホストを束ねようとする日が来るかもしれない。だとしたら、IPアドレスを指定してIGMPパケットを無効化すりゃいいのかなと考えた。

$ sudo ufw deny to any proto igmp from 172.16.sss.sss comment 'IGMP from WiFi Router'
Rules updated

 

これも、ルーターがちゃんとIPアドレスを付けてパケットを送ってくれれば問題なさそうだけど、上記ログのように SRC が 0.0.0.0 になっているので効果がなかった。

MACアドレスを指定した無効化

送信元のMACアドレスは載っているのでこれを利用し、IGMPのパケットをドロップさせてみる。チェーンの名前からして多分ココ。

$ sudo iptables -A ufw-before-input -p igmp -m mac --mac-source ss:ss:ss:ss:ss:ss -j DROP

 

完全なテストはしてないし、そんなのぶっちゃけ無理だと思うけれども、まぁ多分大丈夫でしょう。

ログが出力されなくなったのを確認。成功したので、これを恒久的に設定。

/etc/ufw/before.rules

# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT

# 最後の方に足してみる
-A ufw-before-input -p igmp -m mac --mac-source ss:ss:ss:ss:ss:ss -j DROP

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

 

変更を有効にするために、UFWを無効→有効と遷移させ、反映しているか確認する。

$ sudo ufw disable; sudo ufw enable
→ 注意!以前、ufw enable してもセッションは残っていたが、切断されまくり…

$ sudo iptables -L

Chain ufw-before-input (1 references)
target prot opt source destination

DROP igmp -- anywhere anywhere MAC ss:ss:ss:ss:ss:ss

 

ログが出力されなくなっていることを確認して終了。

 

さいごに

正直に言って、iptablesに手を入れるような面倒なことになるとは思わずに対策を始めてしまった。やりたいことを優先的にやるべきなんだけど、性格的に邪魔を整理してから問題に取り組みたくて…時間がどんどん過ぎていく…

 

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です