SEC-4-4.ルータにもっと働いてもらう今時のルータは高性能かつ高機能です。YAMAHAもしくは同等価格帯の製品は概して機能豊富です。買ったなら有効活用しましょう。DNSについて一般論として、自宅にPC-UNIXを中心に複数台のPCを置いて、ネットワークを張って、さらに自前のドメインを取得して、動的IPアドレスで外部にサーバを公開して・・・・こんな時、DNSをどうするか?です。DNSサーバをPC-UNIXを利用して立てるのか?ってことです。しましょう?これ、「立てる必要が有るか無いか?」って質問されると「無いです」って答えです。立てる必要はありません。そこがDNSをやってくれます。一方で、内部のPCのためのDNSサーバについては、ルータで大丈夫です。今時の大抵のルータはリカーシブにDNSサーバをやってくれます。BINDのnamedデーモンを起動させる必要は、外部のためにも、内部のためにも、ありません。その一方で「立てた方が良いかどうか?」だと・・・・・やったことが一度も無い人なら、ぜひ文献1や2を熟読の上、立ててみるべきです。仕組みを読んで、自分でゾーンファイルを書いて、デーモンを起動させてみるべきだと思います。自宅でサーバを公開するなら、それなりに勉強していないと、いざというときに途方に暮れてしまいます。しても、一定の知識と経験が必要だと思います。(と、私ごときが言うのは、おこがましいですが・・・汗)一般に、ネットの話って、各方面が関係していて、一ヶ所だけでは物事の理解が進みません。(a)TCP/IPの理解。(b)ルーティングの理解、(c)ドメインネームシステムの理解、(d)ファイアウォールの理解、・・・以上がセットで関連すると思います。DNSサーバを立てたことが無いなら、ぜひやってみてください。運用を続ける必要は無いです。慣れてきたらnamedは止めちゃってかまいません。余談が長くなりました。例として、以下の赤字のようにDNSの名前を付けてみます。ご存知のように、DNSのノードネームはマシンネームとは違います。NVR500をサンプルにDNSの設定です。R2ルータにNVR500を使っている前提です。127.0.0.1基本的にLANの中から問い合わせるので、pochiは中側、すなわち192.168.200.254だけ分かれば良いです。pochiのDMZ側にもアクセスしたい時はIPアドレス直打ちでアクセスします。BINDのゾーンファイルだとAレコードとPTRレコードの両方のゾーンファイルが必要です。YAMAHAルータはAスタイルの記述だけしておけば、PTRレコードもここから割り出してくれます。DNSサーバが192.168.200.254であると記しておけばDNSが使えます。同様に、taroは192.168.100.1(うちの場合はISPから貸与されているNECのルータBL900HW)にDNSの問い合わせをします。実際には、pochiはtamaにさらに問い合わせしています。tamaはISPからもらったDNSサーバに問い合わせしています。tamaがリカーシブな問い合わせをしているはずです。サーバもルータに頼みます時刻合わせは結構大事です。ログも時刻が不正確だと何がなんだかわかりません。メールサーバも時刻が不正確だと送信時刻がいい加減になり、マズいです。各PC機の時間を正確に合わせましょう。そのためにはNTPの活用です。ネットワークを通じて、+ー1秒以内に時刻があいます。今時は電波時計が安くなっているので、マザーボードに電波時計くらいが付いていると便利ですが、まだ無いですね。(^^;;そのうち、USBに挿してPC機の時間を合わせる電波時計くらい出てきそうですね。これもまだありません。(^^;;今は一般に各ディストリビューションが用意しているNTPサーバに時間を合わせます。ntp.confを見て、サーバのところのコメントアウトしてる#マークを外すと、外部のNTPサーバに時刻を合わせ始めるので、とっても正確な時間になります。うちのネットだと最大で6台のPC-UNIX機が動きます。これ(外部への問い合わせ)を全部のマシンでやるのはやめたい。それって、いたずらに外にアクセスを増やすやり方。スマートなやり方ではないです。以前は、PC-UNIX機の一台を外部のNTPサーバに同期させ、後はそのPC-UNIX機から、他の内部のマシンに時刻を配っていました。今ではセキュリティが厳しくなって、内部的にNTPサーバをやらせるだけでも、結構設定が大変です。それくらいなら、ルータにNTPサーバをやってもらえば、設定は簡単。時間も、まあまあ、十分実用的で正確です。NVR500の例です。onちょっとだけ説明。NTPクライアント機能はありません。代わりにスケジュール機能があり、さらにNTPを使って時刻合わせをするコマンドntpdateがあります。一行目は、そのコマンドを使って、毎時00分07秒にntp.nict.jpに時間合わせをしに行きます。二行目はNTPサーバ機能をやらせるコマンドです。時刻配信に際して、いわゆるセキュリティー配慮は何もやっていません。LANの内部で時刻を配るだけなので、(SOHO規模なら)セキュリティーは考えなくても良いです。ユーザは私一人だけだから。192.168.200.254がNTPサーバであることを書いておけば、各PCの時刻が正確に合います。やって時刻のあい具合をみたものです。171.152delayがサーバとの時間距離、どれくらい遠くにいるか?ですが、反応が「1000分の0.4秒」で帰ってくるので、すぐ近く。タイムサーバが猛烈に近くにいる。NVR500のタイムサーバとPC機の時刻の差は「1000分の1.966秒、進んでいるだけ」。ついて」で説明しています。すみませんが、そちらをご覧ください。コンパイル外部にサービスを提供するサーバソフト、例えばSMTPのPostfixとか、HTTPのApacheとかは、なるべく最新のものにしておきたいです。最近では大きなセキュリティーホールは珍しくなりましたが、時たまセキュリティーアップデートがあります。各ディストリビューションからコンパイル済みのパッケージが出るまで若干のタイムラグが出ます。それを待つよりも、ソースを元からダウンロードしてコンパイルすれば早期対応が出来ます。そんなわけで、サーバ公開当時から、これらのソフトは自分でコンパイルしインストールしてきました。SlackwareやFreeBSDなら、難しく無いです。詳しくはトップページのChap-7を見てください。設定Postfixについては、一にも二にも、SPAMの踏み台にされないよう、つまり不正にメールリレーされないように設定に注意します。reject_unauth_destinationの設定だけで大丈夫でしょう。yesとしておくと、効果がある・・・場合もあります。(^^;;;一部のUCE配送プログラム(あやしげなプログラム、悪いことする連中が使うプログラム)は、smtpの正規の会話をしないからです。動いているのは、サンプルだとtaroというマシンです。R1ルータの位置にいるように見せかけなくてはなりません。tama.quinos.netです。tama.quinos.net」と登録しておきます。設定こちらも、実際にはtaroの位置でApacheが動いていても、外部に対してはtamaの位置にいるようにします。SMTPと違って、そんなにたくさんの会話(自分のサーバ名)はしませんが、一応、サーバ名を書き込む欄がhttpd.confの中にあります。www」と登録しておきます。その他には、セキュリティー上の対応として、不要ならCGIは動かさずに、止めておきます。うちのようなウェブサイトを開設するくらいなら、CGIは不要です。CGIもセキュリティーの問題となりやすい部分です。「Apache、セキュリティ」等でネット検索すると、他にもセキュリティー上の対策として「やった方が好ましい設定」が出てくると思います。Apacheのバージョンを名乗らないようにする、とか・・・・。後は、それぞれ個人の好みで設定します。ルータの位置にサーバがあるイメージです。外部に対しては、あたかも右のように振る舞う。くどいですが・・・なるべくPostfixもApacheも、常に最新バージョン(運用版の)にしておきましょう。ここまでたどり着けば、サーバ公開までもう一歩です。(^^)後は、セキュリティーを考慮して、公開サーバを重武装させます。いわゆる要塞ホスト化です。この記述は、2001年頃の記述とほとんど変わりません。これまでの説明で、「ルータのセキュリティー対策+とネットワークの張り方」でかなり安全を確保しました。残る「詰め」はサーバそのもののセキュリティー対策。基本的に以下のようにします。a.不要なサービスはしない。b.公開するサーバソフトのセキュリティー対策をしっかりする。c.公開するサーバソフトは常に最新状態を保つd.サーバでパケットフィルター等を実施するe.ログ監視するf.tripwire等でサーバ監視するa.についてa.の不要なサービスはしないというのは、案外とできていなかったりするようです。私のサイトはSMTPサーバにメールを託すのは、内部LANからのみと割りきっています。これだと設定が実に簡単です。やりだすと、外からメールを託せるようにしたくなります。そんな衝動にかられます。私も一時期、やっていました。(^^;;でも、その一歩を踏み出すと、急にセキュリティー対策が大変になります。PostfixをSASLとか含めてコンパイルしなくてはならない。それをちゃんとやったとしても、世界に向けてパスワード入力を促す画面を開けなくてはなりません。なんだか、危なっかしい・・・それでも敢えて、これをやりたい人はやるのだと思います。いずれにするか、やる人の考え方次第です。同様に、メールをPOPするのも、うちではLANの中からのみです。私は外出した時はメールPOPできません。これも設定が実に簡単です。しても外でメールPOPしなくてはならない理由が私にはないから、これで困らないです。外出先からメールPOPするかどうかも、よく考えて、それぞれの考え方でやってください。外からSSHでサーバにアクセス出来るようにしている例があります。これもサーバを持つとやりたくなるものです。業務でも無いのに、本当に外部からわざわざSSHしなくてはならないのかどうか?業務用でVPNやるならともかく、SSHだけでこれをやると、世界に向けてSSHのパスワード待ちの状態を公開するわけです。(^^;;;私は、それは恐ろしいのでやっていません。私のセキュリティーの基本は「単純明解で堅固なやり方」です。複雑な事をやると、ちょっと間違えただけでセキュリティーホール作っちゃう。それに、しばらく時間がたつと「あれ、俺、何やってたかな?」って自分がやったことを忘れちゃう。このあたりも、それぞれの人の考え方次第です。後、あえて書くほどの事は無いと思いますが、スタートアップスクリプトやinetd.confをしっかり見て、不要なサービスは全部落としておきます。X11は動かしません。サーバなんて、動き出したらディスプレィもキーボードも外して構わないです。管理はLAN内部からSSHで入れば良いです。(^^)b.c.についておおむね、SEC-6で解説しましたので、省略。d.についてパケットフィルターって、良く聞く言葉だと思います。パケットの性質がわかれば、設定はそんなに難しく有りません。文献12がとても優れた書物です。(今でも売ってる・・・と思います)なので、至極簡単に基本的なことだけ説明します。---コネクション指向とか言われていて、ようするに電話みたいに「繋がる」イメージです。これはTCPのフラッグのたち具合で、説明。最初に、クライアントからサーバに対して「コネクション張ろう!」ってアクセスします。これがsynフラッグで、TCPのフラッグの一種です。次に、サーバ側が「良いよ~。俺もコネクション張りたいが、良いかい?」って、クライアントに返します。最初の「良いよ~」がackフラッグで、合わせてsynフラッグも立ててますが、これが「俺もコネクション張りたいが、良いかい?」って奴です。3番目にクライアントが「オッケー~」って返します。これがまたackフラッグ。合計3回やって相互に意思疎通が図れたので無事にコネクションが張れました。これ以降は、イメージは電話回線が引けた状態のイメージです。フィルターの説明等で、NEWとかって話はこの最初のsynフラッグだけが立ったTCPのアクセスを言います。言葉も良く見ますが、ackビットが立ったTCPアクセスです。接続確立後のパケットのことです。TCPのフィルターは、このことと各サービスがどのTCPポートを使っているか理解できれば、後はそのOS(あるいはルータ)のフィルタールールによる記述をするだけです。HTTPはTCP80です。これは受ける側のポートです。発信側(クライアント側)は、1024以上のポートから発信します。1024以下はシステム予約とか言って、OS側が利用するポート。一般ユーザのクライアントは普通使いません。受信側TCP23で発信します。戻りは、それぞれ同じポートを使いますのでサーバ側からTCP23でパケット送出ーーーークライアント側さっきのTCPハイポートで受けるてな感じになります。文献12には、各サービスがどのポートを使うか、どんな具合にハンドシェイクするか、詳しく説明してあります。ftpだけ、ちょこっと特殊なコネクションですが、後は普通に理解できると思います。サービス番号の一覧表があります。---コネクションは張りません。「超超超高速に手紙をやりとりする」と思えば良いです。受け手が手紙を受けているか、それとも届いていないのか、直接の確認は出来ません。コネクションが無いから・・・・ですが、UDPパケットを送ったクライアント側は、サーバからの返事を待ちますから、結局返事が来たら「あ、そっか~~、あの手紙、ちゃんと届いてたのか~」ってな具合です。例としてDNSの問い合わせ。受信側UDP53で発信します。戻りはTCP同様に同じポートを使いますからサーバ側からUDP53でパケット送出ーーーークライアント側でさっきのUDPハイポートで受けるとなります。コネクションを張らないという点をのぞくと、TCPに似ています。他に良く使うのだと、NTPはUDP123です。それとDNSは、自分のネットの外にセカンダリーネームサーバを立てて、そこと自分のプライマリーとゾーン転送することがあります。(動的IPアドレスではなく、固定IPアドレスでDNSの委任を受けている場合、かつセカンダリーに外部を使う場合)DNSのゾーン転送はUDPではなくTCP53を使います。---TCPやUDPほど込み入っていないし、文献12とRFCを読めば簡単に理解出来ると思います。RFCは参考になります。返した方が良いのか、返さない方が無難なのか、なんて話題も、確か、文献12に書いてあったと思います。---Linuxで実際にフィルタールールを書くとすると、大抵は以下のような流れです。通して良いルール、例えばSMTPとかHTTP、あるいはLANからサーバへのSSH等を書く(5)(最後に、全部弾くルール。ポリシーが落とす前提なら、この記述は無し)多分、こんな感じだろうと思います。このうち(3)の記述は最初のうち、自分で考えながら書くのは難しいので、ネット検索して参考に(真似て書く)します。なんかを使ったやり方で込み入っていたり、ソースルートオプション付きパケットを弾くために、とある常数を入力したり、ややこしいです。書き方について、多くのサイトがあります。e.についてまめにログを見ましょう。おかしな事があると、ログに出てきます。(^^;;;f.について改ざん検知のソフトを走らせたりします。限らず、似たような改ざん検知ソフトもあります。そのうち、面倒になって、今はやっていません(汗)本当は、やったほうが良いと思います。どっちかというと、セキュリティ対策を中心に「ネットワーク構築」を書いてきました。ここまでの記述だけだと、セキュリティ対策としてきっと不十分です。ここまでで立てたセキュリティ対策って、下の図のイメージです。いう攻撃から守るための対策でした。パターン1.直接攻撃でも、今時、こんな直接的な攻撃、ちゃんと設定されていれば安物のルータでもちゃんとしたルータなら(注*:)弾くでしょう。SMTPもHTTPも、コンフィグファイルをきちんと設定し、最新のバージョンにしていれば、こんなやり方で安易に侵入はできませんよね。少なくとも、PC-UNIXで自宅サーバを構築しようとする人(多分、セキュリティ意識の高い人)が、こんな稚拙なやり方でクラックされるとは、思えません。ルータがやられちゃったらしいです。したルータを使いましょう(^^;;;一方で、今日よく世間を騒がせているのは、下の図みたいなイメージ。ようするに、怪しげなウェブサイトで、よからぬボタンをクリックしちゃって、自分で(自ら)マルウェアなんかをLAN内に呼び込んでしまう。同様にメールに添付されている怪しげなファイルをクリックしちゃって、自らLAN内にマルウェアを呼び込んでしまう。相手が侵入してくるのではなくて、「自分でマルウェアを引っ張り込んでくる」って奴。最近話題になってるのは、ほぼこのパターンでしょう。パターン2.自ら呼び込みこのパターンも、PC-UNIXを複数台持って、ドメインを取得して、自ら公開サーバを立てようとするような人なら、まずひっかからないでしょう。普通、そういう人はセキュリティ意識が高い。危なそうなものを、安易にクリックしたりしない。下の図みたいなイメージだとどうなるでしょう?パターン3.スマホ、FB、ツイッター等を経由これは、悪い奴がスマホやフェイスブック、ツイッター等をまず乗っ取って、それからそこを経由してマルウェアをばらまくイメージ。単なる私の思いつきですが、私が思いつくくらいなら、悪い奴らはとっくに考えてる、きっと!今時、フェイスブックやツイッタのアカウント乗っ取りは、結構話題になってます。フリーなソフトを安易にインストールして、スマホを乗っ取るって話も結構聞きます。実際に乗っ取って、何が出来るか私は知りません。そのうち、乗っ取られたスマホがWifiでLANに繋がった瞬間、スマホ経由でLAN内にマルウェアが流れ込んでくる日は、そう遠くないと思います。自分のスマホならまだ注意するでしょうが、家族のスマホになると管理しきれない。ゲームだ!!」とかってインストールした瞬間、バンバンとマルウェア感染する・・・・なんとなく、これ、ありそうですよね(^^;;;;この最後のパターンは防御が難しそうです。今はやりのネット動画を見るためのデバイスって、使用することに躊躇します。個人的には、安易にLAN内に持ち込みたくないデバイスです。(^^;;;ちなみに、私はFBもツイッタもインスグラムもやらず、スマホもアイフォンも持っていない、生粋のシーラカンスです。(^^)その他.IoTについてネットワーク構築の話題から、多少はずれます。ネットで検索してみました。言われているデバイスがどれくらい存在しているか?もちろん、正確な数字など、誰も知りませんが、いろいろなサイトで推定値を出しているようです。いう数字になりそうです。いやはや、大変な数字です。この膨大な数字(仮に100億台とします)のうち、さらに仮に、千分の一の確率で「セキュリティの設定がいい加減なデバイスまたはバグがありセキュリティに抜け穴があるデバイス」が存在すると仮定します。1.0e7なんて数字になります。要するに一千万台!多分、推定値の100億も、確率の千分の一も、大げさな数字じゃないでしょう。いやはや・・・大変なことです。なって悪さを始めたら、収集がつかないです。(汗)数字を見ると、始めて事の深刻さが分かります。我が家では外からアクセス自由のネットワークデバイスは基本的にありません。今後、各種家電類がIoTになって、家電屋さん達はネットワークセキュリティの専門家ではなくて、会社から言われるままに家電をIoT化していくと、多分千分の一では済まなくなりそうです。ちなみに、先ほどの推定値の行き着く先は「2020年頃には1兆台前後」とかって、話です。その頃は、家電はもちろんの事、下着も、眼鏡も、靴も、カバンも、自転車も、何もかもIoTの時代なんだそうです。