Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

HTTP and DNS 2021

Cybozu
April 27, 2021

HTTP and DNS 2021

Cybozu

April 27, 2021
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. 誰に聞けば良い︖ ▌dig コマンドを打ってみましょう n ⽤意された環境を使う: n docker-compose -p kaiun up

    --build --scale ap=3 n (別ターミナル) docker exec -it kaiun_client_1 bash ▌$> dig +noall +stats +answer hoge.cybozu.com hoge.cybozu.com. 2795 IN A 103.79.14.41 hoge.cybozu.com. 2795 IN A 103.79.14.42 ;; Query time: 0 msec ;; SERVER: 172.30.0.4#53(172.30.0.4) ;; WHEN: Wed May 15 16:13:32 JST 2019 ;; MSG SIZE rcvd: 79
  2. 名前解決の流れ Recursive DNS (社内DNS等) hoge.cybozu.com はどこにありますか︖ ルートDNS 「.」 知ってますか︖ .comの事は別の管轄

    192.33.14.30に聞け 権威DNS 「com.」 知ってますか︖ cybozu.comの事は別の管轄 216.239.32.107に聞け 権威DNS 「cybozu.com.」 知ってますか︖ 103.79.14.42 103.79.14.41 103.79.14.42 103.79.14.41 こんちゃっす hoge.cybozu.com
  3. Root Servers https://www.iana.org/domains/root/servers HOSTNAME IP ADDRESSES OPERATOR a.root-servers.net 198.41.0.4, 2001:503:ba3e::2:30

    Verisign, Inc. b.root-servers.net 199.9.14.201, 2001:500:200::b University of Southern California (ISI) c.root-servers.net 192.33.4.12, 2001:500:2::c Cogent Communications d.root-servers.net 199.7.91.13, 2001:500:2d::d University of Maryland e.root-servers.net 192.203.230.10, 2001:500:a8::e NASA (Ames Research Center) f.root-servers.net 192.5.5.241, 2001:500:2f::f Internet Systems Consortium, Inc. g.root-servers.net 192.112.36.4, 2001:500:12::d0d US Department of Defense (NIC) h.root-servers.net 198.97.190.53, 2001:500:1::53 US Army (Research Lab) i.root-servers.net 192.36.148.17, 2001:7fe::53 Netnod j.root-servers.net 192.58.128.30, 2001:503:c27::2:30 Verisign, Inc. k.root-servers.net 193.0.14.129, 2001:7fd::1 RIPE NCC l.root-servers.net 199.7.83.42, 2001:500:9f::42 ICANN m.root-servers.net 202.12.27.33, 2001:dc3::35 WIDE Project
  4. DNSレコードの種類 ▌ SOA ▌ NS ▌ A ▌ AAAA ▌

    CNAME ▌ MX ▌ TXT ▌ PTR ▌ … ▌ https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml
  5. SOA ▌ Start of Authority ▌ DNS Zone の権威情報 ▌

    $> dig SOA +noall +multiline +answer cybozu.com cybozu.com. 884 IN SOA ns-627.awsdns-14.net. forest.cybozu.co.jp.( 1 ; serial 7200 ; refresh (2 hours) 900 ; retry (15 minutes) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) )
  6. NS ▌ Name Server ▌ 対象ドメインの権威 DNSサーバー(達) ▌ $> dig

    NS +noall +answer cybozu.com cybozu.com. 86400 IN NS ns-163.awsdns-20.com. cybozu.com. 86400 IN NS ns-627.awsdns-14.net. cybozu.com. 86400 IN NS ns-cloud-b3.googledomains.com. cybozu.com. 86400 IN NS ns-cloud-b2.googledomains.com. cybozu.com. 86400 IN NS ns-1904.awsdns-46.co.uk. cybozu.com. 86400 IN NS ns-1159.awsdns-16.org. cybozu.com. 86400 IN NS ns-cloud-b1.googledomains.com. cybozu.com. 86400 IN NS ns-cloud-b4.googledomains.com.
  7. AAAA ▌IPv6アドレス(IPv4の4倍のbit数) ▌$> dig AAAA +noall +answer cybozu.com 無い ▌$>

    dig AAAA +noall +answer google.com google.com. 299 IN AAAA 2404:6800:4004:80a::200e
  8. CNAME ▌Canonical Name ▌ドメインのエイリアス ▌DNS レベルのリダイレクト ▌$> dig CNAME +noall

    +answer developers.cybozu.com developers.cybozu.com. 3593 IN CNAME d2p8ofl6yvcluu.cloudfront.net.
  9. TXT ▌Text: 何でもあり ▌定義されている特別な TXTレコードがある n DMARC, DKIM, SPFなど ▌その他クラウドサービスを使う時のドメイン所有者確認など

    ▌$> dig TXT +short cybozu.com "v=spf1 +ip4:103.79.12.128/26 +ip4:103.79.14.16 +ip4:103.79.14.17 include:spf.protection.outlook.com include:fc5038.cuenote.jp -all“ ▌$> dig TXT +short matsuri.dev
  10. PTR ▌Pointer ▌逆名前解決 n IPアドレスからドメイン名を問い合わせる ▌$> dig +noall +answer -x

    103.79.14.76 76.14.79.103.in-addr.arpa. 86394 IN PTR nat.cybozu.com. ▌これはcybozu.comではなく、in-addr.arpaと⾔う特殊のゾーン
  11. Zone ファイルの中⾝ $ORIGIN kaiun.lan. $TTL 60; 1 min @ IN

    SOA dns contact.kaiun.lan. ( 2019051701; serial 3600 ; refresh (1h) 900 ; retry (15m) 3600 ; expire (1h) 60 ; min TTL (1m) ) Zoneファイルの始まりを記す。 末尾の「.」も必要︕ Time To Live: キャシュされたレコードの 有効時間 $ORIGIN の略 プライマリーDNSサーバーと連絡 先のメールアドレス Zoneのバージョン番号 他のネームサーバーへのタイミン グ指⽰
  12. 演習環境構成 ▌dns: kaiun.lan の権威 DNS (NSD) ▌cache: recursive DNS resolver/cache

    (Unbound) n kaiun.lan に関しては dns である 172.30.0.3 に問い合わせる ▌client: 外から⾒れないので client コンテナーに⼊って様々なコマンドを打つ ▌おまけ︓ n l7lb: 負荷分散、TLS termination (nginx) n 外から⾒えるのは l7lb。裏で実際のウエブサーバーにリクエストを割り当てる n web: HTTPサーバー
  13. 演習: DNSサーバーを触りましょう ▌$> docker-compose -p kaiun up --build --scale ap=3

    ▌$> docker exec -it kaiun_client_1 bash ▌$> dig cybozu.com ▌$> dig kaiun.lan ▌$> curl kaiun.lan
  14. 演習: DNSサーバーをもう1回試す ▌$> docker-compose -p kaiun up --build --scale ap=3

    ▌$> docker exec -it kaiun_client_1 bash ▌$> dig kaiun.lan ▌$> curl -v kaiun.lan
  15. 歴史の話 ▌歴史を知る n $> dig chaos txt hostname.bind @172.30.0.3 n

    $> dig chaos txt version.bind @172.30.0.3 ▌今DNSレコードで「IN」(Internet)というクラスが使われている ▌CHはChaosnet。恐⻯時代(1970年代)に存在していたネットワーク ▌HS(Hesiod)も存在していた
  16. HTTPでのやり取りの結果 GET / HTTP/1.1 Host: kaiun.lan HTTP/1.1 200 OK Server:

    nginx/1.15.8 Date: Mon, 13 Apr 2020 01:47:00 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 12 Connection: keep-alive 7dcd8c134b30 HTTPリクエスト: クライアント側からの要求 HTTPレスポンス: サーバーからの応答
  17. Method n GET: リソースを取得 n POST: リソースを送る、処理を依頼する n DELETE: リソースを消す

    n PUT: サーバーが持っているリソースを置き換える n PATCH: リソースを部分的に更新する n … n ※これはあくまでも仕様で、サーバーによってエキゾチックな実装もある
  18. HTTP Secure ▌HTTPは平⽂プロトコル = 攻撃者が簡単に情報を盗める ▌HTTPS︓HTTPをTLSの上に構築 n TLS︓Transport Layer Security

    ▌暗号化されるので盗聴されても解読が難しい HTTP TCP/UDP IP Ethernet Ethernet IP TCP/UDP TLS HTTP アプリケーション/プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク/物理層
  19. TLSハンドシェイクの様⼦ ▌$> docker exec -it kaiun_client_1 bash ▌$> curl -v

    https://cybozu-dev.com * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
  20. TLSハンドシェイクをもっと詳しく⾒る ▌$> docker exec -it kaiun_client_1 bash ▌$> openssl s_client

    -connect cybozu-dev.com:443 ▌$> curl -v https://kaiun.lan ▌$> openssl s_client -connect kaiun.lan:443
  21. 信頼されてないCAからの証明書 ▌kaiun.lanの証明書は事項発⾏証明書 ▌クライアントの信頼リストにも⼊ってないので拒否される root@1ce716be5d42:/# curl -v https://kaiun.lan … * successfully

    set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS alert, Server hello (2): * SSL certificate problem: self signed certificate * stopped the pause stream! * Closing connection 0
  22. 何処が危ない︖ ▌皆 Twitter 好き︖ ▌$> docker exec -it kaiun_client_1 bash

    ▌$> curl -v https://twitter.com * Server certificate: * subject: C=JP; ST=Tokyo; L=Chuo; O=Evil Corp.; CN=twitter.com * start date: Apr 17 03:35:53 2020 GMT * expire date: Apr 15 03:35:53 2030 GMT * common name: twitter.com (matched) * issuer: C=JP; ST=Tokyo; L=Chuo; O=Evil Corp.; CN=twitter.com * SSL certificate verify ok.