Linux リテラシ - 第5回 ネットワーク
This content is not available in your language yet.
今回はネットワーク全般についての基本的な事を取り上げます。今回の内容は Linux だけでなく、Windows や他の OS にも共通した内容もあるのでぜひ理解しておいてください。
ネットワークの基本概念
Section titled “ネットワークの基本概念”プロトコル とは、HTTP や FTP などのように、ネットワークを介して通信する上でお互いに決められた約束事です。日本語しか使えない人と英語しか使えない人がうまく会話できないのと同じように、対応しているプロトコルが違うと正しく通信することができません。
また、HTTP や FTP は TCP (Transmission Control Protocol) という別のプロトコルの上に成り立っていて、さらに TCP 自体も IP (Internet Protocol) というプロトコルの上に成り立っています。このようにいくつものプロトコルが積み重なっている構造を プロトコルスタック と呼びます。
IP アドレス
Section titled “IP アドレス”コンピューターをインターネットに接続すると、そのコンピューターを識別するために IP アドレス が割り当てられます。これは、住所や電話番号に相当するもので、以下のように表現される 32ビットのデータです。
133.25.90.3666.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 アドレスの種類
Section titled “IP アドレスの種類”IP アドレスには、 グローバル アドレス と ローカル (プライベート) アドレス があります。
:グローバル アドレス:インターネット全体で一意のアドレス。公的な機関にあらかじめ申請する必要がある。
:ローカル アドレス:LAN など、同一のネットワーク内で有効なアドレス。自由に割り当てることができる。
グローバルアドレスを管理する機関は各国にあり、日本の場合は JPNIC に申請可能です。また、ローカルアドレスは慣例的に 192.168.0.1 ~ 192.168.0.255 や 192.168.1.1 ~ 192.168.1.255 などが良く用いられます。
インターネットのようなネットワークは大規模すぎて一元的に管理するのは不可能です。そこで用いられるのが サブネットです。
サブネットは、大きなネットワークを分割管理する際の管理単位となる小さなネットワークです。コンピューターがどのサブネットに属しているかは、割り当てられた IP アドレスを調べることでわかります。その際に必要なのが ネットマスク です。また、IP アドレスは 2 つの部分で構成されていて、それぞれを ”ネットワーク アドレス” と ”ホスト アドレス” と呼びます。
:ネットワーク アドレス:IP アドレスの上位のビットで表現される。コンピューターが所属するサブネットを識別するアドレス。
:ホスト アドレス:IP アドレスからネットワークアドレスを除いた残りの部分。サブネット内でコンピューターを識別するアドレス。
:ネットマスク:IP アドレスのどこまでがネットワークアドレスで、どこからがホストアドレスかをあらわす。
たとえば、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 アドレス
Section titled “特殊な IP アドレス”上記のほかに ループバック アドレス と ブロードキャスト アドレス と呼ばれる特殊な IP アドレスが存在します。
ループバック アドレス
Section titled “ループバック アドレス”ループバックアドレスとは どのネットワークに所属しているかにかかわらず”コンピューター自身を表すアドレス” で、一般に「127.0.0.1」が用いられます。このアドレスは、ネットワークに接続していない状態でも有効なため、ネットワークプログラムのデバッグに使用したりもします。
ブロードキャスト アドレス
Section titled “ブロードキャスト アドレス”ブロードキャスト アドレス とは、ネットワーク内のすべての端末にデータを送信するために使われるアドレスで、「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 アドレスを手動で割り当てる
Section titled “IP アドレスを手動で割り当てる”一般家庭用のルーターなどでは、IP アドレスは DHCP サーバー によって自動的に割り当てられますが、DHCP サーバーがない場合などは手動で割り当てなければなりません。そのための設定ファイルは、Red Hat 系ディストリビューションの場合 /etc/sysconfig/network-scripts/ にある、ifcfg-”デバイス名” というファイルです。
/etc/sysconfig/network-scripts/ifcfg-eth0
Section titled “/etc/sysconfig/network-scripts/ifcfg-eth0”DEVICE=eth0BOOTPROTO=staticBROADCAST=192.168.1.255HWADDR=00:D0:B7:2A:40:5DIPADDR=192.168.1.54NETMASK=255.255.255.0NETWORK=192.168.1.0ONBOOT=yesTYPE=Ethernet| 項目 | 内容 |
|---|---|
| DEVICE | デバイス名 |
| BOOTPROTO | ブート時などに使用するプロトコル |
| BROADCAST | ブロードキャストアドレス |
| HWADDR | MAC アドレス |
| IPADDR | IP アドレス |
| NETMASK | ネットマスク |
| NETWORK | ネットワークアドレス |
| ONBOOT | ブート時に有効にするか否か |
| TYPE | インターフェイスの種類 |
このファイルを直接編集するのはいささか面倒なため、わかりやすい設定プログラムが用意されています。それが netconfig です。
netconfig [-d デバイス名]
デフォルトゲートウェイとは、外部のネットワークにアクセスする際に最初に通るネットワーク機器のことです。一番近いルーターなどのアドレスになります。また、ネームサーバーは DNS サーバーを表します。この項目を指定しないとドメイン名によるアクセスができなくなってしまいます。
どちらの方法でも設定を適用するためには network デーモンを再起動する必要があるので忘れないでください。
[root@Alixia root]# /etc/init.d/network restartShutting down interface eth0: [ OK ]Shutting down loopback interface: [ OK ]Setting network parameters: [ OK ]Bringing up loopback interface: [ OK ]Bringing up interface eth0: [ OK ]ファイアーウォール
Section titled “ファイアーウォール”ファイアーウォールとは、アタックなどの不正なアクセスからコンピューターを守る “防火壁” のようなものです。ファイアーウォールには、ソフトウェアによる実装とハードウェアによる実装がありますが、ここで紹介するのはソフトウェアによる実装です。
iptables
Section titled “iptables”Kernel 2.4 以降を搭載した Linux では iptables というプログラムを用いてファイアーウォールを設定します。 “特定のポートに対して特定のアクセス元のみ接続を許可/不許可する” といった設定を組み合わせて構成していきます。一般的には、最初にすべてのポートをふさいで必要最小限だけを開放するように構成されることが多いです。設定ファイルは /etc/sysconfig/iptables です。
/etc/sysconfig/iptables
Section titled “/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-prohibitedCOMMITそれぞれの行は次のような意味を表します。(細かい用語は各自で調べてください)
: *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 サーバーや 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 restartFlushing 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 のマニュアルを参照してください。
ネットワーク関連コマンド
Section titled “ネットワーク関連コマンド”telnet
Section titled “telnet”このコマンドは、本来 リモートシェルの一種である TELNET のクライアントですが、任意のホストの任意のポートに接続して通信することができるため、サーバーからのメッセージを直接見たいときなどに重宝します。
[root@Alixia root]# telnet 192.168.1.54 80Trying 192.168.1.54...Connected to 192.168.1.54.Escape character is '^]'.HEAD / HTTP/1.0
HTTP/1.1 403 ForbiddenDate: Tue, 14 Jun 2005 01:53:55 GMTServer: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g PHP/4.3.11 mod_jk2/2.0.4Connection: closeContent-Type: text/html; charset=iso-8859-1
Connection closed by foreign host.このコマンドは、接続が切れると自動的に終了しますが、”Ctrl+ ]” でコマンドモードにして quit コマンドを実行することでも終了できます。
このコマンドは、指定されたアドレスにエコーパケットを送り返信があるか否かを表示します。これによって目的のアドレスに接続できるかどうかを調べることができます。返信がなかった場合、相手のネットワークがダウンしていたり、エコーパケットを無視している可能性があります。
[root@Alixia root]# ping www.google.co.jpPING 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 ms64 bytes from 64.233.179.104: icmp_seq=1 ttl=237 time=157 ms64 bytes from 64.233.179.104: icmp_seq=2 ttl=237 time=158 ms64 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 3001msrtt min/avg/max/mdev = 157.865/158.094/158.388/0.339 ms, pipe 2traceroute
Section titled “traceroute”このコマンドは、指定されたアドレスへ接続するための経路を調べることができます。ping で目的のアドレスから反応がなかった場合など、ネットワーク構成が正しいかどうかを確認するために用います。
[root@Alixia root]# traceroute www.google.co.jptraceroute: Warning: www.google.co.jp has multiple addresses; using 64.233.179.104traceroute 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 msnslookup
Section titled “nslookup”このコマンドは、指定されたホストやドメインの情報を実際に DNS サーバーに問い合わせ、結果を表示します。IP アドレスからドメイン名を調べたり、ドメイン名から IP アドレスを調べることができます。
[root@Alixia root]# nslookup www.google.co.jpServer: 133.25.236.65Address: 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.comAddress: 64.233.179.99Name: www.l.google.comAddress: 64.233.179.104ifconfig
Section titled “ifconfig”このコマンドは、ネットワークインターフェイスの情報を表示したり、変更したりすることができます。少々煩雑ではありますが、このコマンドでIP アドレスを変更することもできます。
[root@Alixia root]# ifconfigeth0 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)