タグ: Linuxコラム

ASNとは何か?インターネットの“住所録”を支える番号と「盗人宿」の把握

インターネットの通信は、単にIPアドレスだけで動いているわけではありません。
その裏側には ASN(Autonomous System Number) という仕組みがあり、これが世界中のネットワークをつないでいます。

本記事では、

  1. ASNとは何か
  2. なぜ存在するのか
  3. セキュリティ運用でどう役立つのか

を順番に解説します。

ASNとは何か

ASNは:

インターネット上の「組織単位の番号」

です。

もう少し正確に言うと:

独立したネットワークを運用する組織に割り当てられる識別番号

です。

例えば:

組織ASN
Amazon AWSAS14618
GoogleAS15169
MicrosoftAS8075
NTTAS2914

IPアドレスが「端末の住所」だとすると、ASNは「プロバイダや企業の名前札」

のようなものです。

なぜASNが必要なのか

インターネットは巨大なネットワークですが、実態は無数のネットワーク同士の集合体です。

各プロバイダ、クラウド事業者、大学、企業はそれぞれ独立したネットワークを持っています。

この独立した単位をAutonomous System(AS)

と呼びます。そしてその識別番号が ASNです。

郵便で例えると

  • IPアドレス = 家の住所
  • ASN = 市区町村

と考えていただくと分かりやすいでしょう。

郵便物はまず「市区町村」に届き、そこから各家庭へ配送されます。

インターネットでも:

  1. まずAS単位でルーティング
  2. その中でIP単位に配送

という仕組みになっています。

BGPとASN

ASNが本領を発揮するのは:

  • BGP(Border Gateway Protocol)

というルーティングプロトコルです。

BGPは「どのネットワークがどのIPを持っているか」

を世界中で共有する仕組みです。

例えば:

このIPレンジはAS14618(Amazon)が持っています

という情報を各AS同士が交換しています。

これによって世界中のルータが最適な経路を選べる

ようになります。言い換えるなら、ASNとBGPがなければ、現在の規模のインターネットは成立しません。

セキュリティ運用でのASNの意味

サーバーログを見ると攻撃IPがどこから来ているかを知りたくなりました。

そこで、ASN単位でみることにしました。

なぜ運用者はASNを見るのか

筆者が運用しているVPSはONE OUTSという独自防御システムを敷いていますが、ここでの防御は

  • IP単体BAN
  • ASN単位防御

