Powered by SmartDoc

情報通信ネットワーク論[演習] (2005/11/01)
Ver. 1.2

2005年11月1日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2005/ccna/ccna-ex/ccna-ex.html
情報通信ネットワーク論(演習)2005/11/01 の資料

目次

目的

この演習の目的は通りです。

ipchainsの利用(新規)
ipchains(1)を利用して、IP Masquarade機能を実現します。
  1. 最近のtoolはiptablesです。ipchainsと操作方法は、ほぼ、同じ、機能は、ずっと上という感じです。

Nat 箱の構築

実験ネットワーク

次のようなNetworkを構築する。

              TCP/Dump    [Global]       Internet
               |       192.168.3.0/26       |
        >------+----------------------------+-------<
               |                            |
               NAT-1                      NAT-2
            [192.168.1.1]             [192.168.1.1]
               |                            |
        >------+------<              >------+------<
               | 192.168.1.0/24             | 192.168.1.0/24
            [192.168.1.2]             [192.168.1.2]
              PC                            PC
                             [Private]

Private側は、同じAddres空間( 192.168.1.0/24 )を利用することに注意。

Global側は、普段、教室からInternetを利用するために利用するNetworkにし、IP AddressはDHCPで、自動的に設定するとよいでしょう。

Router としての設定

NAT-1/NAT-2はRouter として Configurationします。Configurationの内容は、次のようになります。

ただし、

とします。

ipchains の実行

次のようにipchainsを実行することにより、Net 192.168.1.0/24から他のNetworkへのパケットをIP Masquaradeします。

IP Masquarade の実行
[root@Linux-X /root]# ipchains -I forward -s 192.168.1.0/24 -d \
    0.0.0.0/0 -j MASQ
[root@Linux-X /root]# 

各ipchainsのオプション引数の意味(2)

-I
Insert: Ruleの挿入を指示します。これが-Dだとdeleteつまり、削除になります。
forward
Ruleを登録する先( chain Name )になります。forwardの他に、inputやoutput等がありますが、Masquaradeするときはforwardと覚えておきましょう。
-s 192.168.1.0/24
変換を行うpacketeのsource (通信元) IP Addressの範囲を指定します。ここでは、Private Network ( 192.168.1.0/24 )のパケットが対象なので、このような指定になります。
-d 0.0.0.0/0
変換を行うpacketeのdestination (通信先) IP Addressの範囲を指定します。ここでは、全て変換を行うという意味で0.0.0.0/0を指定しています。
-j MASQ
-jオプションは本来、「何をするか」の指示を行う(3)のですが、今回は、masquaradeなのでMASQと指定します。

同じくipchainsで、現在の設定を確認することができます。

FireWall Rule の確認
[root@Linux-X /root]# ipchains -L
Chain input (policy ACCEPT):
Chain forward (policy ACCEPT):
target prot opt source destination ports
MASQ all ------ 192.168.1.0/24 anywhere n/a
Chain output (policy ACCEPT):
[root@Linux-X /root]# 

逆に、Ruleを削除するには、-Iの代わりに、-Dを使います。

Rule の削除
[root@Linux-X /root]# ipchains -D forward -s 192.168.1.0/24 -d \
    0.0.0.0/0 -j MASQ
[root@Linux-X /root]# 
man に始まり man に終る

manは、onlineマニュアルを表示するコマンドです。引数に、コマンド名を与えることにより、そのコマンドのマニュアルが画面に表示されます。

今でこそ、Webが隆盛になり、様々なことを調べるには、Webの検索エンジン(4)に、知りたいことに関する、keywordを入力するだけで、そのkeywordに関連した様々な情報が入手できるようになりました。しかし、そのように便利な世の中になるまでは、「コマンドのことが知りたければ、まずは、manを見ろ」が、unix管理者の合言葉でした。

manは、コマンド名を指定するだけで、コマンドの機能や、コマンドに与える引数の意味、そのコマンドと関係している(設定)ファイルや、環境変数、挙句の果てには、バグまで乗っている、優れものの解説書です。

