ホーム » 「nststat」タグがついた投稿
タグアーカイブ: nststat
ネットワーク関連の基本
なぜか家族チームで Micro Hardening のイベントに参加予定なので、ネットワーク関連の基礎の説明を家族向けにまとめる。以下の説明は基本的に、Linux 環境に login してのお話。
ネットワークの確認(ifconfig)
接続しているネットワークの状態を確認するには、ifconfig を使う。(Linuxの場合)
Windows であれば、cmd.exe を起動して、ipconfig を使う。
((( Linux の場合 ))) $ ifconfig -a eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.2 netmask 255.255.255.0 broadcast 192.168.11.255 : lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 : $ ifconfig eth0 # 特定のインタフェースだけ確認 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.2 netmask 255.255.255.0 broadcast 192.168.11.255 : $ ip link # 新しい Linux 系では、ifconfig が無い場合もある。 # ip link がその代用 ((( Windows の場合 ))) C:> ipconfig /all # Linux の ifconfig -a と同じ
上記のコンピュータでは、IPアドレス(例:192.168.11.2)とサブネットマスクの値(255.255.255.0)が設定されている。IPアドレス AND サブネットマスクの値はネットワーク番号と呼ばれ、192.168.11.0 が同じであれば、同じサブネット内と判断できる。サブネットマスクは、上位bitの1の数で表現することもあり、192.168.11.2/24 という書き方もある。
こういったIPアドレスは、各コンピュータに対してあらかじめ決めた値を設定しておく方法(静的アドレス)と、IPアドレスを管理しているサーバにアドレスを一時的に貸し出してもらう方法(動的アドレス)があり、後者のアドレスを貸し出すサーバは、DHCPサーバと呼ばれる。(DHCPでは、アドレス貸し出しを頼んできた端末に、IPアドレス,サブネットマスク,ゲートウェイ,DNSサーバを通知してくれる。後述)
周囲のコンピュータの確認(arp/ping)
基本、インターネットでは IP アドレスで通信相手を判断するが、同じサブネット内では、各コンピュータに割り振られているMACアドレスでコンピュータを識別している。
arp
このため、同じサブネット内では、IPアドレスとMACアドレスの対照表が必要となってくる。この対照表の情報を交換するためのプロトコルが ARP であり、この対照表を確認・操作する命令が arp コマンド。
$ arp -an # -a で全ての一覧を表示、-n でホスト名を調べない ? (192.168.11.24) at <不完全> on eth0 ? (192.168.11.13) at 62:84:bd:28:xx:xx [ether] on eth0 ? (192.168.11.36) at b8:27:eb:ee:xx:xx [ether] on eth0 : $ ip neigh # 新しい Linux 系では arp コマンドがない場合もある。 # ip neigh が替わりになる。
ただし、コンピュータが「このMACアドレスは私のIPアドレスですよ」とアナウンスした結果を一定時間覚えているだけなので、かならずそのコンピュータが生きているかは別の話。サブネットの中で、偽のARPを流すことで他のコンピュータ宛のパケットを盗むことも可能(ARPスプーフィング)である。このため、セキュリティ対策としてMACアドレスとIPアドレスの対応(arp)を監視も重要となる。
ping
ping は、潜水艦のソナー音をイメージするコマンドで、ICMPプロトコルのパケットを、指定した IP アドレスor ホスト名に送って、返答の有無や応答時間を表示する。ping では通常、相手に連続してパケットを送る。ネットワークが不安定な場合には、パケットが相手に届かない場合もあるので、パケット欠落があると icmp_sec= の番号が不連続になる。
$ ping 192.168.11.2 PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data. 64 bytes from 192.168.11.2: icmp_seq=1 ttl=64 time=0.054 ms ^C $ ping www.google.com PING www.google.com (172.217.161.228) 56(84) bytes of data. 64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=1 ttl=54 time=5.62 ms 64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=2 ttl=54 time=5.89 ms 64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=3 ttl=54 time=5.93 ms ^C
ただし ping は、特殊な ICMP パケットを送ることで相手コンピュータを攻撃できた事例もあり、返答を返さないシステムもある。
ブロードキャストパケット(ping -b)
IPアドレスで、サブネットマスクとANDをとったネットワーク番号の残りの部分は、ホスト番号と呼ばれる。(例:192.168.11.2/24 であれば、2 の部分) IPアドレスでホスト番号の全bitが1のアドレス(この場合は、192.168.11.255)は、ブロードキャストアドレスと呼ばれ、同じサブネット内の全部のコンピュータにデータを送るときに使う。
((( pingでブロードキャストする場合は、-b オプションが必要 ))) $ ping -b 192.168.11.255 WARNING: pinging broadcast address PING 192.168.11.255 (192.168.11.255) 56(84) bytes of data. 64 bytes from 192.168.11.19: icmp_seq=1 ttl=64 time=70.5 ms 64 bytes from 192.168.11.18: icmp_seq=1 ttl=64 time=70.8 ms (DUP!)
ルーティング
インターネットでは、コンピュータに固有のIPアドレスを割り振り、サブネットを越えて通信ができる。(インターネットプロトコルIP)
基本的に、通信相手のIPアドレス AND サブネットマスク で求まるネットワーク番号が異なれば、サブネットが異なるので直接通信ができない。この場合は、ルータにパケットの中継を依頼することになる。ルータはゲートウェイとも呼ばれる。
ルータは、複数のサブネットを中継する装置であり、どのネットワーク番号ならばどのルータに送る(ルーティングと呼ぶ)というテーブルを持っている。一般的に、下流の末端のネットワークでは、どのネットワークならこの装置、それ以外はこの装置に送る…といった一覧表を持っている。(静的ルーティング)
一方、様々な末端からのデータが集まる上流のルータでは、末端ネットワークの構成が変化することも多いので、RIPというプロトコルで、ルータが相互にルーティング情報を交換している。(動的ルーティング)
ルーティングの確認(netstat -r)
ルーティングの情報を調べるには、netstat -r コマンドを用いる。
$ netstat -rn # -r ルーティング情報 -n ホスト名を調べない カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース 0.0.0.0 192.168.11.1 0.0.0.0 UG 0 0 0 eth0 192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 $ ip route # 新しい Linux 系では、ip route を使う
この例では、192.168.11.0/255.255.255.0 というサブネットでは直接通信ができ(ゲートウェイが0.0.0.0)、それ以外のパケット(受信先サイトが0.0.0.0)は 192.168.11.1 のルータに送ることになっている。(デフォルトゲートウェイ)
ルートの確認 traceroute
どういった経路で相手コンピュータまでデータが届いているのかを確認するには、traceroute コマンドを用いる。
traceroute コマンドは、ルーティングを調べながら、各ルータに ping を送った結果を表示する。
((( Linux の場合 ))) $ traceroute www.fukui-nct.ac.jp traceroute to www.fukui-nct.ac.jp (104.215.53.205), 30 hops max, 60 byte packets 1 xxxx.xxxx.xxxx (192.168.xx.1) 0.299 ms 0.251 ms 0.354 ms 2 yyyy.yyyy.yyyy (192.168.yy.254) 0.790 ms 1.976 ms 1.343 ms 3 ttn103-198-212-1.ttn.ne.jp (103.198.212.1) 4.304 ms 5.127 ms 4.343 ms 4 ftth-sw1-po-11.ntwk.ttn.ne.jp (202.127.81.33) 3.742 ms 5.580 ms 4.296 ms 5 core-sw2-la-2.ntwk.ttn.ne.jp (202.127.81.29) 5.477 ms 4.692 ms 4.655 ms 6 bbr2-2-4.ntwk.ttn.ne.jp (202.127.81.17) 4.895 ms 2.025 ms 1.904 ms 7 103.246.232.116 (103.246.232.116) 6.707 ms 5.499 ms 6.583 ms ((( Windows の場合 ))) C:> tracert www.fukui-nct.ac.jp # Windowsではコマンド名が違うので注意
DNSによる名前解決
ここまでの話の中で、IPアドレスは、192.168.11.123 といった値であったが、極めて覚えにくい。このために、コンピュータそれぞれに名前をつけることができる。これをホスト名という。ホスト名も組織化されていると、組織を区別する名前が必要でドメイン名と呼ぶ。ホスト名とドメイン名の全体を単純にホスト名とかコンピュータ名と呼ぶことも多いが、正式には、FQDN と呼ぶ。
FQDN = www.fukui-nct.ac.jp (コンピュータ名とかドメイン名と呼ぶことも多い)
ホスト名 = www
ドメイン名 = fukui-nct.ac.jp
コンピュータ名とIPアドレスの情報を管理するのが、DNS(Domain Name Service) であり、下流の DNS の情報を調べながら 上流の DNS と組み合わされて管理されている。
nslookup or dig
この DNS に問い合わせを行うのが nslookup コマンドや dig コマンドである。コンピュータ名からIPアドレスを調べるには、一般的には nslookup コマンドを用いる。(正引き)
$ nslookup www.fukui-nct.ac.jp Server: 192.168.11.xxx Address: 192.168.11.xxx#53 Non-authoritative answer: Name: www.fukui-nct.ac.jp Address: 104.215.53.205 $ dig www.fukui-nct.ac.jp # もっと詳しい情報を調べる場合はdigを使う
利用者が多いサービスでは、1台のコンピュータで処理するのは大変なので、負荷分散を行うために、同じサービスを提供するコンピュータを何台も並べ、コンピュータ名を調べる度に、その複数のコンピュータのIPアドレスを返す場合もある。(ラウンドロビンDNS)
逆引き
迷惑メールを大量に送ってくるとか、クラッキングをしてくるようなコンピュータの中には、きちんと管理されていない怪しいネットワーク組織からの接続の場合がある。こういう場合には、IPアドレスに対して名前が割り振られていない場合も多い。また、攻撃の踏み台に使われている場合、どういった組織のコンピュータが悪用されているのか調べる必要がある。こういう場合には、IPアドレスからコンピュータ名を調べることも多い。(逆引き)
$ nslookup 192.156.146.100 100.146.156.192.in-addr.arpa name = sv1.ip.fukui-nct.ac.jp. $ dig -x 192.156.146.100 # dig で逆引きするときは、-x オプションが必要
逆引きでホスト名が調べられないとか、逆引きしたホスト名で再びIPアドレスを調べるとホスト名が異なる場合は、IPアドレスとドメイン名の管理が怪しい危険なコンピュータの可能性がある。場合によっては、DNSサーバが汚染されていて、コンピュータ名でアクセスしたら悪意のあるサーバに接続される危険性もある。(DNSポイズニング)
パブリック DNS
末端組織のDNSの場合、IPアドレスは組織内でしか使えないプライベートアドレス(例:10.xx.xx.xx , 192.168.xx.xx)の場合、組織内専用の DNS が動いていることが多い。この場合、組織内の DNS と組織外の DNS では、異なる情報が得られる場合もある。
こういう場合は、DNS に問い合わせをする場合に、外部の DNS を指定する。特に、Google パプリック DNS は、DNSサーバのIPアドレスが 8.8.8.8 という覚えやすい値が使われている。
$ nslookup 192.156.146.100 8.8.8.8 100.146.156.192.in-addr.arpa name = sv1.ip.fukui-nct.ac.jp. $ dig @8.8.8.8 192.156.146.100 # dig でDNSサーバを指定するときは、@の後ろで指定
DNS の特殊な情報
DNS には、IPアドレスとホスト名以外にも、様々な情報が登録されている。この情報を調べるには、タイプを指定する。(-query=タイプ のオプションをつける)
$ nslookup -query=a www.google.com 8.8.8.8 # IPv4 アドレスを調べる Name: www.google.com Address: 216.58.199.228 $ nslookup -query=aaaa www.google.com 8.8.8.8 # IPv6アドレスを調べる Name: www.google.com Address: 2404:6800:400a:80c::2004 $ nslookup -query=mx fukui-nct.ac.jp 8.8.8.8 # メールを送るサーバを調べる fukui-nct.ac.jp mail exchanger = 10 ews.ip.fukui-nct.ac.jp. $ nslookup -query=txt tsaitoh.net 8.8.8.8 # その他のTXT情報を調べる tsaitoh.net text = "v=spf1 +ip4:xx.xx.xx.xx..." # この例では、メールサーバの検証方法 SPF の情報が見れた。