ハトネコエ Web がくしゅうちょう

プログラミングやサーバー関連、チームマネジメントなど得た技術のまとめ

ufw のログの読み方(SPT, DPT など)

1. ufw とは

ufwUbuntu Firewall の略……ではなく
Uncomplicated Firewall (複雑じゃないファイアウォール)の略です。

「昔は Ubuntu Firewall の略だったんじゃないの?」と邪推したんですが、
2008年1月24日時点の Wiki
『Name: ufw (Uncomplicated Firewall)』と記述してあるので、開発当初からその略みたいです。

iptables の操作が複雑なので、それを簡単に操作するためのラッパーです。

2. ログの場所

/var/log/syslog/var/log/ufw.log の両方に吐き出されます。
syslog は他のシステムログと混じるので、 ufw.log の方を見るのがわかりやすいと思います。

3. ログの読み方

読み方は、ここのサイトがわかりやすかったです。ありがとうございます。

Feb 10 06:30:51 the-host-name kernel: [716156.938348] [UFW BLOCK] 
IN=eth0 OUT= MAC=11:01:01:01:01:01:22:02:02:02:02:02:08:00 
SRC=189.23.45.67 DST=123.45.67.89 
LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=17582 PROTO=TCP 
SPT=40596 DPT=8088 WINDOW=1024 RES=0x00 SYN URGP=0 

例えばこんなログが出ていました。(読みやすさのため改行を入れてます)

IPのインターフェイス(Internet Protocol Interface)について記載している
RFC791 3.3 Interfaces の項で、
各々が何を指すのかほぼ確認できます。

順番に書いていきます。

3-1. Feb 10 06:30:51

日時ですね。これはそのまんまです。

3-2. the-host-name

そのマシンのホスト名です。 echo $(hostname) で出てくる値と同じだと思います。

3-3. kernel: [716156.938348]

brackets(角カッコ)の中身は、OSが起動してからの秒数を指しています。

716156 / 60 / 60 / 24 = 8.3 程度なので、およそ起動してから8日が経過していることがわかります。

3-4. [UFW BLOCK]

ufw が以下の通信をブロックしたことを示します。

3-5. IN=eth0 OUT=

IN が incoming interface , OUT が outgoing interface を指すようです。
……らしいんですが、ネットワークのことをわかっていなくて、それが具体的になにかわかっていないです。
こちらが参考になるかもしれません: IP マルチキャストのトラブルシューティング - Cisco

この場合は、OUT側が空白なので、 incomig (相手から自分宛てへ)の通信であったことがわかります。

3-6. MAC=11:01:01:01:01:01:22:02:02:02:02:02:08:00

これは先ほどの参考ページで本当に簡潔にまとめてくれているのですが、
先頭の 6 octet (11:01:01:01:01:01)が宛先のMACアドレス
その後の 6 octet (22:02:02:02:02:02)が送信元のMACアドレス

最後の 2 octet がイーサネットタイプを指すそう。(参考: RFC 1340 ETHERNET NUMBERS OF INTEREST
0800 が DOD IP (DoD参照モデルとしてのIP)として参考先には記載がありますね。

3-7. SRC=189.23.45.67 DST=123.45.67.89

SRC が source 、送信元のIPアドレス を、
DST が destination送信先IPアドレス を指します。

3-8. LEN=40

IPパケットの長さです。
IPヘッダとIPペイロード(データ)の合計値です。

IPヘッダについてはこの記事が詳しいです: TCP/IP - IPとは

3-9. TOS=0x00

Type of Service です。
0x00 の場合は CS0 らしいです。

Howto:Calculate Values for Type of Service (ToS) from DiffServ or DSCP Values - innovaphone-wiki

これは DSCP 値としては 000 000 にあたり、
処理の優先レベルがもっとも低く、破棄レベルも低く処理されることを示します。

参考: QoS - DSCP(Differentiated Services Code Point)とは

3-10. PREC=0x00

IP Precedence の値 を指すそう。(「Precedence」は「優先度」を指す英単語らしい…)

0〜7 の 8 段階あり、この例では 0x00 なので、やっぱり優先度は低いです。

参考: QoS - IP Precedence(IPプレシデンス)とは

3-11. TTL=244

おなじみ Time to live です。パケットが破棄されるまでの時間(秒数)を指します。
知ってる風に書いたけど、「パケットが破棄される」という概念を実はよくわかっていない……。

3-12. ID=17582

IPヘッダにおける識別番号(Identifier)です。
ちなみに16bitなので、IDの最大値は 65535 のはず。

3-13. PROTO=TCP

これはそのままプロトコルですね。
TCPプロトコルの通信であることを示しています。

3-14. SPT=40596 DPT=8088

SPT は Source Port、つまり送信元のポート番号を示し、
DPT は Destination Port送信先のポート番号を示します。

つまり相手側は、8088番ポートにアクセスしようとして、 ufw にブロックされたと言えます。

ログを見てみると、やはり 22番ポートへのアクセスが一番多く、
次に 8080番ポートへのアクセス、そして 8088番ポートや 3389番ポートへのアクセスが見られる印象でした。

3-15. WINDOW=1024

TCPヘッダにおけるウィンドウサイズを指します。

ウィンドウ制御についてはこちらを参考に: TCP/UDP - TCPウインドウ制御 - ネットワークエンジニアを目指して

3-16. RES=0x00

RES はTCPヘッダにある予約領域です。
将来的な拡張のために 6 bit 用意されていますが、今のところ使われていないので
常に 0 が入るようです。

3-17. SYN URGP=0

SYN はコントロールフラグにて「SYN(コネクションの確立を要求)」のフラグがONであることを示しています。

URGP は Urgent Pointer の略で、コントロールフラグで「URG(Urgent=緊急)」のフラグがONである場合には、
緊急データの位置を指す役目を持ちますが、そうでなければ常に 0 です。

参考: TCP/IP - TCPとは - TCPヘッダ

4. まとめ

詳細に書きましたが、ファイアウォールの動作ログとしては

の 4 つがわかっていれば、困ることはなさそうですね。

すごく久しぶりに IP と TCP のことを調べて、
「マスタリングTCP/IPのことほとんど覚えていないな……」と反省しました・・・。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

IPヘッダやTCPヘッダに何があるかくらいは、頭に入れておくと楽そうです。