apacheのログを見ていたらこんなものが。
kazz.red:80 114.119.163.48 - - [23/Aug/2020:22:31:58 +0900] "GET /cafe/art/00011.html HTTP/1.1" 401 723 "-" "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+http://aspiegel.com/petalbot)" 10.179.80.32
個人向けの非公開メモとして運用しているブログ(KENT-WEBのCafeLogを使用)のurlを直接叩きに来ている。BASIC認証が効いて401を返しているが、なぜこのurlが漏れているんだ?
一つ考えたのは、Android端末に使っているVPN方式のPersonalFirewallのNetGuard経由で漏れている可能性。しかし、前回Androi端末を使って以降に作成したページもアクセスされているので、濡れ衣だった。
しばらく考えて原因判明。sitemap.xmlで自ら公開しているせいだった。sitemap.xmlを生成しているスクリプトを修正。
<?php error_reporting('ERROR'); $basedir = "/var/www/default/docs"; $homeurl="https://kazz.red"; $sitemapfile = "/sitemap.xml"; $sitemap ='<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"> '; exec("find $basedir -type f -name \"*.html\" ! -path \"*/cafe/*\"", $files); shuffle($files); $i=0; foreach($files as $file){ if($i>=200){break;} #200個くらいにしとく。 $time = date(DATE_ATOM,filemtime($file)); $location = $homeurl . str_replace($basedir,"",$file); $sitemap .= " <url> <loc>$location</loc> <lastmod>$time</lastmod> </url> "; $i++; } $sitemap .= '</urlset> '; file_put_contents("$basedir$sitemapfile",$sitemap); echo sizeof($files)." files exist.\n"; echo $i ." files were registerd.\n"; ?>
findで特定のディレクトリを除外するには ! -pathと。