DNSとメール
DNSとドメイン名
インターネットでの通信では、IPプロトコルでコンピュータを指定するが、IPアドレスは無機質で覚えるのが大変であり、これをサポートするのが、IPアドレスの電話帳でもある DNS(Domain Name Service) である。
コンピュータでサービスに使うコンピュータには、ドメイン名を割り振る。ドメイン名は、www.ei.fukui-nct.ac.jp といったピリオド区切りの名前であり、以下のような意味を持つ。
www. | ei. | fukui-nct. | ac. | jp |
ホスト名 | サブドメイン | 組織ドメイン | 組織種別 | 国ドメイン |
ただしアメリカでは、国ドメインを一般的に使わない。また最近では、世界的な企業では国ドメインが意味をなさないので、アメリカ以外でも .com や .net といった、トップレベルドメインが使われる。様々なサービスを展開している企業では、組織種別が意味をなさないため、toyota.jp といったものも増えてきた。
以下に、主要な組織ドメイン・国ドメインをあげる。
このドメイン名から、IPアドレスを調べる DNS は、ポート番号53,UDP を使ったサービスで、一般的な機器はその組織用の DNS サーバに接続して名前からIPアドレスを知ることができる。各組織の DNSサーバは、上位サーバが設けられ調べられない IP アドレスは、さらに上位のサーバに問合せが行われる。
nslookup の使い方
DNSの問合せには、nslookup というコマンドを用いる。
$ nslookup www.u-fukui.ac.jp # 福井大学のWebサーバの問合せ Server: 192.168.xx.xx Address: 192.168.xx.xx#53 Non-authoritative answer: # この例では、複数のコンピュータの Name: www.u-fukui.ac.jp # IPアドレスが求まっている。 Address: 220.110.205.26 # 負荷分散を目的とした Name: www.u-fukui.ac.jp # ラウンドロビン DNS のため Address: 202.19.136.96 :
DNSの問合せには、ドメイン名からIPアドレスを求める「正引き」とは反対に、IPアドレスからドメイン名を求める「逆引き」もある。この機能を使って、アクセスしてきたコンピュータの逆引きを行うことで、どういった組織からのアクセスかを調べることができ、危険な組織からであればアクセスを拒否するようにサーバを設定したりする。
$ nslookup 192.156.146.100 # 福井高専のWebサーバの問合せ : Non-authoritative answer: 100.146.156.192.in-addr.arpa name = sv1.ip.fukui-nct.ac.jp. :
DNSと階層構造
前回説明したDNSでは、1つのDNSサーバに処理が集中しないようにするために、階層型構成となっている。
組織に属するパソコンは、その組織用のDNSサーバに接続する。DNSサーバは自身の組織のDNS情報を提供するとともに、他の組織の DNS の問合せ結果をある程度保存し(キャッシュ)、同じ問合せがあった場合は保存した情報を返す。保存されていない場合は、上位DNSサーバに問合せを行う。最上位サーバにまで届いた問合せは、各ドメイン名を管理しているDNSサーバに問合せを行う。
パソコンがインターネットに接続できない場合は、DNS のトラブルが原因の場合もある。こういった場合には、Google が、IPアドレス 8.8.8.8 でDNSサーバを公開している。これを使って DNS のトラブルを調べることも多い。
$ nslookup www.u-fukui.ac.jp 8.8.8.8
最近のマルウェアによる攻撃手法の1つに、DNS ポイズニングという手法がある。
マルウェアに感染した際に、パソコンの DNS の設定を攻撃者用の DNS に変更することで、偽物のコンピュータに接続させる手法。
メール
電子メールは、非常に迅速にメッセージを相手に届けることができ、そのメッセージを蓄積・加 工・編集・転送できる。また、音声や画像といった情報も、複雑な文字情報に置き換えることで、 転送できるようになっている。
メールは、foo@example.co.jp といったような、ユーザ名とドメイン名から構成される。
foo | @ | example.co.jp |
ユーザ名 | ドメイン名 |
メールは、直接相手のコンピュータにメールが届くわけではない。メールは、相手のメールサーバまでメールを届ける SMTP プロトコルと、メールサーバから自分のメールを取り出す POP や IMAP というプロトコルによって行われる。
例えば、A さん(aaa@foo.co.jp) から、Bさん(bbb@bar.co.jp)にメールを出す場合には、送信処理で…
- Aさんは、メールソフトでメールを出す。この時、メールは、Aさんの利用しているメールサーバ(A-server)に SMTP で送る。
- A-server は、メールの To: の部分の ドメイン名部分より送付先のメールサーバを見つける。[MX]
- 送付先の ドメイン名 から、IPアドレスを調べ、メールは SMTP で相手のメールサーバ(B-server)に送られる。
- B-server は、メールの ユーザ名 部分をみて、各ユーザ毎にメール内容を保存する。
この後、Bさんは、自分宛のメールを受信するには…
- Bさんは、メールソフトでメールを受信しようとすると、メールサーバ(B-server)に、POP または IMAP で接続する。
- 接続時には、ユーザ名とパスワードで本人を確認する。
- POP であれば、新着メールをパソコン側にダウンロードし、一般的にメールはサーバから削除される。
- IMAP であれば、ユーザが読みたいメールをパソコンに転送し表示する。メールは削除を行わない限り、サーバに残る。
このプロトコルの流れで、注目すべき点は、SMTP でメールを送る際に、ユーザ確認が行われないことである。このため、メールでは現在でも迷惑メール(spam)を無くすことが困難となっている。
最近では、メールを自分のメールサーバに送る前に、POP/IMAP でサーバに接続して認証を受けてからでないとメールを出せないようにするなどの対応を取っているが、自組織からは、認証無しで SMTP でメールを出せる場合も多い。
[MX]メールアドレスのドメイン名では、ホスト名部分やサブドメインは省略されることも多い。送信先のメールサーバを見つける場合には、DNS の MX レコードを参照する。
$ nslookup -query=MX fukui-nct.ac.jp 8.8.8.8 : Non-authoritative answer: fukui-nct.ac.jp mail exchanger = 10 pomme.ip.fukui-nct.ac.jp. fukui-nct.ac.jp mail exchanger = 20 peche.ip.fukui-nct.ac.[spam]迷惑メールの対策として、以下のような対策が行われている。
- 組織外からメールを受信した時は、”To:”の送り先が組織内の人である確認をする。(オープンリレー対策)
- ファイアウォールで、メールサーバ以外の機器からSMTP(ポート番号25)の接続を禁止する。(OP25B)
- SPF,DKIM といった送信ドメインの認証を行う。
$ nslookup -query=TXT xxx.fukui-nct.ac.jp 8.8.8.8 : Non-authoritative answer: xxx.fukui-nct.ac.jp text = "v=spf1 +ip4:xxx.xxx.xxx.xxx +a ~all"
メールヘッダの読み方
メールには迷惑メールや、マルウェアが仕込まれたものも多い。しかしながら、偽装したメールなども多く、メールを正しく分析できる知識が必要となる。この一つとして、メールヘッダを理解することが重要となる。
メールヘッダには、その宛先(To:)や発信者(From:)や発信日時(Date:)以外にも、様々な情報が記載されている。メールヘッダを読むには、メールソフトで「表示 – メッセージのソース」を選ぶと以下のようなものが表示される。
From: メールの送信者
To: メールの宛先 漢字が含まれると
Subject: メールのタイトル =?iso-xxxx?...?= といったMIME形式
Date: メール送信日時
Received: どのコンピュータからどのコンピュータに送られたか
From:のコンピュータ名と中継されたコンピュータが無関係だと怪しい
Received-SPF: SPF(送信ドメイン認証)
DKIM-Signature: DKIM(送信ドメイン認証)
一方で、だます目的の迷惑メールでは、タイトルなどにお金やアダルトに関するキーワードであったり、有害サイトへのリンクが含まれることが多い。このため、メールソフトやメールサーバで、キーワードやURLの類似性を見て自動的に迷惑メール判定を行うことも多い。
ハッシュ法
2分木なども終わって、検索処理のさらなる高速化として、 ハッシュ法を説明する。
オープンアドレス法
電話番号が記録されているのかどうかを探す処理を考えると、 最も単純な方法は、電話番号を配列の添字にする方法となる。
int array[ 1000000 ] ; // 局番2桁+4桁 void entry( int tel ) { array[ tel ] = tel ; } int search( int tel ) { if ( array[ tel ] == 0 ) // O(1) のアルゴリズム return 0 ; else return 1 ; }
しかしこの方法では、0778621111 といった番号も考えると、 巨大なメモリを必要として、非現実的となる。 この際の解決法がハッシュ法で、データ件数が少なければ、 例えば電話番号の末尾2桁がおなじデータの発生する確率は低い。 もし、電話番号末尾2桁が同じでも、その番号の次の場所に保存するなどすればよい。
#define SIZE 100 // ハッシュ表のサイズ int hash[ SIZE ] ; // ハッシュ表 int hash_func( int phone ) { // hash_func:ハッシュ関数 return phone % SIZE ; } void entry( int phone ) { int idx = hash_func( phone ) ; // idx:ハッシュ値 while( hash[ idx ] != 0 ) // データ件数100で無限ループだけど... idx = (idx + 1) % SIZE ; hash[ idx ] = phone ; } int search( int phone ) { int idx = hash_func( phone ) ; while( hash[ idx ] != 0 ) { if ( hash[ idx ] == phone ) return 1 ; idx = (idx + 1) % SIZE ; } return 0 ; }
チェイン法
オープンアドレス法では、次の空き場所を探して保存するが、 表サイズよりもデータ件数を多く保存することはできない。
表が埋まって、同じハッシュ値のデータがでてきたら、同じハッシュ値どうしを リスト構造で保存する方法はチェイン法と呼ばれる。
struct List *hash[ SIZE ] ; // ポインタはNULLで全て初期化 void entry( int phone ) { int idx = hash_func( phone ) ; hash[ idx ] = cons( phone , hash[ idx ] ) ; } int search( int phone ) { int idx = hash_func( phone ) ; struct List* p ; for( p = hash[ idx ] ; p != NULL ; p = p->next ) { if ( p->data == phone ) return 1 ; } return 0 ; }
情報構造論はテスト返却
情報構造論は、来週不在となるので、授業時間を振り替えてテスト返却を行った。
データベースのテスト返却
後期中間試験が終わり、あわてて採点していたデータベースの返却。
来週が不在となるので、課題を出すなら、12/1 17:00 までとアナウンス。
データベースの設計
返却を終え、残り時間は後半の説明。
データベース設計には、概念設計、論理設計、物理設計に分けられる。
概念設計では、データベースによって管理の対象とするものを現実の世界から抽出して設計を行う。一般的にはER図などを描きながら設計を行う。論理設計では、どのようなデータモデルで作成するのかを設計。通常であれば、リレーショナルモデルで概念設計に沿って設計を行う。物理設計では、データベースの効率を考えながら設計を行い、インデックスをどう作成するかなどを設計する。
ER図とは、データの対象で具体的な物や人といった実体(Entity)と、その実体の間の関連(Relation)であらわされるものを、図にして表現したもの。ER図では、実体を長方形、関連をひし形、属性を楕円であらわす。属性のなかでキーとなるものには、下線をつけて表す。ER図の表現には、色々な方式があるが、Peter Chen記法で説明を行う。
このような、プログラム開発での考えを表すための図には、UML(Uniformed Modeling Language)というものもある。ER図は、データ構造を表現するための構造図と、処理を表現する振る舞い図がある。
Peter Chen記法(ER図)
データベースのテスト問題を考えるべくWeb閲覧中。授業後半で説明するER図の書き方には様々なものがある。後半の授業用にメモ。
- Peter Chen記法:実体を長方形、関連をひし形、属性を角丸長方形で描く最もシンプルな書き方。授業では、この方式で説明している。
- IDEF1X(Integration Definition)記法:アメリカ標準技術研究所(NIST)が規格化。
- IE(Information Engineering)記法:データベース設計に特化した、ER図表現法
図は、参照元サイトからの引用
家族のGoogleアカウントへの攻撃
うちの奥さんに、Google さんから、「あなたのアカウントに台湾からアクセスがありました」といったメールが届く。海外に遊びに行ってるわけでもなく、まずはメール自体が「フィッシングメール」かどうか確かめる。この文面からすると、アカウントにアクセスがあったけど、国外でのアクセスは異常なのでブロックしたという雰囲気。つまり、パスワードが漏れている可能性が高い。
使い回しパスワードは危険
パスワードの使用状況を聞いてみたら、gmail のメールアドレスで、複数の Web サービスを利用していて、そのパスワードが全部同じ。これからすると、使っている Web サービスのどこかで認証情報が盗まれ、そのアカウントで別の Web サービスに侵入が行われたと考えるべき。典型的な、共通パスワード利用者への辞書攻撃。
お金系は2段階認証が必須
ということで、早々に (1)Googleのパスワード変更と2段階認証設定、(2)Google IDと同じパスワードを使っている他のWeb サービスのパスワード変更を行った。特に金融系とか通販でクレジットカードを入力しているものは、特に。ただ、よく使っていたクレジットカードはサービス停止で切り替えたようで、多少は安心。(3)最後に Apple ID, Amazon, Facebook といったものも、2段階認証をONにする。
専門基礎3-キルヒホッフの法則
オームの法則での合成抵抗などの理解ができたところで、キルヒホッフの法則の説明。
2電源3抵抗の回路をキルヒホッフで解く
2電源3抵抗の問題で、オームの法則を使って式を立てる前に、電位のイメージを水の高さでイメージして、電流が合流してGNDまで落ちていく様を見せるための資料。
この電位の考えにもとづいて、式を立てると以下の連立方程式が求まる。あとは、E1,E2,R1,R2,R3の値が与えられれば、I1,I2,I3を求めることができる。
講義録がChromeで表示ズレ
今年度、後半は講義録をマメに記載してきた。
でも、プロジェクタをつかって、講義録を見せながらの授業で Safari だと、折り返しが発生して見づらかったので、Chromeを起動してみた。しかし、今度は空白の表示幅の問題で、内容がずれて表示される。ということで、wordpress のスタイルシートで、以下の変更。また、折り返しされると、見づらいので横スクロールするように変更。
code, kbd, pre, samp { font-family: "MS ゴシック","MS Gothic",Sans-Serif; font-size: 1em; } pre { border-top: 1px solid #ddd; background-color: #f1f1f1; padding: 15px; /* white-space: pre; white-space: pre-wrap; word-wrap: break-word; */ overflow-wrap: normal; overflow-x: scroll; } /* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 */
viewテーブルとデータベース設計
実テーブルとビューテーブル
データベースでの表の構造は、テーブルの集合で表され、これは概念スキーマに相当する。
しかし、プログラマーの視点では、複数の表から構成されているといった所を気にせずプログラムを作れると便利。こういう使い勝手のよいテーブルは、外部スキーマに相当する。この外部スキーマを定義するものが、create view 命令である。
-- 優良業者しか見えないテーブル -- create view 優良業者 ( 業者番号, 優良度, 所在 ) as select S.業者番号, S.優良度, S.所在 from S where S.優良度 > 15 ; -- 串刺し結果で参照できるテーブル -- create view 業者在庫 ( 業者名, 在庫量 ) as select S.業者名, SG.在庫量 from S, SG where S.業者番号 = SG.業者番号 ; -- 外部スキーマで参照 -- select 業者在庫.業者名, 業者在庫.在庫量 from 業者在庫 ;
このように外部スキーマを設けることで、SQLをシンプルに記述できたり、外部プログラマが余計な内容を見れないようにしたりすることができる。ただし、データベースシステムによっては読み出しだけだったり、ビューテーブルを更新する時に更新異常が発生する場合がある。 (さらに…)
トランスポート層とTCP/IP
最初に簡単に転送速度の例題の解説。
毎年、意外と間違いが多いのが、異なる速度のネットワークを経由した転送時間。パケットは、バケツリレー方式で送られるので、通信路の一番遅い部分の通信速度で計算すればいい。
サブネット同士をつなぐプロトコルとして、IPプロトコルを紹介したが、データ通信ではノイズなどの影響で通信に失敗することがある。これらを補うためのTCPがある。
TCP
TCP(Transmission Control Protocol/トランスミッションコントロールプロトコル)では、分割されたパケットを元の順序に組み上げたり、パケットが途中で消えた場合の再送などの処理を行う。この機能により確実に相手に送る機能が実現されている。
3way ハンドシェーク
TCPの通信では、最初に相互に通信が可能かを確認するハンドシェークが行われる。パケットには、SYN,ACK,FINといった種別を表すフラグがついており、SYNは接続確立の要求を表す。ACKは了解を表す。FINは切断要求を表す。通信開始の時には、(1)通信OK?,(2)OKだよ、そっちもOK?,(3)OKだよ!といった3つの通信パケットで確認してから通信を行う。この最初のやり取りを3way ハンドシェークという。