Linux リテラシ2006 - 第4回 ネットワーク

nananeko

ネットワークは Linux だけではなく、Windows や他の OS にも関わる重要な要素です。理解しておくと、この先役にたつでしょう。

ネットワークの基本概念

どうやって通信を行うのか?~プロトコル~

日本語しか使えない人と英語しか使えない人の間ではうまく会話できません。同じことがネットワークにも言え、ネットワーク上で通信をするときに対応しているプロトコルが違うと通信が出来ません。プロトコルとは通信で使用する手段、手順、方式などをまとめた決め事のことを言います。よく耳にするものを上げれば HTTP や FTP 、SMTP、POP があります。

また、HTTP や FTP などは TCP (Transmission Control Protocol) という別のプロトコルの上に成り立っていて、さらに TCP 自体も IP (Internet Protocol) というプロトコルの上に成り立っています。この TCP と IP は一緒に用いられることが多く、TCP/IP と表記されます。このようにいくつものプロトコルが積み重なっている構造を プロトコルスタック と呼びます。

IPアドレスとポート番号

コンピューターをネットワークに接続すると、そのコンピューターを識別するために IP アドレス が割り当てられます(※)。これはネットワーク上での住所や電話番号に相当するもので、以下のように表現される 32ビットのデータです。

133.25.90.36
66.102.7.99

※同一ネットワークに IP アドレスを割り振るサーバ(DHCPサーバ)があり、かつ IP アドレスを割り振るように設定されている場合に限る

また、コンピューター上のプログラムが複数のコンピューターと通信を行っている可能性があります。このとき、IP アドレスだけではコンピューター上のどのプログラムにデータを届ければいいかわかりません。そこで、ポート番号を指定してデータを届けるプログラムを明確にします。ポート番号はマンションで言うところの部屋番号に近いものです。この番号は 1~65535 までの数字が使われます。

以下に TCP/IP の主要なプロトコルが慣例的に使用するポートを ウェル ノウン (Well-Known) ポート と呼び、次のようなものが有名です。

ポート番号 プロトコル サービス
20 FTP データ送受信
21 FTP コマンド送受信
22 SSH リモートシェル
25 SMTP Eメール送信
110 POP Eメール受信
80 HTTP World Wide Web

ネットワークの情報を見る

ネットワーク・インターフェース(※)の情報を表示、変更が出来るコマンドです。引数をとらない場合は現在動作しているネットワークの情報をみることができます。

ifconfig [オプション]

今動作しているネットワークの情報を見る

# ifconfig

※ネットワークを使うための窓口

プライベート IP アドレス

LAN(※)などの限られたネットワークの範囲(会社のオフィスや大学のネットワークなど)ではプライベート IP アドレスが使用され、オフィスなどの内線によく例えられます。これはそのネットワークの管理者によって自由に決めることが出来ますが、プライベート IP アドレスだけの状態ではそのネットワークの「外側」にはアクセスできません。

Local Area Network
企業内や学校内での限られた場所でのコンピュータ同士の通信のことです。

ネットワークが通じているか調べる

ping ホスト名

cis.k.hosei.ac.jpにアクセスして、ネットワークが通じているか調べる

ping cis.k.hosei.ac.jp

終了時は CTRL + C

サブネット、サブネットマスク

いくら限られたネットワーク内とはいえ、その規模は様々です。教室くらいの部屋のネットワークもあれば、大企業では巨大なネットワークが用いられることもしばしばあります。巨大なネットワークになればなるほど、それに比例して管理も難しくなってきます。そこで、巨大なネットワークを細かく分け、小さなネットワークの集まりとして考えようとするものがサブネットです。たとえば、小金井キャンパスで工学部と情報科学部といった単位でネットワークを分割していくことでネットワークへの負荷が減り、管理もしやすくなります。

コンピューターがどのサブネットに属しているかは、割り当てられた IP アドレスを調べることでわかります。その際に必要なのがサブネットマスクです。また、IP アドレスは 2 つの部分で構成されていて、それぞれをネットワークアドレスとホストアドレスと呼びます。

たとえば、IP アドレスが 「192.168.1.54」で、サブネットマスクが「255.255.255.0」だとします。それぞれを 32 ビットの2進数であらわすと、それぞれ

「192.168.1.54」 (10進数) =「11000000 10101000 00000001 00110110」(2進数)

「255.255.255.0」(10進数) =「11111111 11111111 11111111 00000000」(2進数)

となります。これらのビットごとの論理積をとると

「192.168.1.0」 (10進数) =「11000000 10101000 00000001 00000000」(2進数)

となり、ネットワークアドレスが「192.168.1.0」、ホストアドレスが「54」であることがわかります。ネットワークアドレスの表現として、「192.168.1.0/24」のようなものがあります。これは、「ネットワークアドレスが 192.168.1.0 で、IP アドレスの上位 24 ビットがネットワークアドレスである」ネットワークを表すので、あわせて覚えておいてください。