なぜなら、多くの攻撃者は海外の規制が緩いプロバイダ/組織を隠れ蓑にしています。

  • 利用の際に厳格な身分証明がなく
  • 当局の規制が緩い(どころかそういう行為を推奨している

(『鬼平犯科帳』で言うなら「盗人宿」の概念です。

実際の例

では、そういったASNをどのように調べるのか?

Linuxでは使いやすいコマンドが存在します。

whois -h whois.cymru.com " -v 8.8.8.8"

と打ってみます。(言わずと知れたGoogleのDNSです

AS      | IP               | BGP Prefix          | CC | Registry | Allocated  | AS Name
15169   | 8.8.8.8          | 8.8.8.0/24          | US | arin     | 2023-12-28 | GOOGLE - Google LLC, US
  • ASN
  • 事業者
  • IPレンジ

が見えてきたという次第。これをサーバのログから調べるのはかなり困難なので、以下のようなワンライナーを組んでみました。

エラーログからIPを抽出し、一意にソートしてWHOIS情報(AS番号、国、事業者名)を取得します。

grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /var/log/apache2/web_server_error.log \
| sort -u \
| while read ip; do
    whois -h whois.cymru.com " -v $ip" | tail -n1
  done

以下、無害化した解析結果テーブルです。(無害化に関してはAIの力を借りています

AS      | IP               | BGP Prefix          | CC | Registry | Allocated  | Info (Sanitized)
--------|------------------|---------------------|----|----------|------------|-------------------------------------------
58466   | 106.75.x.x       | 106.75.144.0/20     | CN | apnic    | 2011-03-23 | Major ISP / IDC Network (CN)
4837    | 123.139.x.x      | 123.138.0.0/15      | CN | apnic    | 2007-02-28 | China Network Backbone
8075    | 13.86.x.x        | 13.64.0.0/11        | US | arin     | 2015-03-26 | Global Cloud Service Provider (MS)
14061   | 144.126.x.x      | 144.126.208.0/20    | US | arin     | 2020-01-09 | Cloud Hosting / VPS Provider (DO)
212238  | 149.40.x.x       | 149.40.50.0/24      | US | arin     | 1992-01-28 | International Content Delivery Network
396982  | 162.216.x.x      | 162.216.150.0/24    | US | arin     | 2013-07-02 | Global Cloud Infrastructure (G)
51167   | 173.212.x.x      | 173.212.224.0/20    | DE | ripencc  | 2009-10-26 | European VPS/Dedicated Server Provider
211298  | 185.247.x.x      | 185.247.137.0/24    | GB | ripencc  | 2018-03-01 | Cyber Security Research Entity
213412  | 195.184.x.x      | 195.184.76.0/24     | FR | ripencc  | 2022-11-09 | Internet Scanning & Security Platform
398324  | 206.168.x.x      | 206.168.34.0/24     | US | arin     | 2022-10-26 | Global Threat Intelligence Scanner
14618   | 34.224.x.x       | 34.224.0.0/12       | US | arin     | 2016-09-12 | Global Cloud Services (AWS)
132203  | 43.153.x.x       | 43.153.0.0/18       | SG | apnic    | 1989-02-21 | Asia-Pacific Cloud Network (T)
6939    | 65.49.x.x        | 65.49.0.0/17        | US | arin     | 2007-10-04 | International Internet Backbone Provider
200593  | 91.202.x.x       | 91.202.233.0/24     | RU | ripencc  | 2008-03-03 | Eastern European Network Services

注意点

ログが数万行に及ぶ環境ではこの解析は膨大なものになります

head -50 /var/log/apache2/web_server_error.log | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' \
| sort -u \
| while read ip; do
    whois -h whois.cymru.com " -v $ip" | tail -n1
  done

とした方が良いでしょう。

まとめ

こうして、ASNを調べることができれば、先に示した「悪辣な攻撃を行うクローラー/攻撃者が潜む盗人宿」的な事業体/ASNという、「盗人宿」ごとの対策が容易に行えます。

悪を知らぬものが悪を取り締まれるか

という「鬼平」の言葉を元にログを調べていく手法について紹介しました。

Linuxにおけるrootの特別感

  • なんとなくrootを使っている
  • そもそもrootしかアカウントを使っていない

と言う方への注意喚起としても書いている記事です。

Linuxにおける「root」の特別性:システムを司る絶対的な権限

Linuxサーバーを運用する上で、誰もが耳にする最も重要なアカウント、それが「root」ユーザーです。このアカウントは、単なる管理者権限を持つユーザーという枠を超え、システム全体を司る絶対的な権限を持つ存在として位置づけられています。

なぜrootはそれほどまでに特別か、というその問題提起を行います。

システム全体を制御する「神」の権限

Linuxは、セキュリティと安定性のために「権限分離(Privilege Separation)」の原則に基づいて設計されています。一般ユーザーは、自分のホームディレクトリや許可されたファイルに対してのみ操作が可能で、システムの中核に関わる重要な設定ファイルやディレクトリには基本的に触れることができません。

一方でrootユーザーは、この権限の壁を完全に超越します。

  • 全ファイルの読み書き・実行権限: システム内のすべてのファイルとディレクトリに対して、制限なくアクセス、変更、削除が可能です。
  • カーネル操作: システムの心臓部であるLinuxカーネルの設定変更や、重要なモジュールのロード/アンロードが可能です。
  • 全ユーザーの管理: どのユーザーのパスワードでも変更でき、プロセスを強制終了させ、システムを再起動・シャットダウンできます。
  • ポートの利用: 予約された特別なポート(1024未満)を利用したサービスを起動できます。

絶大な力と隣り合わせの危険性

この絶大な力は、システム管理者にとっては不可欠なツールですが、一歩間違えれば致命的な破壊に繋がりかねません。

例えば、一般ユーザーであれば誤って自分のファイルしか削除できませんが、rootユーザーが誤って / (ルートディレクトリ) で rm -rf のようなコマンドを実行すれば、システム全体が一瞬にして破壊されてしまいます。(システム権限に関する部分は維持されるでしょう。しかし、/homeディレクトリにあるユーザデータは消し飛びます。

そのため、システム管理者であっても、普段の作業は権限の制限された一般ユーザーとして行い、root権限は本当に必要な時だけ susudo コマンドで一時的に利用することが鉄則です。

ちょっとした具体例

例えば:

systemctl status apache2.service

は本当によく使うコマンドです。

同様に

exit

はコンソールから抜ける時にも使う初歩的なコマンドでしょう。

しかし、

systemctl 

を打った状態で電話があった、声をかけられ中座する必要があった場合。 (これは本当に頻発します)
「まぁいいや、そっちに集中したいからコンソールを抜けよう」と

systemctl exit

を実行すると

shutdown -h now

と全く同じ効果が得られます。これは笑い事ではない事実です。

systemctl exit一般権限のユーザで実行した場合は

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
'exit.target'を開始するには認証が必要です。
Authenticating as:

と、「ん? なんか様子が違うぞ?」で思い直すことができますが、これがrootユーザーの場合は

システム停止を自然に、言葉通りに受け止め実行します。

話は戻しましょう。

「全能である」がゆえの危険性と不可欠な存在という側面が、rootユーザーを他のアカウントと一線を画す「特別」な存在にしているのです。

一般的にrootのプロンプトが「#」とされているのは、この 「システムを破壊する力」 を持っていることを常に意識し、コマンドの入力に細心の注意を払うための、管理者自身への視覚的な警告として機能しているのです。

それを防ぐためのちょっとしたTIPS

これを防ぐために私がLinuxサーバを設定時に真っ先に指定する記述がこれです。

/home/hoge/.bashrc

hogeは自分のログインユーザです。

ここの末尾に以下のように記します。

PS1="[\u@\H \W]\$ "

# 一般ユーザ向けのプロンプト設定
if [ "$PS1" ]; then
  if [ "$(id -u)" -eq 0 ]; then # rootユーザの場合
    PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
  else # 一般ユーザの場合
    PS1='\[\e[0;32m\][\u@\H \W]$\[\e[0m\] '
  fi
fi

プロンプト設定の意図解説

このPS1設定の主要な意図は、セキュリティの確保と作業効率の向上のために、ユーザーの種別(rootか一般ユーザーか)と現在のコンテキストを視覚的に明確化の措置です。

ユーザー種別による視覚的な区別

最も重要な意図は、誤操作を防ぐためにrootユーザー(管理者)と一般ユーザーの環境を瞬時に見分けられるようにすることです。

  • rootユーザーの場合 (id -u0)
    • 色: \e[0;31m は赤色を設定しています。絶大な権限を持つroot環境では、コマンド入力に細心の注意が必要であることを、視覚的な警告として管理者に促します。
    • プロンプト末尾: \#(通常は#に展開)は、伝統的にrootユーザーを示す記号です。
  • 一般ユーザーの場合:
    • 色: \e[0;32m は緑色を設定しています。通常作業を行う安全な環境であることを示します。
    • プロンプト末尾: $ は、伝統的に一般ユーザーを示す記号です。

コンテキストの明確化

ユーザーの種別に関わらず、プロンプトには以下の情報を含めることで、管理者が「誰として」「どのサーバーの」「どのディレクトリにいるか」を一目で把握できるようにしています。

記号意味
\u現在のユーザー名rootadmin
\Hホスト(サーバー)の完全な名称server.example.com
\W現在の作業ディレクトリのベース名/var/log/ の場合は log

設定スクリプトの技術的な解説

初期設定

PS1="[\u@\H \W]\$ "

これは、色の設定が機能しない場合や、条件分岐(if文)に入る前のデフォルトのプロンプトとして機能します。

条件分岐によるプロンプトの切り替え

if [ "$PS1" ]; then
    if [ "$(id -u)" -eq 0 ]; then # rootユーザの場合
        PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
    else # 一般ユーザの場合
        PS1='\[\e[0;32m\][\u@\H \W]$\[\e[0m\] '
    fi
fi
  • if [ "$(id -u)" -eq 0 ]; then: コマンドid -uを実行し、現在のユーザーIDを取得します。0はrootユーザーを意味します。このIDに基づいてプロンプトを切り替えます。
  • \[\]: これらは、エスケープシーケンス(色の設定部分)をbashに非表示文字として認識させるための重要な記号です。これがないと、bashがプロンプトの長さを誤認し、コマンド入力時の行がずれてしまう不具合が発生します。
  • \e[0m: これは色のリセットコードです。プロンプトの末尾にこれを記述することで、プロンプト以降に入力されるユーザーのコマンドや出力が色付きにならないように戻しています。

Ubuntu/Debian系での重要な留意点

このプロンプト設定は、ログインするユーザーの環境に適用される必要があります。

UbuntuやDebian系のシステムでは、rootユーザーとしてログイン(またはsu -で環境を切り替え)する際の.bashrcの扱いが、他のシステム(例:CentOS/RHEL)と異なる場合があります。

多くのシステムでは、rootユーザーのホームディレクトリは /root です。

  • 一般ユーザーのプロンプト設定は、/home/(ユーザー名)/.bashrc に記述します。
  • rootユーザーのプロンプト設定は、通常 /root/.bashrc に記述する必要があります。

この設定は、root環境にも適用。コンソールログインなどでrootでログインした場合にも備え、/root/.bashrcにも明記する必要があります。

補足:

/etc/bash.bashrc などのシステム全体の設定ファイルに記述することも可能ですが、特定のユーザーのみに設定を適用したい場合は、ユーザーごとの.bashrcファイルを使用するのが最も確実な方法です。

まとめ

RHEL系で最初にsudo su -をしたときに明示される

「大いなる力には大いなる責任が伴う」

をより明確にした言葉があります。『鉄人28号』でも高らかに歌われている

あるときは正義の味方
あるときは悪魔の手先
いいもわるいもリモコンしだい

この3行は、まさにLinuxのrootアカウントという「大いなる力」の二面性を表しています。

サーバ管理者は、この力が「悪魔の手先」とならないよう、使う一瞬一瞬に

  • 「自分は今、強大な力を得ているのか?」
  • 「この力は良き目的、必要な手段として用いるのか?」

を自問する必要があります。 その『意識のリモコン』を操作するために、筆者は明確にプロンプトで視覚化しているというお話でした。

攻撃者の「影響度」を確認するAbusedIPDB。

Webサーバ管理者を悩ませる不正アクセス。これが「常習者か」を見極めるために有用なサイトと、その使い方を説明します。

そもそも論として「攻撃者は常習性があるか?」

これは明確に、明白にYESと大文字で答えます。彼らは無差別に、利用できるサーバを機械的に(または悪意を持って)攻撃します。

そのような攻撃者のアクセス元をユーザーの善意の報告の元でDB化しているサイトが本稿で紹介するAbuseIPDB.comです。

AbuseIPDB.comとは

AbuseIPDBは、悪意のあるIPアドレスを報告・検索できるサービスで、サイバー攻撃対策に活用されます。IPの信頼性を確認したり、APIで自動分析も可能です。(この自動分析は筆者は利用経験無し)

主に以下のような用途で利用されます。

  • IPアドレスの信頼性確認:検索ボックスにIPを入力すると、過去の報告履歴や「Abuse Confidence Score(悪用の可能性)」が表示されます。
  • 不審なIPの報告:攻撃やスパムを検知した際に、行動の種類(例:SSH brute-force、DDoS)を指定して報告できます。
  • APIによる自動化:無料アカウントを作成すれば、APIキーを取得してスクリプトやセキュリティツール(例:Fail2Ban)と連携可能なようですが、筆者は未実施。

AbuseIPDB.com レポートサンプル

では、実際に上記のWebサイトを見てみましょう。

https://www.abuseipdb.com

にアクセスします。

そして、エラーログなどから攻撃の兆候があったIPアドレスを入力します。

その結果はこちらです。(IPアドレスや報告者はダミーデータ。そして、レポートは日本語にしています)


IPアドレス 198.51.100.123 はAbuseIPDBのデータベースに登録されていました!

このIPアドレスは 10,751回 報告されています。不正利用の信頼スコアは 100% です。

  • 不正利用の信頼スコア: 100%
  • ISP: Example Hosting Ltd.
  • 用途: データセンター/Webホスティング
  • ASN: AS65500
  • ホスト名: scan-server-01.example.com
  • ドメイン名: examplehosting.com
  • : some country
  • 都市: some city

最近の不正利用レポート (一部抜粋)

報告者 (国籍)タイムスタンプ (UTC)内容カテゴリ
🇫🇷 Reporter Alpha2025-10-23 01:16:03Firewall blocked port scan attempt [src port: 44256, dst port: 267]ポートスキャン
🇬🇧 User Bravo2025-10-23 00:36:43SSH login attempt failed.ブルートフォース, SSH
🇩🇪 Security Team C2025-10-22 22:49:36FW-PortScan: Traffic Blocked srcport=43104 dstport=22ポートスキャン, ハッキング, SSH
🇺🇸 Monitor Delta2025-10-22 21:46:12Connection attempt to tcp/7707ポートスキャン
🇺🇸 Honeypot Echo2025-10-22 20:02:02Unauthorized activity to TCP port 25.ポートスキャン
🇺🇸 Monitor Foxtrot2025-10-22 16:28:59Connection attempt to tcp/25ポートスキャン

ここから分かること

  • あなたのサーバに攻撃した奴は、他のサーバにも万単位で攻撃しているパターンが極めて高い。
  • あなたのサーバに問題があるのではなく、あなたのサーバに問題があることを期待しての不正アクセスを試行する輩の問題である。

従って:これらのIPアドレスをブロックすることに遠慮も躊躇も必要ありません。彼らは閲覧者では断じてありません。単なる攻撃者です。

攻撃者には

  • 交渉の余地を与えない
  • 「攻撃が有効である」という成功体験を与えてはなりません。そして、一度でも要求を呑めば更なる被害を生みます。
  • 聞く耳を持たない
  • 上記に同じです。「騒げば主張を聞いてもらえる」などという考えは許されません。
  • 名前を与えない
  • 攻撃者は見返り以上に「この騒ぎを起こした」という一種の名誉を求めます。その名誉となる名前は剥奪します。

の三原則の元、iptables(ufw) や筆者が前述したblacklistなどに放り込みましょう。

まとめ

このようにAbuseIPDBを確認することで、特定のIPアドレスがどのような不正行為を行っているか、世界中のユーザーからの報告を通じて把握することができます。

信頼スコアや報告回数、ISP、国などの情報から、そのIPアドレスをブロックすべきかどうかを判断する重要な材料になります。

不正アクセスは確かに脅威ですが、こちらのAbusedIPDBのような善意の協力者がいるという強みがあります。

これらを利用・貢献するというのも、自身が管理するWebサーバを攻撃から守る手段の一つです。

Powered by WordPress & Theme by Anders Norén