今となっては、上述のように、Web上の情報に比較すると、多少見劣りするようになりました(5)が、Webから望みの情報を検索するのには、多少のテクニックが必要(6)ですし、我々Network管理者は、Internetへの接続が常に、保証されているわけでもありません(7)ので、そんな場合に、最後の拠所になるのは、このmanと言えるでしょう。

なんだかんだと言っても、今後も、暫くは、引続きmanが、unix管理者の座右の書の一つであることは間違いないことでしょう。

えっ?「manはどうやって使うか?」ですか?もちろん、「man man」とすれば...

  1. 詳しくはmanしよう。
  2. MASQは、「masquaradeする」。ACCEPTは、「受け入れる」。DENYは、「捨てる」。詳しくはmanを参照のこと。
  3. 例えば、googleなど..
  4. manは、初心者向けというよりは、ある程度の熟練者を想定して書いてありますので、取っつきが悪い嫌いがあります。
  5. 散々、探し回った挙句、表示されるのが結局、manの内容だったりすると、余り笑えない話ですよね..
  6. それに比較して、manは、(Installされていれば...)確実に、そのコマンドの情報を提示してくれます

実験 1

次の点を確認してください。

Nat 箱のカスケード

実験ネットワーク

次のようなNetworkを構築する。

              TCP/Dump    [Global]       Internet
               |       192.168.3.0/26       |
        >------+----------------------------+-------<
               |
               NAT-1
            [192.168.1.1]
               |
        >------+------< [Private 1 192.168.1.0/24]
               |
            [192.168.1.2]
               NAT-2
            [192.168.2.1]
               |
        >------+------< [Private 2 192.168.2.0/24]
               |
            [192.168.2.2]
               NAT-3
            [192.168.1.1]
               |
        >------+------< [Private 3 192.168.1.0/24]
               |
            [192.168.1.2]
              PC
                             [Private]

Private-1とPrivate-3は、同じAddres空間( 192.168.1.0/24 )を利用することに注意。

ipchains の実行

Nat-1/Nat-3は、実験1と同じです。Nat-2では次のように指定します。

Nat-2 の ipchains の実行
[root@Linux-X /root]# ipchains -I forward -s 192.168.2.0/24 -d \
    0.0.0.0/0 -j MASQ
[root@Linux-X /root]# 

実験 2

実験1と、同様なチェックをしてみましょう。

フィルタリング

ipchainsを利用することによってfirewall rule ( access control list )を書くことも可能(8)です。

  1. というか、本来ipchainsはfirewall ruleを記述するためのtoolとして設計されました。

ip address による filtering

次のようなruleを追加することによって、特定のip addressを持つHostへの通信を停止することができます。

数学 Web Server への access 禁止
[root@Linux-X /root]# ipchains -I input -s 192.168.1.0/24 -d \
    133.43.100.131/32 -j DENY
[root@Linux-X /root]# 

これによって、Private側からGlobal側への通信の内、133.43.100.133 ( www.math.cst.nihon-u.ac.jp )への通信が禁止されます。

禁止Ruleは、今回のHost単位( /32 )だけでなく、Network単位でも可能です。

数学科全体を禁止するのであれば、133.43.100.0/24と指定すると良いでしょう。

これらのRuleは、複数指定することも可能で、-I ( Insert :前に入れる)の代わりに、-A ( Append :後に加える)を利用することによって、複数のRuleを次々と順番に入れることができます。

これらのruleは、上から順番に適用され、どれか一つでも成立すれば、その時点でruleに指定された処理( DENY, etc ... )が実施され、それ以後のruleは、原則として適用されません。

ACCEPTとDENYを組合せることにより、細かく許諾して、残りを大雑把に禁止するといった利用が可能になっています。

port Number による filtering

FireWall Ruleとしては、ip address ( Network層のaddress )以外にも、Port Number (トランスポート層の情報)を利用して、Filteringが可能です。

例えば、次のようにしてhttp ( Port 80 )のfilteringを行い(9)、Webの参照を禁止することができます。

