翻弄の手仕舞い
2025年7月から一年近く続いている執拗なつきまといアクセスのおかげで、様々な実験を行うことができた。
その過程で、ルーターのIPフィルター構成も、以前とは比べ物にならないほど高度化している。
皮肉なことに、すべてはこの「つきまとい」の副産物である。
その集大成が、下記の記事で触れている「未知のアクセス=自動的に観測対象」とする構成だ(笑)
「パラレルワールド作戦」
「正規サイトとハニーポット切り替え詳細」
その経緯の中で、「深淵 迎賓館」と名付けた歓迎ムードのサイトも生まれた。
ネーミングからして我ながら傑作で、思い出すたびに少し笑ってしまう。
ただし、そこで得られるLOGの大半は、実質的に“ノイズ”でしかない。
ラズパイの消費電力が小さいとはいえ、サーバーを2台稼働させ続けるコストに見合う価値があるかと言われると疑問が残る。
ゴミLOGを収集し続ける意味はあるのか・・・
そう自分に言い聞かせ、今回はひとまず手仕舞いとすることにした(笑)
正規サーバーは、以下の2系統をバーチャルホストで構成している。
・正規ドメイン:sky.0t0.jp
・非正規アクセス受け口(IP直打ち等):pacific.sky.0t0.jp(ハニーポット)
この前提で、iptablesの構成を以下のように整理し、しばらく運用してみる。
●PREROUTINGチェイン
smtp(ポート25)およびhttp(ポート80)は、DNAT段階では制限を設けない。
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 1 60 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:ssh match-set jpnet src to:192.168.1.1:22
2 3 140 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:smtp to:192.168.1.1:25
3 49 2524 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:http to:192.168.1.1:80
4 8 460 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:https match-set jpnet src to:192.168.1.1:443
5 22 1244 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:https match-set searchengines src to:192.168.1.1:443
6 0 0 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:submission match-set jpnet src to:192.168.1.1:587
7 0 0 DNAT tcp -- ppp0 any anywhere anywhere tcp dpt:imaps match-set jpnet src to:192.168.1.1:993
・jpnet:日本国内からのアクセスを Main Server(192.168.1.1)へ
・searchengines:主要検索エンジンのクローラを Main Server(192.168.1.1)へ
●FORWARDチェイン
ルール9以降がサーバー向けの転送処理となる。
PREROUTING(DNAT)で振り分けられたパケットに対し、不審アクセスを事前にDROPした上で転送する。
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 131K 110M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
2 0 0 DROP tcp -- br0 ppp0 anywhere anywhere tcp dpts:137:netbios-ssn
3 0 0 DROP udp -- br0 ppp0 anywhere anywhere udp dpts:netbios-ns:139
4 5 260 DROP tcp -- br0 ppp0 anywhere anywhere tcp dpt:microsoft-ds
5 0 0 DROP udp -- br0 ppp0 anywhere anywhere udp dpt:445
6 0 0 DROP tcp -- br0 ppp0 anywhere anywhere tcp dpt:sunrpc
7 0 0 DROP udp -- br0 ppp0 anywhere anywhere udp dpt:sunrpc
8 1375 922K ACCEPT all -- br0 ppp0 192.168.1.0/24 anywhere
9 11 472 DROP all -- ppp0 br0 anywhere anywhere match-set firehol_level3 src
10 33 1716 DROP all -- ppp0 br0 anywhere anywhere match-set firehol_level2 src
11 1 40 DROP all -- ppp0 br0 anywhere anywhere match-set firehol_level1 src
12 1 40 DROP all -- ppp0 br0 anywhere anywhere match-set other_block src
13 1 40 DROP all -- ppp0 br0 anywhere anywhere match-set gcloud src
14 38 2224 ACCEPT all -- ppp0 br0 anywhere 192.168.1.1
・firehol_level1~3:FireHOL公開のブラックリストIPをDROP
・gcloud:スパム傾向の強いGoogle Cloud発をDROP
・other_block:独自に不審と判断したアクセス(主に国内)をDROP
http(ポート80)は、本来であれば国内限定としたいところだが、Let’s Encrypt のACMEチャレンジ対応のため、定期的に開放が必要となる。
また、完全に閉じてしまうと観測対象そのものが消えてしまうため、あえて“最低限の緩和”という形に落ち着いた。
正規ホスト名(sky.0t0.jp)でアクセスされた場合は、httpsへ301リダイレクトされる。
その結果、海外からのアクセスはHTTPS段階で自動的にDROPされる。
一方、IP直打ちなどホスト名不一致のアクセスは、ハニーポット(pacific.sky.0t0.jp)側に誘導されるため、スパムアクセスのLOGを“適度に”収集して楽しめる構成となっている(笑)
ちなみに、ハニーポットのコンテンツは下記メッセージと画像のみ。
Welcome to a quiet place.
Are you lost again ?

早速、例のつきまといメンバーからアクセスがあったが、正規サイトへのリクエストは301リダイレクト後に遮断されている。
ec2-35-79-233-72.ap-northeast-1.compute.amazonaws.com (35.79.233.72) - - [18/Apr/2026:06:32:31 +0900] "GET / HTTP/1.1" 301 345 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
43.155.129.131 (43.155.129.131) - - [18/Apr/2026:06:52:28 +0900] "GET / HTTP/1.1" 301 345 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
これでしばらくは固定運用としたいところだが、また気まぐれで構成をいじり始める可能性も否定できない(笑)
観測という名の遊びは、なかなかやめ時が難しい。