私のUbuntu 16.04マシンでは、UFWを次のように構成しました。
$ Sudo apt-get install ufw
$ Sudo ufw limit 22/tcp
$ Sudo ufw allow 80/tcp
$ Sudo ufw allow 443/tcp
$ Sudo ufw enable
Sudo ufw status verbose
を実行すると、出力は次のようになります。
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp LIMIT IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (v6) LIMIT IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
私が見る限り、これは見栄えがいいです。SSH(スロットル)だけでなく、HTTPとHTTPSも可能です。これが望まれていたことです。
しかし、数日後、/var/log/ufw.log
を調べると、次の例のようなかなりの数のエントリが見つかります。
Jan 1 00:00:00 <SERVER_NAME> kernel: [<UPTIME>] [UFW BLOCK] IN=eth0 OUT= MAC=<41_CHARACTERS> SRC=<IP_V4> DST=<IP_V4> LEN=40 TOS=0x00 PREC=0x00 TTL=56 ID=1234 DF PROTO=TCP SPT=17708 DPT=443 WINDOW=0 RES=0x00 RST URGP=0
Jan 2 23:59:59 <SERVER_NAME> kernel: [<UPTIME>] [UFW BLOCK] IN=eth0 OUT= MAC=<41_CHARACTERS> SRC=<IP_V4> DST=<IP_V4> LEN=52 TOS=0x00 PREC=0x00 TTL=51 ID=23456 DF PROTO=TCP SPT=29199 DPT=443 WINDOW=1061 RES=0x00 ACK FIN URGP=0
DPT=443
のとおり、UFWは一部のHTTPSリクエストをブロックしていますか?何故ですか?上記のように、HTTPS(つまり、TCP経由のポート443)はUFW構成で明示的に許可されていますか? UFWがこれらの要求をブロックする他の理由は何ですか?
(試してみると、ブラウザでHTTPS経由で自分のWebサイトを開くことができるため、UFWは明らかにall HTTPSリクエストをブロックしません。)
2つのサンプルログエントリは、実際にはtcpセッション終了タイプのパケットです。 TCP接続の場合、Linuxは「半二重」クローズシーケンスを使用する傾向があります。この場合、セッションのどちら側でも、単一の2方向FIN-ACKハンドシェイク(接続をCLOSE_WAIT状態)、フル4ウェイFIN-ACKハンドシェイクの代わりに。特にルーターがその間にある場合、非常に頻繁に発生するのは、一方がセッションが閉じられたと考え、もう一方が閉じられなかったということです。コンピュータが終了し、忘れられましたセッションについて、パケットを無効な新しいセッション開始パケットと見なしてブロックします。害はありませんでしたが、実際のセッションは正常に機能しました。
ここでの重要な情報は、2つの例のTCPフラグ、 "RST"(リセット)、および "ACK FIN"です。