ROUTER
ルータ設定に関するメモ

ルータ(ラウタ)とは、異なるネットワークを接続する中継器(・・直訳すると経路器?)である。

ルータといえば、Cisco と言われるほど Ciscoはルータの デファクト スタンダードになっている。(最近はそうでもないって? そうねぇ、仕事場の新しいルータは CentreCOMだったりもするしね)
以下は 基本的に Cisco2500 の設定である。(ほとんどの場合、Cisco製の多くのルータで同様に設定可能と思われる・・4機種しかイジったことないが・・なお、Cisco IOSのバージョンは11.0以上を想定している)

ルータに LOGIN するには、CONSOLEポートからターミナルソフトを使用する方法もあるが、これは最初の設定時(なにしろ最初はIPアドレスがふられていない)等に使い、通常は telnet する。(くれぐれも自己ネットワークから)
password 要求があるので、 password を入力する。

User Access Verification

Password: XXXXXXXXXXXXXXXX (No Echo Back)

プロンプトが出てここにコマンドを入力する。

router>

ルータの設定変更のために、Configuration mode に移行する必要があるが、そのためのコマンドは enable 及び conf tである。このコマンド投入によって、プロンプトが以下のごとく変わるが、当然ながら enable用の password 入力が必要である。

router>enable
router#conf t
router(config)#

Configuration mode から抜けるには、exit または CTRL-Z を入力。この時点で、設定は即座に反映される が、このままでは 電源OFF で設定前の状態に戻ってしまうので、メモリに書き込むためには、次のコマンドを投入。

router#write memory

ただし、このコマンドは十分動作確認をおこなってから投入するべきだろう。(ミスった時は電源再投入で元に戻すことができるが、write memory してしまうと、再修正が必要。IPアドレスを間違うとヒジョーに疲れる)

なお、設定の確認のためのコマンドは、以下のとおり。

router#write terminal (略式の wr t でも可)

ルータは telnet で loginするための password と、Configurationモードに移行するための password の二つを持っている。
telnet loginのための password の設定/変更は、line vty 0 4 に対して施す。

router(config)#line vty 0 4
router(config-line)#password XXXXXXXXXXXXXXXX
router(config-line)#login

また、Configurationモード用の password は、次のコマンドで設定できる。

router(config)#enable password XXXXXXXXXXXXXXXX

Defaultでは write terminalすると password が見えてしまう。暗号化するために次のコマンドを投入。

router(config)#service password-encryption

ルータに名前をつける。ルータだからといって router とつけなくてもよい。(^_^) なお、この名前はDNS登録とは関係ない。(むしろDNSには登録しないのが一般的か)

router(config)#hostname hogehoge


TCP/IPでは、別のホスト(マシン/計算機)経由でパケットを送信することができ、この方法を悪用して、あたかも信頼できるホストからの接続のようにみせかけることができる(Loose Source Record Route)。次の設定は、このようなパケットを破棄する。

router(config)#no ip source-route

ルータが DNS を引きに行くのを止める。(ルータ自体がDNSを参照しなければならないことは ほとんどない・・というか、無駄)コマンドを間違って入力したときなどにも有効。(間違ったコマンドをhostnameと勘違いしてDNSを引きに行ってしまい、反応が遅れる)

router(config)#no ip domain-lookup

Classlessの環境で使用するための設定。
router(config)#ip classless

fingerサービスを停止。動いているとヤバいかもしれない。

router(config)#no ip finger
no service finger でもいいかもしれない。
ついでに、

httpサービスを停止。動いているとたぶんヤバい。(80番ポートを狙うWormとか。Nimda/CodeRedともいまだ健在)

router(config)#no ip http server

こんな感じにしておくのも良いと思う。変形Smurf等の踏み台にされないために。
router(config)#no service small-tcp-servers
router(config)#no service small-udp-servers

イーサネット側のIPアドレスの設定。アドレスとネットマスクを入力

router(config)#interface Ethernet0
router(config-if)#ip address WWW.XXX.YYY.ZZZ. www.xxx.yyy.zzz

使用しないインタフェイスは、殺しておく。(あぁ、もったいない ^^; PPPoEのF/Wは出たのかな)

router(config)#interface Ethernet1
router(config-if)#shutdown

smurf 攻撃の中継(増幅器)として利(悪)用されないよう Directed ブロードキャストを禁止。Serial0にも同じく設定する。(生きている全ポートに設定)

router(config-if)#no ip directed-broadcast

シリアル(専用線)側のIPアドレスの設定とヘッダ圧縮の設定。圧縮はあんまり効かないというハナシもあるが・・(もちろん、対向するルータに同様の設定が必要。設定が合わないと、死ぬ)

