【衝撃】サーバーのログ確認でインターネットの怖さを知る


■前提条件

・サーバー:スマホWEBサーバー化マニュアル で作成したもの

・Cloudflare Tunnelを使用


■ログ確認編

・下記ディレクトリ以下にログファイルがある

cd $PREFIX/var/log/apache2/

・ログの末尾を追う

tail -f access_log

※|  grep “●” を追加すれば●を含むもののみ抽出

・他デバイスからサイトにアクセスしてみると以下のように出力される

※127.0.0.1 - - [31/Mar/2026:19:22:17 +0900] "GET / HTTP/1.1" 200 63616

127.0.0.1: 接続元IP。Cloudflare Tunnelを通しているため、すべて「自分自身」からのアクセスに見える。

[31/Mar/2026:…]: アクセスされた日時

“GET / HTTP/1.1”: GET(ちょうだい)という命令で、/(トップページ)を、HTTP/1.1というルールで要求した、という意味

200: ステータスコード。成功(OK)を意味

63616: 送信したデータのサイズ(バイト)

・しばらく放っておくと、様々な攻撃を常に受けていることを実感できる

127.0.0.1 - - [31/Mar/2026:19:39:43 +0900] "GET /wp-admin/setup-config.php HTTP/1.1" 409 2767
127.0.0.1 - - [31/Mar/2026:19:41:25 +0900] "GET /wordpress/wp-admin/setup-config.php HTTP/1.1" 404 236
127.0.0.1 - - [31/Mar/2026:19:42:09 +0900] "GET /wordpress/wp-admin/setup-config.php HTTP/1.1" 404 236
127.0.0.1 - - [31/Mar/2026:19:48:26 +0900] "GET /wp-admin/setup-config.php HTTP/1.1" 409 2767
127.0.0.1 - - [31/Mar/2026:20:03:16 +0900] "GET /wp-admin/setup-config.php HTTP/1.1" 409 2767
27.0.0.1 - - [31/Mar/2026:20:05:00 +0900] "GET /robots.txt HTTP/1.1" 404 236
127.0.0.1 - - [31/Mar/2026:20:05:01 +0900] "GET /sitemap.xml HTTP/1.1" 404 236
127.0.0.1 - - [31/Mar/2026:20:05:51 +0900] "GET /wordpress/wp-admin/setup-config.php HTTP/1.1" 404 236
127.0.0.1 - - [31/Mar/2026:20:06:26 +0900] "GET /wp-admin/setup-config.php HTTP/1.1" 409 2767
127.0.0.1 - - [31/Mar/2026:20:06:35 +0900] "GET /wordpress/wp-admin/setup-config.php HTTP/1.1" 404 236

"GET /wp-admin/setup-config.php""GET /wordpress/..."

WordPressの設定画面を直接叩こうとしている


■アクセス元確認編

・現状、Cloudflare Tunnelを使用している都合上アクセス元IPアドレスはすべてサーバーと同じものになっているはず

・httpd.confを見つけて

find $PREFIX/etc -name "httpd.conf"

・nanoとかで編集。ファイル内にある3か所のLogFormatを探して

# 修正前
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

# 修正後(%h を %a に変更)
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

・3か所とも%h を %a に変更。保存して終了

・再起動

# プロセスを一度終了
pkill httpd

# 起動
httpd -k start

・ログを再度確認してみよう。今度は様々なIPアドレスが表示されているはず


・次は、IPアドレスから国を調べ、略語で表記しログに付随して出力するプログラムを作成する

・ログと同じ階層(筆者の環境ではapache2以下)にgeo_tail.pyを作成

import sys, requests, re

# IPアドレスを抽出する正規表現
ip_regex = re.compile(r'^(\d+\.\d+\.\d+\.\d+|[a-fA-F0-9:]+)')

def get_country(ip):
    try:
        # 無料APIを利用(リクエスト制限に注意)
        r = requests.get(f"http://ip-api.com/json/{ip}", timeout=2).json()
        return f"[{r.get('countryCode', '??')}]"
    except:
        return "[--]"

# 標準入力からログを受け取って加工して出す
for line in sys.stdin:
    match = ip_regex.match(line)
    if match:
        ip = match.group(1)
        country = get_country(ip)
        print(f"{country} {line.strip()}")
    else:
        print(line.strip())

・実行

tail -f access_log | python geo_tail.py

・ログを確認。[JP]123.456…とかになってるはず

■セキュリティスキャン編

・Webサーバー脆弱性スキャナー「Nikto」を用いて、サイトの脆弱性を明らかにする


■前提条件

・サーバーは上と同じ

・攻撃側の端末もスマホ(android)を想定。Turmuxを用いる。


■攻撃側端末にて

・必要な道具(gitとperl)を先に入れる

pkg install git perl -y

・perl関連で足りないもの入れる

cpan JSON XML::Writer

・Niktoの本体を丸ごとダウンロード

git clone <a href="https://github.com/sullo/nikto.git">https://github.com/sullo/nikto.git</a>

・Niktoのフォルダに入る

cd nikto/program

・実行(.pl というのが実行ファイル)

perl <a href="http://nikto.pl">nikto.pl</a> -h ●←アクセスしたいサイトのURL

※サイトurlはhttp sを付けるとうまくいかない

・怒涛のアクセスが始まる。。サーバーのログを見てみよう

・スキャンし終わると、攻撃側端末に今回発覚した脆弱性についてのレポートが出力される


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です