今回はネットワーク全般についての基本的な事を取り上げます。今回の内容は Linux だけでなく、Windows や他の OS にも共通した内容もあるのでぜひ理解しておいてください。
プロトコル とは、HTTP や FTP などのように、ネットワークを介して通信する上でお互いに決められた約束事です。日本語しか使えない人と英語しか使えない人がうまく会話できないのと同じように、対応しているプロトコルが違うと正しく通信することができません。
また、HTTP や FTP は TCP (Transmission Control Protocol) という別のプロトコルの上に成り立っていて、さらに TCP 自体も IP (Internet Protocol) というプロトコルの上に成り立っています。このようにいくつものプロトコルが積み重なっている構造を プロトコルスタック と呼びます。
コンピューターをインターネットに接続すると、そのコンピューターを識別するために IP アドレス が割り当てられます。これは、住所や電話番号に相当するもので、以下のように表現される 32ビットのデータです。
133.25.90.36 66.102.7.99
これに加え、同時に複数のコンピューターと通信するために ポート と呼ばれる補助的な識別子が用いられます。これは、1 ~ 65535 までの数字であらわされるので ポート番号 とも呼ばれます。電話にたとえると、ひとつの番号に 外線1 と 外線2 があるようなものです。
TCP/IP の主要なプロトコルが慣例的に使用するポートを ウェル ノウン (Well-Known) ポート と呼び、次のようなものが有名です。
ポート番号 | プロトコル | サービス |
---|---|---|
20 | FTP | データ送受信 |
21 | FTP | コマンド送受信 |
22 | SSH | リモートシェル |
25 | SMTP | Eメール送信 |
110 | POP | Eメール受信 |
80 | HTTP | World Wide Web |
IP アドレスには、 グローバル アドレス と ローカル (プライベート) アドレス があります。
グローバルアドレスを管理する機関は各国にあり、日本の場合は JPNIC に申請可能です。また、ローカルアドレスは慣例的に 192.168.0.1 ~ 192.168.0.255 や 192.168.1.1 ~ 192.168.1.255 などが良く用いられます。
インターネットのようなネットワークは大規模すぎて一元的に管理するのは不可能です。そこで用いられるのが サブネットです。
サブネットは、大きなネットワークを分割管理する際の管理単位となる小さなネットワークです。コンピューターがどのサブネットに属しているかは、割り当てられた IP アドレスを調べることでわかります。その際に必要なのが ネットマスク です。また、IP アドレスは 2 つの部分で構成されていて、それぞれを ネットワーク アドレス と ホスト アドレス と呼びます。
たとえば、IP アドレスが 「192.168.1.54」で、ネットマスクが「255.255.255.0」だとします。それぞれを 32 ビットの2進数であらわすと、それぞれ「11000000101010000000000100110110」「11111111111111111111111100000000」となります。これらのビットごとの論理積をとると「11000000101010000000000100000000」となり、ネットワークアドレスが「192.168.1.0」、ホストアドレスが「54」であることがわかります。
ネットワークアドレスの表現として、「192.168.1.0/24」のようなものがあります。これは、「ネットワークアドレスが 192.168.1.0 で、IP アドレスの上位 24 ビットがネットワークアドレスである」ネットワークを表すので、あわせて覚えておいてください。
上記のほかに ループバック アドレス と ブロードキャスト アドレス と呼ばれる特殊な IP アドレスが存在します。
ループバックアドレスとは どのネットワークに所属しているかにかかわらずコンピューター自身を表すアドレス で、一般に「127.0.0.1」が用いられます。このアドレスは、ネットワークに接続していない状態でも有効なため、ネットワークプログラムのデバッグに使用したりもします。
ブロードキャスト アドレス とは、ネットワーク内のすべての端末にデータを送信するために使われるアドレスで、「255.255.255.255」か IP アドレスのホスト部のビットをすべて 1 にしたアドレスが用いられます。IP アドレスが 「192.168.1.54」で、ネットマスクが「255.255.255.0」だった場合、ブロードキャストアドレスは「192.168.1.255」となります。
たとえば、「http://66.102.7.99/」にアクセスすると何があるのでしょうか?このように、意味のない数字の羅列のままでは、覚えにくくて扱いにくいです。そこで考え出されたのが ドメイン名 です。ドメイン名は DNS (Domain Name System) サーバー により管理され、意味のある文字列と IP アドレスを対応付けます。
Web ブラウザーで「http://www.google.co.jp/」にアクセスする場合を例にとると、ブラウザーは DNS サーバーに「www.google.co.jp」に関連付けられた IP アドレスを問い合わせ、サーバーから返ってきた「66.102.7.99」という IP アドレスを持つコンピューターに接続します。
一般家庭用のルーターなどでは、IP アドレスは DHCP サーバー によって自動的に割り当てられますが、DHCP サーバーがない場合などは手動で割り当てなければなりません。そのための設定ファイルは、Red Hat 系ディストリビューションの場合 /etc/sysconfig/network-scripts/ にある、ifcfg-デバイス名 というファイルです。
DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.1.255 HWADDR=00:D0:B7:2A:40:5D IPADDR=192.168.1.54 NETMASK=255.255.255.0 NETWORK=192.168.1.0 ONBOOT=yes TYPE=Ethernet
項目 | 内容 |
---|---|
DEVICE | デバイス名 |
BOOTPROTO | ブート時などに使用するプロトコル |
BROADCAST | ブロードキャストアドレス |
HWADDR | MAC アドレス |
IPADDR | IP アドレス |
NETMASK | ネットマスク |
NETWORK | ネットワークアドレス |
ONBOOT | ブート時に有効にするか否か |
TYPE | インターフェイスの種類 |
このファイルを直接編集するのはいささか面倒なため、わかりやすい設定プログラムが用意されています。それが netconfig です。
netconfig [-d デバイス名]
デフォルトゲートウェイとは、外部のネットワークにアクセスする際に最初に通るネットワーク機器のことです。一番近いルーターなどのアドレスになります。また、ネームサーバーは DNS サーバーを表します。この項目を指定しないとドメイン名によるアクセスができなくなってしまいます。
どちらの方法でも設定を適用するためには network デーモンを再起動する必要があるので忘れないでください。
[root@Alixia root]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Setting network parameters: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ]
ファイアーウォールとは、アタックなどの不正なアクセスからコンピューターを守る "防火壁" のようなものです。ファイアーウォールには、ソフトウェアによる実装とハードウェアによる実装がありますが、ここで紹介するのはソフトウェアによる実装です。
Kernel 2.4 以降を搭載した Linux では 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
それぞれの行は次のような意味を表します。(細かい用語は各自で調べてください)
ICMP はプロトコルの一種で、接続されたコンピューターやネットワーク機器の間で お互いの状態を確認するために用いられます。後述する ping コマンドなどで使用し、 ネットワーク障害などの調査に用います。 ICMP パケットを許可することで、ネットワークのより正確な診断が可能になります。
ここで表示した例は最小構成で、外部からの接続をすべて拒否してしまいます。これでは SSH サーバーや Web サーバーのデーモンが動作していてもサービスを行うことができません。では、ポートを開放する設定を追加してみましょう。
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
これは「TCP の ポート 22 へのアクセスを許可する」という意味の設定で、SSH サーバーに外部からアクセスできるようにする例です。iptables の設定はファイルの後ろに書いてある設定が前の設定を上書きするので、この場合は 6 行目と 7 行目の間に追加して行くのがよいでしょう。
設定を変更したら iptables デーモンを再起動して変更を適用します。 OK の表示が出れば成功です。
[root@Alixia root]# /etc/init.d/iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ 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 のクライアントですが、任意のホストの任意のポートに接続して通信することができるため、サーバーからのメッセージを直接見たいときなどに重宝します。
[root@Alixia root]# telnet 192.168.1.54 80 Trying 192.168.1.54... Connected to 192.168.1.54. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 403 Forbidden Date: Tue, 14 Jun 2005 01:53:55 GMT Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g PHP/4.3.11 mod_jk2/2.0.4 Connection: close Content-Type: text/html; charset=iso-8859-1 Connection closed by foreign host.
このコマンドは、接続が切れると自動的に終了しますが、Ctrl+ ] でコマンドモードにして quit コマンドを実行することでも終了できます。
このコマンドは、指定されたアドレスにエコーパケットを送り返信があるか否かを表示します。これによって目的のアドレスに接続できるかどうかを調べることができます。返信がなかった場合、相手のネットワークがダウンしていたり、エコーパケットを無視している可能性があります。
[root@Alixia root]# ping www.google.co.jp PING www.l.google.com (64.233.179.104) 56(84) bytes of data. 64 bytes from 64.233.179.104: icmp_seq=0 ttl=237 time=158 ms 64 bytes from 64.233.179.104: icmp_seq=1 ttl=237 time=157 ms 64 bytes from 64.233.179.104: icmp_seq=2 ttl=237 time=158 ms 64 bytes from 64.233.179.104: icmp_seq=3 ttl=237 time=158 ms --- www.l.google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 157.865/158.094/158.388/0.339 ms, pipe 2
このコマンドは、指定されたアドレスへ接続するための経路を調べることができます。ping で目的のアドレスから反応がなかった場合など、ネットワーク構成が正しいかどうかを確認するために用います。
[root@Alixia root]# traceroute www.google.co.jp traceroute: Warning: www.google.co.jp has multiple addresses; using 64.233.179.104 traceroute to www.l.google.com (64.233.179.104), 30 hops max, 38 byte packets 1 gw-in.klab.k.hosei.ac.jp (133.25.236.65) 0.705 ms 0.419 ms 0.226 ms 2 133.25.82.2 (133.25.82.2) 0.401 ms 0.363 ms 0.325 ms 3 133.25.112.242 (133.25.112.242) 1.280 ms 1.076 ms 1.403 ms 4 133.25.112.225 (133.25.112.225) 2.681 ms 1.509 ms 1.459 ms 5 noukou-FE4-0-0.sinet.ad.jp (150.99.139.1) 2.608 ms 2.201 ms 1.177 ms
このコマンドは、指定されたホストやドメインの情報を実際に DNS サーバーに問い合わせ、結果を表示します。IP アドレスからドメイン名を調べたり、ドメイン名から IP アドレスを調べることができます。
[root@Alixia root]# nslookup www.google.co.jp Server: 133.25.236.65 Address: 133.25.236.65#53 Non-authoritative answer: www.google.co.jp canonical name = www.google.com. www.google.com canonical name = www.l.google.com. Name: www.l.google.com Address: 64.233.179.99 Name: www.l.google.com Address: 64.233.179.104
このコマンドは、ネットワークインターフェイスの情報を表示したり、変更したりすることができます。少々煩雑ではありますが、このコマンドでIP アドレスを変更することもできます。
[root@Alixia root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:D0:B7:2A:40:5D inet addr:192.168.1.54 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)