|
ルータで何を設定するか
文章中で内容の誤まりや改善すべき点を発見されたら、お教えください。
ルータ(router)は、その名のとおり、インターネットを含めてネットワークでやりとりされるデータの「道すじ」をつけるものです。データはパケット(小包み)の形で送り出されます。このパケットには、まさしく小包みと同じように、送り主と送り先のことが書かれています。この送付票をもとに、送り主から送り先に届けられます。そして、送り先は、届いたパケットの送付票をもとに、今度は送り主に要求されたパケットを送り返します。
インターネットでは、TCP/IPというプロトコルが使われていますが、TCP/IPプロトコルを使ったネットワーク(インターネットもこれに含まれます)では、この送付票としてIPアドレスが使われます。ルータはこれを判断材料に、道すじをつけます。単純に言ってしまえば、IPアドレスを見て、「これはこっちのネットワーク。これはそっちのネットワーク」と仕分けをして送り出すわけです。
さて、そのルータですが、こうした機能(ルーティング機能)とは別に、通過するパケットに書きこまれた送付票をもとに、通過を許可するかどうかを判断する能力と、通過させないと判断できたとき、そのパケットを破棄する能力を持っている場合があります。
これがパケット・フィルタリング機能です。実のところルータは、広く知られているような専用の機器(ハードウェア)ばかりでなく、1台のコンピュータがその機能を持っている場合があります。歴史的にはむしろ、1台のコンピュータ(UNIXマシン)がそうした機能を持つようになってから、そののちルータというハードウェアに進化したものと考えたほうが、正しいのです。
さて、そんなことはともかく、インターネットというネットワークと社内ネットワークをつなぐルータで、そのフィルタリングを設定してみましょう。ここでは、MN128-SOHOをルータとして使った場合の設定例をご紹介します。
ただし、この設定例は万全のものではありません。むしろ重大な欠点を持っているかもしれません。導入にあたっては、みなさんの責任において実行してください。ルータのフィルタリングの設定は、ネットワークのセキュリティにとってきわめて重要なことがらです。
なぜフィルタリングするか
まず、ルータのフィルタリングを設定するにあたって、「なぜフィルタリングするか」を説明しなければならないでしょう。
インターネットというネットワークと社内ネットワークをつなぐルータが両者のパイプ役になる場合、そこでフィルタリングをしなければ、社内ネットワークに接続され、TCP/IPプロトコルがインストールしてあるマシンは、裸のままインターネットにさらされているのも同然です。しかも、もともと公開するサーバだけでなく、クライアントに関しても、同じ条件下に置かれています。とくに、ここでの構築例では、すべてのマシンにグローバルIPアドレスが割り当てられているため、その危険性は重大です。
ルータにパケット・フィルタリングの設定をしたからといって、安全であるわけではありませんが、少なくてもセキュリティ面でかなり改善はされます。
さてここでは、ルータとしてMN128-SOHOをとりあげてみます。筆者の環境はすでにこのMN128-SOHOは採用していませんが、低価格ダイヤルアップルータのさきがけとなった製品であり、Webブラウザを使って設定できるなど、かなりSOHO向けの製品でもあることから、ユーザは多いことでしょう。そのわりに、実際にどう設定したらいいかという具体的な情報が少なく、筆者も苦労しました。同じように苦労されているかたのために、筆者のわかる範囲で説明してみます。
「フィルタリングのルール」をまず考えてみます。インターネット側を「外部ネットワーク」、社内ネットワークを「内部ネットワーク」とすると、
- 外部から内部へのアクセスは原則的に制限しない。内部から外部へのアクセスも原則的に制限しない。
- 外部から内部へのアクセスは許可するものに制限する。内部から外部へのアクセスは原則的に制限しない。
- 外部から内部へのアクセスは許可するものに制限する。内部から外部へのアクセスも許可するものに制限する。
の3つが考えられます。もちろん「1」はもっとも危険な状態です。ほとんどフィルタリングしない設定がこの状態です。「3」がもっとも制限が厳しく、3つの中ではもっとも安全です。
MN128-SOHOでも「3」のように設定することはできます。しかし、インターネットのようなネットワークでは、さまざまなサービスが稼動し、複数のサービスがひとつの集合体となっています。プロバイダー経由でダイヤルアップ接続しているときは気がつかないかもしれませんが、ひとつひとつのサービスは、それぞれひとつひとつの出入り口(ポートといいます)を使って動作しているため、ごく普通と思われるサービスを受けるだけでも、じつは多くの出入り口を使っているのです。
そのため、許可するものを多くするためには、それだけ多くのものを指定しなければなりません。ルータのフィルタでは(とくにMN128-SOHOでは)、許可するにしろ禁止するにしろ、それをひとつのフィルタとしてカウントします。
ところが、MN128-SOHOでは、フィルタが1から32までの32個しか設定できません。そのため、ひとつひとつ設定していくとその制限をオーバーしてしまう可能性があります。
そこで、「3」ではなく、「2」の考え方で設定するのが一般的です。また、ルータの設定になれないうちは、たとえ危険性があっても、確実にフィルタするほうが現実的だと思われます。フィルタの設定を間違えると、制限しているつもりでも、結果的になにも制限していないという事態もありえます。
では、「2」の考え方にもとづいて、実際の運用を考えてみましょう。とくに「外部から内部へのアクセスは許可するものに制限する」の「許可するもの」とは、いったいなんでしょう。ここでの構築例の場合、公開しているWebサーバへのアクセス、メールのやりとり、FTPサーバへのやりとりが、それにあたります。
Webサーバへのアクセスはいうまでもありません。そもそも公開するために構築したものですから、絶対に許可する必要があります。また、外部とのメールのやりとりは、ビジネスの上で重要です。実際に稼動し始めると、むしろ、Webサーバなどより重要だということがわかるでしょう。経験的に言っても、メールでのやりとりをはじめると、日に日にメールシステムへの依存性が高くなり、電話よりも日常的なツールになっていきます。とくにOCNのような24時間接続では、ほとんどリアルタイムにメールが飛びこんでくるため、相手も同じような環境なら、メールを相手が読んでいることを前提にするようになってしまいます。
最後のFTPサーバへのアクセスですが、ここでの構築例では、anonymousFTPという匿名でのFTPサーバへのアクセスは認めていませんが、社内スタッフ(あるいは親しい外部の人間)などが、ホームページのアップロードのため、外部からアクセスしてくる可能性があるため、FTPサーバを構築しています。そのために制限をはずさざるをえません。もしそうでなければ、当然、制限したほうがいいでしょう。
実際に設定してみる
実際の設定例を次にあげます。
ここでは、
- 「210.160.79.96」はネットワークアドレス(ネットワークそのもののアドレス。割り当てられたIPアドレスの一番先頭がこれに該当します)
- 「210.160.79.97」はルータのIPアドレス
- 「210.160.79.98」がサーバで、プライマリDNSサーバ、Webサーバ、FTPサーバ、メールサーバとして稼動しています。
- とくには指定しませんが、「210.160.79.99」がセカンダリDNSサーバです。
この設定例のうち、まずIPアドレス関連を自分のネットワークの該当するものに変更しなければなりません。また、各サービス(WebサービスやFTPサービス、メールのSMTPサービス、POPサービスなど)の稼動状態にあわせて変更します。
ip filter 1 reject in 210.160.79.96/28 * * * * remote 0
ip filter 2 pass in * * icmp * * remote 0
ip filter 3 pass in * * tcp,udp * domain remote 0
ip filter 4 pass in * 210.160.79.98/32 tcp * 25 remote 0
ip filter 5 pass in * 210.160.79.98/32 tcp * 21 remote 0
ip filter 6 pass in * 210.160.79.98/32 tcp * 80 remote 0
ip filter 7 pass in * 210.160.79.98/32 udp * 7010 remote 0
ip filter 8 pass in * 210.160.79.98/32 tcp * 7070 remote 0
ip filter 9 pass in * 210.160.79.98/32 udp * 6970 remote 0
ip filter 11 reject in * * tcpest * * remote 0
ip filter 12 pass in * * tcp * * remote 0
ip filter 13 reject in * * udp * * remote 0
ip filter 14 reject in * 210.160.79.97/32 tcpest * * remote 0
ip filter 27 reject out * * * * 1512 remote 0
ip filter 28 reject out * * * 1512 * remote 0
ip filter 29 reject out * * * * 137-139 remote 0
ip filter 30 reject out * * * 137-139 * remote 0
ip filter 31 reject out * * udp 137 domain remote 0
ip filter 32 pass out 210.160.79.96/28 * * * * remote 0
|
一読しておわかりのように、「ip filter」はその行がなんの行であるかを宣言しているコマンドです。IPプロトコルのフィルタに関する行だと宣言しています。そのあとの数字は、その設定に割り当てる番号です。MN128-SOHOでは、1から32まで設定することができます。数字は重複してはなりませんが、かならずしも1から順番に割りあてていかなければならないというわけではありません。そのため、役割ごとに区分けしておいたほうがメンテナンスしやすいでしょう。
そのあとに、「pass」あるいは「reject」として、通過させるか禁止するかを設定する一番重要な設定です。もちろん「pass」が通過、「reject」が禁止です。「restrict」(制限する)というものもあり、「reject」(拒絶する)に似ていますが、これはダイヤルアップ接続用の設定ですので、OCN接続では使いません。
「in」と「out」は文字どおり、「外から中へ入って(in)くるものに対して」「中から外へ出ていく(out)ものに対して」フィルタをかけるためのものです。つまり、通信の方向に対して条件を設けることができます。
その後に、「発信IPアドレス」「着信IPアドレス」が続きます。まず「発信IPアドレス」と「着信IPアドレス」ですが、原則的には、インターネット側の「発信・着信IPアドレス」は特定できません。そのため、「発信IPアドレス」が社内ネットワークのものなら原則的に通過させる、「着信IPアドレス」が社内で公開しているサービスが稼動しているマシンのものなら通過させるが、そうでなければ通過させない、というように設定します。
知り合いが同じようにOCNに加入していて、そこのIPアドレスがわかっているから、そのIPアドレスからのアクセスは全部許可してしまおうというのも危険です。インターネットの古典的クラッキング手法として、IPアドレスをいつわってアクセスする方法があるからです。そんな場合でも、通常の外部からのお客さんとして扱うべきです。
実際に設定するときには、「/xx」で表現されるネットマスク長を付けて設定します。たとえば、ネットワークそのもののIPアドレスであるネットワークアドレスは「210.160.79.96」に「/28」を付けます。また、「210.160.79.97」というようなひとつのIPアドレスの場合でも、「210.160.79.97/32」と「/32」を付けます。これはサブネットマスクの「255.255.255.255」と同じ役割で、結果的には「210.160.79.97」そのものを意味しています。
「プロトコル番号」「送信元ポート番号」「送信先ポート番号」の順と続きます。このあたりは、かなり専門的になっていきます。
「プロトコル番号」では、番号と言っても「udp」「tcp」「tcpest」「tcpfin」「icmp」といったニーモニックと呼ばれる言葉で指定します。いずれもパケットの種類を表わしています。特定しないときは「*」にします。
「送信元ポート番号」「送信先ポート番号」では、番号かニーモニックで指定します。ニーモニックには、「ftp」「ftpdata」「telnet」「smtp」「www」「pop3」「sunrpc」「nntp」「ntp」「login」「pptp」「domain」「route」が使えます。
| 「ftp」 | FTPプロトコル |
| 「ftpdata」 | FTPで実際に使われるポート |
| 「telnet」 | telnet |
| 「smtp」 | メールの転送で使われるSMTP |
| 「www」 | Webサービス |
| 「pop3」 | メールの受信で使われるpop3 |
| 「sunrpc」 | SUN OSで使われるプロトコル |
| 「nntp」 | ネットワークニュースで使われるプロトコル |
| 「ntp」 | ネットワークタイムプロトコル |
| 「login」 | |
| 「pptp」 | Point to Point Tunneling Protocol | |
| 「domain」 | DNSサービス |
| 「route」 | ルーティングプロトコル |
こう説明するとたいへんむずかしく思えるでしょうが、SOHOでWebサーバを立ち上げ、メールをやりとりするぐらいなら、そんなにたくさんのニーモニックを実際には使いません。「ftp」「ftpdata」「smtp」「www」「pop3」「domain」くらいでしょう。むしろ、それ以外で、VODLiveやRealPlayerといったサービスを通過させるほうが、重要です。
フィルタの順番
さて、設定例をひとつひとつ見ていく前にフィルタの順番について説明します。設定例のように、フィルタには番号が付けられています。この番号は重要な意味を持っています。番号の小さいものほど先に条件として審査されるからです。
たとえば、
ip filter 1 reject in * * * * * remote 0
ip filter 2 pass in * * * * * remote 0
|
とあった場合、先に1番のフィルタでパケットが審査され、rejectされます。2番目の審査にはいたりません。したがって、すべてのパケットがrejectされることになり、2番目のフィルタは意味がありません。この逆に、
ip filter 1 pass in * * * * * remote 0
ip filter 2 reject in * * * * * remote 0
|
とあった場合は、1番のフィルタで審査され、すべてのパケットがpassされます。その瞬間から2番目のフィルタでいくらrejectしようとしても、すべてのパケットがpassされてしまいます。
今度はもう少し複雑になってきます。
ip filter 1 pass in * * icmp * * remote 0
ip filter 2 pass in * * tcp,udp * domain remote 0
ip filter 3 reject in * * * * * remote 0
|
こういうフィルタがあったとき、DNSの問い合わせ(domain)とメール(smtp)はpassされるでしょうか、rejectされるでしょうか? まずDNSですが、1番のフィルタではicmpはpassするとなっていますが、domainについてはとくになにも制限・許可がないため、続けて2番目のフィルタの審査を受けます。2番目ではdomainはpassしていいことになっているため、無事に通過します。もう3番目でどういう設定になっていても、domainパケットには関係がありません。メールはどうかというと1番目、2番目ともsmtpに関しては制限・許可ともしていないため、3番目のフィルタの審査を受けることになります。3番目のフィルタは、ここまでたどりついたパケットすべてをrejectするようになっているため、あえなくsmtpパケットは捨てられてしまいます。
これがフィルタの順番と働きです。番号の小さいものから順に審査を受け、passすればそのまま通過しますが、rejectされれば中には入ってきません。フィルタがそのパケットと関係なければ、その次のフィルタの審査を受けます。場合によっては、順にフィルタの審査を受けていったらすべて無関係だったということもありえます。
このとき注意したいのは、ルータによってフィルタのかけかたが違うことです。MN128-SOHOでは、とくにrejectしなければ原則的に通過する仕様になっています。そのためフィルタの審査でpass、rejectともひっかからなければ、最後は通過してしまいます。しかし、ヤマハ製などの場合、ひとつでもフィルタを設定するとあえて通過させなければ、原則的に破棄されてしまいます。
- パケットはフィルタの順番にしたがって審査を受けていく。最初のフィルタが無関係だったら次のフィルタの審査を受けるというように審査は進んでいく。
- フィルタが適用された段階でpassかrejectが決定し、以降のフィルタの審査は受けない。
- すべてのフィルタの審査を受けても無関係だったパケットがどうなるかは、ルータによって異なる。MN128-SOHOの場合には、通過するのが原則。
フィルタの設定例
こうしたことをふまえて、設定例を見てみましょう。
|
ip filter 1 reject in 210.160.79.96/28 * * * * remote 0
|
の行は、内部のIPアドレスを持ったインターネット側マシンからのアクセスを禁止するものです。本来、インターネットに接続しているマシンのIPアドレスは、世界中にひとつしかなく、あなたのネットワークに割り当てられたIPアドレスはあなたのネットワークにしかないはずですが、パケットのIPアドレスをいつわるクラッキング手法があるため、あらためてここで指定しておきます。
(この部分追加 フィルタに余裕があるのなら、逆の発想で、
|
ip filter 1 reject out * 210.160.79.96/28 * * * remote 0
|
「インターネット側にあなたのネットワークに割り当てられたIPアドレスは存在しないはずなので、捨ててしまう」を追加してもいいかもしれません。)
|
ip filter 2 pass in * * icmp * * remote 0
|
の行は、icmpを通すというものです。icmpは、pingとかで使っているプロトコルです。
|
ip filter 3 pass in * * tcp,udp * domain remote 0
|
DNSサーバへのアクセスを許可します。
ip filter 4 pass in * 210.160.79.98/32 tcp * 25 remote 0
ip filter 5 pass in * 210.160.79.98/32 tcp * 21 remote 0
ip filter 6 pass in * 210.160.79.98/32 tcp * 80 remote 0
ip filter 7 pass in * 210.160.79.98/32 udp * 7010 remote 0
ip filter 8 pass in * 210.160.79.98/32 tcp * 7070 remote 0
ip filter 9 pass in * 210.160.79.98/32 udp * 6970 remote 0
|
ここが、外部に公開するためのサーバとそれぞれのサービスを指定しているところです。「/32」はサブネットマスク長で「255.255.255.255」と同じ意味です。つまりそのIPアドレスのみを対象とすることになります。「25」はメールで使う「smtp」プロトコルが使うポート番号、「21」は「ftp」プロトコルが使うポート番号、「80」は「WWW」(http)プロトコルが使うポート番号です。これはMN128-SOHOに保存すると、自動的にニーモニックに書きなおさます。そのほか、「7010」はVODLiveを、「7070 tcp」と「6970 udp」はRealPlayerを通すためのものです。
ip filter 11 reject in * * tcpest * * remote 0
ip filter 12 pass in * * tcp * * remote 0
|
外部から内部への返事パケットを通すためのものです。
|
ip filter 13 reject in * * udp * * remote 0
|
そのほかの外部からのパケットを捨てるためのものです。
|
ip filter 14 reject in * 210.160.79.97/32 tcpest * * remote 0
|
ルータへのインターネット側からのアクセスを禁止するものです。
(MN128-SOHOでは、公式には認められていませんが、telnetによるアクセスができます。Webブラウザからではルータを再起動することはできませんが、telnetでログインした場合には、rebootコマンドを使って再起動させることができ、変更したフィルタなどを反映させることができます。つまり、ルータへのインターネット側へのアクセスを禁止しておかないと、万が一ルータのパスワードが破られた場合、LAN側へのフィルタが書きなおされ、再起動してそのフィルタの変更を有効にすることが可能だということです。フィルタでインターネット側からのアクセスを禁止しておけば、パスワードの認証そのものが行なえないため、安心です。)
ip filter 27 reject out * * * * 1512 remote 0
ip filter 28 reject out * * * 1512 * remote 0
ip filter 29 reject out * * * * 137-139 remote 0
ip filter 30 reject out * * * 137-139 * remote 0
ip filter 31 reject out * * udp 137 domain remote 0
|
内部から通さないパケットのための指定です。「1512」はWINS関連、「137-139」はNetBIOS関連です。
(この部分追加 MN128-SOHOのときには問題なかったのですが、「1512」をヤマハ製RT80i Rev.2.02.35のときには、pingがこのフィルタで塞がれて通過できませんでした。これ以外でもそうですが、なにかネットワーク接続で不都合があったときは、いったんかけたフィルタをはずしてみて、接続を確認しながら、じょじょにかけてみたほうが確実です。)
|
ip filter 32 pass out 210.160.79.96/28 * * * * remote 0
|
内部のIPアドレス(210.160.79.96は社内ネットワークのアドレス、28はサブネットマスク長で255.255.255.240と同じ)を指定して、そのIPアドレスのものは通すようにします。
以上の設定以外で問題となる代表的なものが、「POP」「IMAP」「ICQ」などでしょう。「POP」はメール受信時に使われるプロトコル、「IMAP」も同じくメール受信時に使われるもの、「ICQ」はチャットで使われるものです。
まず、POPとIMAPですが、セキュリティホールが多いとされているため、許可しないほうが無難でしょう。実際に、POPやIMAPはよくねらわれています。
(この部分追加 「POPやIMAPを許可しない」というのは、インターネット側からPOPサーバやIMAPサーバへのアクセスを許可しないということです。ひらたく言えば、プロバイダーを経由してなど、インターネット側からメール受信をさせないということです。不便に思うかも知れませんが、禁止したほうがいい、いえ、禁止すべきです。どうしてもメールを外部で受信したいというのなら、外部からLAN側にリモートアクセスするようにしたほうが、まだ安全です。POPやIMAPのやりとりからパスワードが漏れる可能性は非常に大きいと言えます。)
ICQは許可してもいいのですが、設定が少しめんどうです。ここでは、省略します。
最後に確認です。内部ネットワークからメールが出せ、受け取れ、外部のWebサーバを見ることができるかを確認します。また、外部から社内のWebが見れるか、メールを送ることができるか、受け取ることができるかを確認し、さらに禁止しているものが正しく動作しているか確認します。内部からのテストは問題ないでしょうが、外部からのテストはプロバイダにダイヤルアップ接続してアクセスしてみるか、知り合いに頼むことになるでしょう。同じようにOCNに加入している方と親しくなっておくととても助かります。
また、インターネットにはサイトのセキュリティを無料でチェックするサービスを行なっているところもあります。そのサービスの運営者が信頼できそうと判断できるなら、試してみるのがいいでしょう。とくに推薦はいたしません。
謝辞 ルータのフィルタを見なおす契機を与えていただいたLANTIMESで連載されている竹田津さんと、具体的な設定方法で役立った「FreeBSDで作るOCNインターネットサーバ」(ソフトバンク刊 ハイパーウェア著)に感謝いたします。
ひさしぶりに追加 ここでは、MN128-SOHO(初代モデル)について記述しています。MN128-SOHOシリーズはその後ラインナップが増えるにつれ、かなり仕様が変更になっています。そのため、ここで説明していることとくいちがっていることも多々あります。たとえば、かつては再起動しないとフィルタなどの設定が反映されなかった(はず)なのですが、最新機種・最新ファームウェアでは再起動しなくてもフィルタ設定が反映されるようになっていたりします。注意してお読みください。
また、近年日本のサイトへのアタックが厳しくなっています。以下に少し設定を強化したものをまとめてみます。ただし、筆者はすでにMN128-SOHOシリーズをインターネット側のルータとして利用していません。機能的に弱い点があることとハードウェア的に問題が多いと判断したからです。
以下に調べたかぎりでの、設定をあげておきます。もう手元にMN128-SOHOがないため、検証はしていません。フィルタも32行めいっぱい使っているわりに、重複した設定(無意味な設定)がある可能性もあります。20行目と21行目は、FTPクライアントがパッシブモードで接続してきたときのための設定行です。
ip filter 1 reject in 10.0.0.0/8 * * * * remote 0
ip filter 2 reject in 172.16.0.0/12 * * * * remote 0
ip filter 3 reject in 192.168.0.0/16 * * * * remote 0
ip filter 4 reject in 210.160.79.96/28 * * * * remote 0
ip filter 5 reject out * 10.0.0.0/8 * * * remote 0
ip filter 6 reject out * 172.16.0.0/12 * * * remote 0
ip filter 7 reject out * 192.168.0.0/16 * * * remote 0
ip filter 8 reject out * 210.160.79.96/24 * * * remote 0
ip filter 9 reject in * 210.160.79.96/32 * * * remote 0
ip filter 10 reject in * 210.160.79.111/32 * * * remote 0
ip filter 11 reject in * 210.160.79.97/32 tcpest * * remote 0
ip filter 12 pass in * 210.160.79.98/32 * * domain remote 0
ip filter 13 pass in * 210.160.79.98/32 tcp * smtp remote 0
ip filter 14 pass in * 210.160.79.98/32 tcp 113 * remote 0
ip filter 15 pass in * 210.160.79.96/32 tcp * pop3 remote 0
ip filter 16 pass in * 210.160.79.96/32 tcp * www remote 0
ip filter 17 pass in * 210.160.79.96/32 tcp * ftpdata-ftp remote 0
ip filter 18 pass in * 210.160.79.96/32 tcp * 443 remote 0
ip filter 19 reject in * * tcpest * * remote 0
ip filter 20 pass in * 210.160.79.96/32 tcp * 1024-65535 remote 0
ip filter 21 pass in * 210.160.79.96/32 udp * 1024-65535 remote 0
ip filter 22 reject out * * udp route route remote 0
ip filter 23 reject in * * * * * remote 0
ip filter 24 pass in * 210.160.79.98/32 udp * 7010 remote 0
ip filter 25 pass in * 210.160.79.98/32 tcp * 7070 remote 0
ip filter 26 pass in * 210.160.79.98/32 udp * 6970 remote 0
ip filter 27 reject out * * * * 1512 remote 0
ip filter 28 reject out * * * 1512 * remote 0
ip filter 29 reject out * * * * 137-139 remote 0
ip filter 30 reject out * * * 137-139 * remote 0
ip filter 31 pass out 210.160.79.96/28 * * * * remote 0
|
|