Web Server への access 禁止
[root@Linux-X /root]# ipchains -I input -s 192.168.1.0/24 -d \
    0.0.0.0/0 --destination-port 80 -j DENY
[root@Linux-X /root]# 

これにより、通常の通信は可能ですが、80 portを使う通信(すなわちhttp / Web Access )だけは禁止するといったことができます。

  1. 実験2で、filtering ruleがそのままになっている場合は-Dで、そのruleを削っておきましょう。

実験 3

実験1のNetworkで、Nat-1に色々なFiltering Ruleを追加し、実際に、Filteringがうまく行くことを確認しなさい。

ipchains の管理

ipchains の設定

ipchains に関係するファイル

Linux での設定方法にあるように、Linux ( unix一般)では、サービスの設定は、Configuration File (設定ファイル)に保存します。

また、設定を有効にするには、サービスの起動スクリプトを使います。

ipchainsでは(10)次のようになります。

  1. 最近のLinuxでは、ipchainsではなく、iptablesを使います。当然、設定ファイル名なり、起動スクリプトは異るわけですが..。しかし、考えてみると、なんとなく、「何処に、どんな名前であるか」は想像が付そうですね?もし、最近のLinux ( Fedora Code )に触る機会があるのであれば、調べてみましょう。

ipchains の設定ファイル

ipchainsのConfiguration File ( /etc/sysconfig/ipchains )は、原則として、ipchainsの引数に与える、パラメータをそのまま一行にしたようなかんじになっています。

例えば、実験1に相当する、内容は次のようになっています。

masquarade を行う場合の設定内容
:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A forward -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0.0.0.0 -j \
    MASQ

ipchains の起動スクリプト

設定ファイルが、きちんとできていれば、ipchainsの起動は、起動スクリプトを利用することによって、簡単に実行できます。

ipchains の有効化
[root@Linux-X /root]# /etc/rc.d/init.d/ipchains start
[root@Linux-X /root]# 
ipchains の無効化
[root@Linux-X /root]# /etc/rc.d/init.d/ipchains stop
[root@Linux-X /root]# 

ipchains の設定の恒久化

ipchainsの設定を起動時に有効にする場合は、/etc/rc.d/rc3.dの中にあるK08ipchainsの名前を書換えます。

ipchains の設定関係する便利なコマンド

ipchains の設定のファイル化

ipchainsの設定は、試行錯誤が必要なことがあります。この為に、一々、設定ファイルを変更して、ipchainsの設定をやりなおすより、ipchainsコマンド直接実行して確かめる方が簡単なことがあります。

しかし、ipchainsで直接設定を行うと、その結果は、次の起動時には、反映されません。そのためには、設定ファイルを更新する必要があります。

ところが、残念なことにipchains -Lの出力と、設定ファイルの内容は、微妙に異ります。

そこで、登場するのが、ipchains-saveです。このコマンドは、現在の設定を設定ファイルの形式で画面に出力します。

そこで、現在手動で設定されている内容を、恒久的にするには、次のようなコマンドを実行するればよいことになります。

ipchains の設定の保存
[root@Linux-X /root]# ipchains-save > /etc/sysconfig/ipchains
[root@Linux-X /root]# 

ファイルから ipchains の設定を読み込む

上記のipchains-saveの逆の作業を行うのが、ipchains-restoreです。このコマンドは、ファイルの内容を、まとめて読み込んで、ipchainsに設定します。

ipchains の設定の読み込み
[root@Linux-X /root]# ipchains-restore -f < \
    /etc/sysconfig/ipchains
[root@Linux-X /root]# 

上の例では、起動時の設定に戻しているわけですが、もちろん、ファイルは、/etc/sysconfig/ipchainsである必要は全くないので、一時的な、設定内容を保存しておき、それを一挙に反映する場合など、ipchains-saveとの組み合わあせで、強力に役立つtoolになっています。

実験 4

色々なipchainsの設定を行い、それを、ipchains-saveを使って、色々な名前で保存しなさい。また、保存した内容をipchains-restoreを使って、反映させてみなさい。