router(config)#interface Serial0
router(config-if)#ip address AAA.BBB.CCC.DDD aaa.bbb.ccc.ddd
router(config-if)#ip tcp header-compression passive

上流ISPによっては、シリアル(専用線)側のIPアドレスは、Unnumberedにしなきゃならない場合もある。

routingの設定。専用線向こう側の上流ルータのこちら側のIPアドレス。

router(config)#ip route 0.0.0.0 0.0.0.0 xxx.xxx.xxx.xxx

自己のネットワークでサブネットを使っている場合は、サブネット、ネットマスク、ゲイトウェイを設定。

router(config)#ip route XXX.YYY.ZZZ.64 xxx.yyy.zzz.224 XXX.YYY.ZZZ.AAA
router(config)#ip route XXX.YYY.ZZZ.96 xxx.yyy.zzz.224 XXX.YYY.ZZZ.BBB


アクセス制限 Packet Filtering

インターネットに接続されている計算機は、システムへの侵入やデータ改竄/破壊(Cracking クラッキング)の脅威に常にさらされている。Script Kiddies (たぶん)によるプローブなどは日常茶飯事であり、いちいち Log をチェックしている暇など無い・・というのが実状である。(それでもチェックは必要なのであるが)

そこで導入されるのがFireWallだが、その基本は パケット フィルタリング(Packet Filtering)である。(ここでは、アプリケイション ゲイトウェイ の話は割愛する)
一般的に、単なるルータと呼ばれているものであっても、なにがしかのアクセス制限機能を有している。この機能によって、ルータを通過しようとするパケット(通信データのひとカタマリ)を取捨選択しようというわけだ。

ルータ自体のTelnetポートにアクセス制限をかける。

router(config)#line vty 0 4
router(config-line)#access-class 1 in

上記のように line vty 0 4 に対して "1"というアクセス制限をかける。"1" の内容は次のとおり。これで ルータには、XXX.YYY.ZZZ.0 (自己ネットワーク)内からのみtelnet接続可能になる。
最近ではSSHを実装したルータもあるが、telnetしか接続手段がない場合は、絶対に他ネットワークからアクセス可にしてはならない。SSHでさえも安心はできないのだ。(・・ちなみに、自ネットワークであればtelnetでOKということではない。 password /通信内容は簡単にバレバレになってしまう。一番いいのは、ルータやらFireWallは常にコンソールからのみのアクセスにすることである)

router(config)#access-list 1 permit XXX.YYY.ZZZ.0 0.0.0.zzz

上の例では、XXX.YYY.ZZZ.0〜XXX.YYY.ZZZ.zzzまでの範囲のアドレスからの接続を許可するが、CIDRで例えば XXX.YYY.ZZZ.64〜XXX.YYY.ZZZ.79 を指定したい場合は、
permit XXX.YYY.ZZZ.64 0.0.0.15 と記述する。(64+15=79 ・・ようするに 0.0.0.15 というのはネットマスクではない)

ルータにアクセスするのはネットワーク管理者くらいのものなので、できるだけアクセス可能なアドレス範囲を絞ったほうがいいだろう。

外部から到来(in)するパケットをフィルタリングする。次の設定で "101" という制限をかける。

router(config)#interface Serial0
router(config-if)#ip access-group 101 in

Serial0 とは、一般的に外側へ向けたインタフェイスであり、機種によっては BRI0 だったりもする。
また、Ethernet0 とかにして Ethernet側にも制限をかけることができるし、in だけではなく out 側にも設定できる。(ただし、in側で制限した方がCPU負荷が軽い。速度遅いし)

上記 "101" の内容は次のとおり。複数記述可能。
自己ネットワークのIPアドレス(XXX.YYY.ZZZ.0)を騙っての接続(IP Spoofing)を切る。(最近のルータでは暗黙のうちに切ってくれるヤツもある)

router(config)#access-list 101 deny ip XXX.YYY.ZZZ.0 0.0.0.255 any

このほか、127.*.*.* や、プライヴェイト アドレスからの接続も切るべきだろう。
なぜなら、ルータの外側から自己ネットワークのアドレス(またはプライヴェイト アドレス)を発信元としたパケットが到来することは有り得ないからである。
(実は、プライヴェイト アドレスからのアクセスについては、過去、実際にあった・・某社の設定ミスだったが、こんなものは当然切ってかまわない)

外部から内部への telnet接続をすべて切る

router(config)#access-list 101 deny tcp any any eq telnet

繰り返すが、どうしても外部ネットワークからLoginしたい場合は、telnetではなく、SSHを使用する。SSHにもバグVersionがあるので注意のこと。

ホストXXX.YYY.ZZZ.AAA の ポート#### への接続も切る

router(config)#access-list 101 deny tcp any host XXX.YYY.ZZZ.AAA eq ####