グローバル IP アドレス

プライベート IP アドレスと対になる言葉で世界で一意に決められた IP アドレスを使用します。識別できるは最大の数は2の32乗個(約43億個※)あり、世界に1つだけの値を必要とします。そのためグローバル IP アドレスは プライベート IP アドレスと違い各国の公的な機関によって割り振られます。日本の場合は JPNIC という機関によって国内のグローバル IP アドレスが管理されています。

※IPv4 という規格での数値

ドメイン名

IP アドレスはネットワーク上でのコンピューターの識別するためのものと言いましたが、数字の羅列のままでは覚えにくく扱いづらいです。そこでIP アドレスに対して意味のある文字列を対応させたものがドメイン名です。ドメイン名はDNS(Domain Name System)サーバーによって管理されます。

例えば、「133.25.90.36」には「rat.cis.k.hosei.ac.jp」に対応しています。これはブラウザーが DNS サーバーに「rat.cis.k.hosei.ac.jp」と関連付けられた IP アドレスを問い合わせ、サーバーから返ってきた「133.25.90.36」という IP アドレスを持つコンピューターに接続するためです。

ドメイン名から IP アドレスを調べる

このコマンドは、指定されたホストやドメインの情報を実際に DNS サーバーに問い合わせ、結果を表示します。IP アドレスからドメイン名を調べたり、ドメイン名から IP アドレスを調べることができます。

dig [オプション] ホスト名

cis.k.hosei.ac.jpにアクセスし、IP アドレスを調べる

dig cis.k.hosei.ac.jp

ファイヤーウォール

iptables

Kernel 2.4 以降を搭載した Linux では iptables というプログラムを用いてファイアーウォールを設定します。 "特定のポートに対して特定のアクセス元のみ接続を許可/不許可する" といった設定を組み合わせて構成していきます。一般的には、最初にすべてのポートをふさいで必要最小限だけを開放するように構成されることが多いです。設定ファイルは /etc/sysconfig/iptables です。

/etc/sysconfig/iptables

以下は実際の設定例です。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

それぞれの行は次のような意味を表します。(細かい用語は各自で調べてください)

*filter
テーブル名
:INPUT DROP [0:0]
INPUT チェインの宣言 (すべての入力パケットを破棄する)
:FORWARD DROP [0:0]
FORWARD チェインの宣言 (すべての転送パケットを破棄する)
:OUTPUT ACCEPT [0:0]
OUTPUT チェインの宣言 (すべての出力パケットを許可する)
-A INPUT -i lo -j ACCEPT
ループバック インターフェースへの入力パケットを許可する
-A INPUT -p icmp --icmp-type any -j ACCEPT
すべての ICMP パケットを許可する
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
すでに確立しているセッションや、それらに関係する入力パケットを許可する
-A INPUT -j REJECT --reject-with icmp-host-prohibited
拒否された ICMP パケットの応答としてエラーパケットを返す
COMMIT
テーブル宣言の終わり
ICMP はプロトコルの一種で、接続されたコンピューターやネットワーク機器の間で
お互いの状態を確認するために用いられます。後述する ping コマンドなどで使用し、
ネットワーク障害などの調査に用います。
ICMP パケットを許可することで、ネットワークのより正確な診断が可能になります。

ここで表示した例は最小構成で、外部からの接続をすべて拒否してしまいます。これでは SSH サーバーなどが動作していてもサービスを行うことができません。では、ポートを開放する設定を追加してみましょう。

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

これは「TCP の ポート 22 へのアクセスを許可する」という意味の設定で、SSH サーバーに外部からアクセスできるようにする例です。設定の先頭を -A にした場合、上に書かれている設定が優先されるので、この場合は 6 行目と 7 行目の間に追加して行くのがよいでしょう。

設定変更後、反映するために以下のコマンドを実行します。OK の表示が出れば成功です。

[root@cisnote ~]# /etc/init.d/iptables restart
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]

iptables は、「特定のアクセス元のみ許可する」や「特定のネットワークからのアクセスのみ拒否する」といった指定の仕方もあります。これには -s オプションを使います。次の例は「ポート 139 への入力パケットは 192.168.1.0/24 からのみ許可する」という例です。

-A INPUT -p tcp -m tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT

ほかのオプションや詳しい説明は iptables のマニュアルを参照してください。

特定のポートに接続する

このコマンドはリモートシェル、 TELNETのクライアントですが、任意のホストの任意のポートに接続し通信が出来るため、サーバーからのメッセージを直接見たい場合などに便利です。

telnet [オプション] ホスト名 ポート番号

cis.k.hosei.ac.jp に 80番ポートで接続する

telnet cis.k.hosei.ac.jp 80

終了時は CTRL + ]
の後に q