2014年9月28日日曜日

Raspberry Piセットアップ日記(13)UFW BLOCKメッセージ


気づいたら、/var/log/messagesに以下のようなメッセージが頻発していた。(1分に1回)

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
Sep 28 08:09:20 raspberrypi kernel: [1807898.640777] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

どうもブロードバンドルーターからの何らかのブロードキャストメッセージをブロックしている模様。
denyすることでログに吐かなくなるようだが、せっかくなのでどんなメッセージが飛んでいるのか
解析してみる。

1、syslogの見方

●参考
Linux LPIC - /var/log/messages
システムログの読み方を理解しよう
Raspberry Pi as a Syslog Server



以下のような読み方になるもよう

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=..
+- timestamp -+ +- host --+ +-src-+ +-- msg body ..

カーネルが、[1807838...というメッセージを出力している、ということになる
"[1807838.540815]"という表記は、なんとなくタイムスタンプ(の別表現)のような感じなので、意味のある情報は
[UFW BLOCK]..以降だろう。

2、ufwの動作確認

ここで一度ufwの動作設定がどうなっているのかを確認する
ufwの動作状態確認

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
...以下略

3、UFW BLOCK以降のログの見方

[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁(2)> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

INは入力デバイスだろう。
OUTはoutgoingのメッセージではないので出ないのだろう。
MACは通常のMACアドレスにしては長い気がするのと、最後の2オクテットの値が違うのでただのMACアドレスではなさそうだが、とりあえず保留。
SRC以降は、IPヘッダの情報くさい。

IPパケットの基本構造

SRC=送信元IP ルータIP
DST=宛先IP 224.0.0.1
LEN=データグラム長、IPパケット全体の大きさ 32 理論的なIPパケットの最小は20bytes
TOS=サービスタイプ 0x00、指定なし
PREC=? 0xA0 とりあえず保留
TTL=寿命 1
ID=IPフラグメント(分割)が起こった時の識別子、通常ランダム 同じフラグメント(分割)されたパケットは同じ値になる 2006
PROTO=プロトコル番号 2 /etc/protocolsファイルによると「igmp(Internet Group Management)」

どうも、IGMPパケットのようだ。

4、IGMPとは?
Internet Group Management Protocol

Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、
マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。

LEN=32であることから、おそらくMembership Queryパケットである可能性が高い。
Membership Query (Type 0x11)
ホストがマルチキャストのグループへ参加するときにルータに送信される。参加しているグループの最新の状態を知りたいときにも送信される。

ただ、内容的には「ホストからルータへ投げられるパケット」であり、
今回のように「ルータからブロードキャストへ」投げられるパケットでは無い様に見受けられるので、解せない。

一方こちらでは
マルチキャスト編<第2回> IGMPを知る

どうも「グループの維持」のために、クエリパケットを60秒に1回投げられるらしい。
意味的にはルータが投げてもおかしくない(というかグループを管理するのはルータらしいのでルータが投げるのが正論だろう)、おそらくこいつだろう。

4、解決策
結論として、IGMPをallowにしてみようと思う。

●参考
Ubuntu で ufw を利用して ping を拒否する設定
KVMのインストールと設定
Question about UFW log entries

IGMPプロトコルそのものに設定することはできなさそう。
公式サイトでバグ報告上がってるがwishlistになっており
マルチキャスト設定で対応する旨書かれている

https://bugs.launchpad.net/ufw/+bug/946322


というわけで、以下のように実行し、ログが増えないことを確認して終了。

$ sudo ufw allow in from ルータIP to 224.0.0.0/8 
Rule added
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
..中略..
224.0.0.0/8                ALLOW IN    ルータIP

5、おまけ

ufwのヘルプ
$ ufw help


1 件のコメント:

  1. まったく同じ状況だったので参考になりました。
    私もIGMPをallowにしてみたところ、今度は自分(192.168.0.X)から224.0.0.251へのパケットがUFWにBLOCKされたログが出るようになりました。
    同じ様にこれもallowしてみたらBLOCKされたログはでなくなりましたが、果たしてこれが正しい対処か一抹の不安が...
    もっとまともな対応があればご教授願いたいのですが

    返信削除