この演習の目的は通りです。
次のような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で、自動的に設定するとよいでしょう。
NAT-1/NAT-2はRouter として Configurationします。Configurationの内容は、次のようになります。
ただし、
とします。
次のようにipchainsを実行することにより、Net 192.168.1.0/24から他のNetworkへのパケットを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)
同じくipchainsで、現在の設定を確認することができます。
[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を使います。
[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は、onlineマニュアルを表示するコマンドです。引数に、コマンド名を与えることにより、そのコマンドのマニュアルが画面に表示されます。
今でこそ、Webが隆盛になり、様々なことを調べるには、Webの検索エンジン(4)に、知りたいことに関する、keywordを入力するだけで、そのkeywordに関連した様々な情報が入手できるようになりました。しかし、そのように便利な世の中になるまでは、「コマンドのことが知りたければ、まずは、manを見ろ」が、unix管理者の合言葉でした。
manは、コマンド名を指定するだけで、コマンドの機能や、コマンドに与える引数の意味、そのコマンドと関係している(設定)ファイルや、環境変数、挙句の果てには、バグまで乗っている、優れものの解説書です。
今となっては、上述のように、Web上の情報に比較すると、多少見劣りするようになりました(5)が、Webから望みの情報を検索するのには、多少のテクニックが必要(6)ですし、我々Network管理者は、Internetへの接続が常に、保証されているわけでもありません(7)ので、そんな場合に、最後の拠所になるのは、このmanと言えるでしょう。
なんだかんだと言っても、今後も、暫くは、引続きmanが、unix管理者の座右の書の一つであることは間違いないことでしょう。
えっ?「manはどうやって使うか?」ですか?もちろん、「man man」とすれば...
次の点を確認してください。
次のような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 )を利用することに注意。
Nat-1/Nat-3は、実験1と同じです。Nat-2では次のように指定します。
[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]#
実験1と、同様なチェックをしてみましょう。
ipchainsを利用することによってfirewall rule ( access control list )を書くことも可能(8)です。
次のようなruleを追加することによって、特定のip addressを持つHostへの通信を停止することができます。
[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を組合せることにより、細かく許諾して、残りを大雑把に禁止するといった利用が可能になっています。
FireWall Ruleとしては、ip address ( Network層のaddress )以外にも、Port Number (トランスポート層の情報)を利用して、Filteringが可能です。
例えば、次のようにしてhttp ( Port 80 )のfilteringを行い(9)、Webの参照を禁止することができます。
[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のNetworkで、Nat-1に色々なFiltering Ruleを追加し、実際に、Filteringがうまく行くことを確認しなさい。
Linux での設定方法にあるように、Linux ( unix一般)では、サービスの設定は、Configuration File (設定ファイル)に保存します。
また、設定を有効にするには、サービスの起動スクリプトを使います。
ipchainsでは(10)次のようになります。
ipchainsのConfiguration File ( /etc/sysconfig/ipchains )は、原則として、ipchainsの引数に与える、パラメータをそのまま一行にしたようなかんじになっています。
例えば、実験1に相当する、内容は次のようになっています。
: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の起動は、起動スクリプトを利用することによって、簡単に実行できます。
[root@Linux-X /root]# /etc/rc.d/init.d/ipchains start [root@Linux-X /root]#
[root@Linux-X /root]# /etc/rc.d/init.d/ipchains stop [root@Linux-X /root]#
ipchainsの設定を起動時に有効にする場合は、/etc/rc.d/rc3.dの中にあるK08ipchainsの名前を書換えます。
ipchainsの設定は、試行錯誤が必要なことがあります。この為に、一々、設定ファイルを変更して、ipchainsの設定をやりなおすより、ipchainsコマンド直接実行して確かめる方が簡単なことがあります。
しかし、ipchainsで直接設定を行うと、その結果は、次の起動時には、反映されません。そのためには、設定ファイルを更新する必要があります。
ところが、残念なことにipchains -Lの出力と、設定ファイルの内容は、微妙に異ります。
そこで、登場するのが、ipchains-saveです。このコマンドは、現在の設定を設定ファイルの形式で画面に出力します。
そこで、現在手動で設定されている内容を、恒久的にするには、次のようなコマンドを実行するればよいことになります。
[root@Linux-X /root]# ipchains-save > /etc/sysconfig/ipchains [root@Linux-X /root]#
上記のipchains-saveの逆の作業を行うのが、ipchains-restoreです。このコマンドは、ファイルの内容を、まとめて読み込んで、ipchainsに設定します。
[root@Linux-X /root]# ipchains-restore -f < \ /etc/sysconfig/ipchains [root@Linux-X /root]#
上の例では、起動時の設定に戻しているわけですが、もちろん、ファイルは、/etc/sysconfig/ipchainsである必要は全くないので、一時的な、設定内容を保存しておき、それを一挙に反映する場合など、ipchains-saveとの組み合わあせで、強力に役立つtoolになっています。
色々なipchainsの設定を行い、それを、ipchains-saveを使って、色々な名前で保存しなさい。また、保存した内容をipchains-restoreを使って、反映させてみなさい。