とにかく、外部ホストとの間で使用しないプロトコル(ポート)は落としてしまうのが基本である。
ただし、ISPではこう単純にはいかないだろう。悩みますな。

アクセスリストは、上の行から順に適用されていく

router(config)#access-list 101 permit ip any any

最後の行に上のように設定しておかないと、結局すべてのパケットを切ることになるので注意。(アクセスリストを設定すると、すべての記述にマッチしなかったパケットは破棄されることになる)

なお、access-list の方を先に設定してから ip access-group を設定しないと、Ethernet側にアクセス制限をかける場合などは、設定をミスると設定途中でルータにアクセスできなくなるので、これも注意。write memoryをしてなければ電源再投入で元に戻るが、そうでなければRS232Cのクロスケーブルで接続して設定修正するしかない。(この場合、ターミナルとルータの接続速度、パリティ、ストップビット等の設定を合わせておかないと接続できないので注意・・最近のターミナルでは自動検出してくれるとは思うが・・ちなみに、9600bps-8bit-パリ無-stopbit1-X有 とするのが普通なのだが、旧いヤツは stopbit2だったりするので注意)

アクセスリストを破棄する場合は、以下のように先頭に no をつけて入力。

router(config)#no access-list 101

こうすれば "101" のリストが全部削除される。他の設定を無効化するのにも no を使う

アクセスリストが大きくなる場合は、メモリを増設する必要があるかもしれない。(ただし、純正品は非常に高価。2500では、PC98からはずしたSIMMが使えたりもするんですが)
また、アクセス制御を設定することで、パケットごとに通す/通さないという判断が常に必要になるため、CPUパワーを消費してかなりのスループット低下になるという話もある。
128Kbps等の低速接続の場合はあまり問題にならないだろうが、Mbps級の接続速度では、それなりの性能(価格!)のルータを使用しなければキツイだろう。
ルータでのアクセス制限は最小限にし、ほとんどをFireWall側で掛けるというのもひとつの手ではある。(ただし、Logは増えるので注意)

アクセスリストの記述書式

access-list LIST CONTROL PROTO SRC DEST OPTION

LISTアクセスリストの番号
CONTROLpermit(許可) または deny(拒否)
PROTOプロトコル tcp udp icmp ip のどれか(ip は他全部を含む)
SRC発信元アドレス(およびポート)
DEST宛先アドレス(およびポート)
OPTIONコネクション成立パケットのみ指定の場合 established とする(当然 tcp)


SRC と DEST の 例

192.168.1.200 0.0.0.5
192.168.1.200 〜 192.168.1.205 の範囲のアドレス
2番目のアドレス範囲指定は、いわゆるネットマスクではないので注意

0.0.0.0 255.255.255.255
すべてのアドレス

any
すべてのアドレス(つまり、上の設定と同じ)

192.168.1.199 0.0.0.0
アドレスが 192.168.1.199 のホストだけ

host 192.168.1.199
アドレスが 192.168.1.199 のホストだけ(つまり、上の設定と同じ)

192.168.1.199 0.0.0.0 eq 25
アドレスが 192.168.1.199 のホスト の ポート25だけ
ポート番号指定はPROTO が tcp udp のみ有効

192.168.1.199 0.0.0.0 eq smtp
アドレスが 192.168.1.199 のホスト の smtpサービスだけ(つまり、上の設定と同じ)

DoS脆弱性の回避策

2003年7月、Cisco IOSについてDoS関係の脆弱性が公表された。
IOSを最新版に書き換えるのが解決策なのだが、とりあえずの回避策は、アクセスリストに以下の記述を追加する。
access-list 102 deny 53 any any
access-list 102 deny 55 any any
access-list 102 deny 77 any any
access-list 102 deny 103 any any
access-list 102 permit ip any any
もちろん、インタフェイス側にも ip access-group 102 in とか設定する。

ルータの時刻設定

router(config)#clock timezone JST +9

router#clock set 00:00:00 16 sep 2000

Ciscoルータの内蔵時計はかなり正確であるというウワサがある。LOGをとる場合などは安心できるかも。(最近ではNTPクライアントを実装したルータもある)


SNMPの設定

router(config)#snmp-server community public RO

publicとなっているのは、SNMPのコミュニティ名。ネットワーク監視(MRTGなど)を行なうとき使用。RO ってのはアールゼロではなく、アールオゥで、Read Onlyのこと。
ちなみに、publicという名前は、セキュリティ上、別のに変えておく方がいいかも。


実は、このページの記述の一部には間違いがある。しかし、修正はしない。なぜって・・・

Inter-Networking Top | AR(アライドテレシス) Router | Servers | Create Your Own Web Page | JA7KPI | ZCR/bLOG