Linux Server Admin



BIND9 (DNS Server) #2

      Chatchai J
2012-11-28, 2012-12-03
DNS Server Experiment
●   ทดสอบ domain จริง

    –   resolve จาก 8.8.8.8, 8.8.4.4 Google Public DNS

    –   ทดสอบจาก
        http://www.kloth.net/services/nslookup.php
        http://bwachter.lart.info/tools/dig
        http://dig.menandmice.com/
        http://www.cman.jp/network/support/nslookup.html
        http://www.geektools.com/digtool.php


●   การ update ข้อมูลแบบ dynamic
Zone config ใน named.conf.local
●   สร้าง zone ใน /etc/bind/named.conf.local
    zone "cheshirecat2012.net" {
            type master;
            file "master/cheshirecat2012.net";
    };
Zone file data
●   ไฟล์ /var/cache/bind/master/$YOURDOMAIN
    /var/cache/bind/master/cheshirecat2012.net
    $ORIGIN .
    $TTL 40 

    cheshirecat2012.net IN SOA ns.cheshirecat2012.net. root.cheshirecat2012.net. (
                                    2012112705 ; serial
                                    40         ; refresh (4 hours)
                                    10         ; retry (1 hour)
                                    120        ; expire (4 weeks)
                                    40         ; minimum (4 hours)
                                    )

                            NS      lsa­svr.coe.psu.ac.th. ;; For forwarding
                            MX      10 mx.cheshirecat2012.net.

    $ORIGIN cheshirecat2012.net.
    @            A   192.100.77.175
    ns           A   192.100.77.175
    mx           A   192.100.77.175
    www          A   192.100.77.175
Example zone file
●   download file จาก           http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net


●   หรือ ใช้คำาสั่งนี้
       $ wget ­q ­O­ http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net |
         sed ­e 's/cheshirecat2012.net/$YOURDOMAIN/g' > $YOURDOMAIN


●   เปลียน $YOURDOMAIN เป็ นชื่อ domain ของคุณเอง
        ่
    สมมติว่าเป็ น wilar.org
        $ wget ­q ­O­ http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net |
           sed ­e 's/cheshirecat2012.net/wilar.org/g' > wilar.org
start bind9 / reload data
$ sudo service bind9 start
–   ถ้ามัน stop อยู่

$ sudo rndc reload
–   ถ้ามันทำางานอยู่แล้ว

–   ควรจะได้ข้อความว่า “server reload successful”

$ grep named /var/log/syslog
–   ตรวจสอบ error อีกครั้ง

$ dig @localhost $YOURDOMAIN | egrep -v '^;|^$'
–   ควรจะได้ ip address เป็ น 192.100.77.175
ตรวจสอบการ query
●   DNS Server มีปัญหาในเรื่องการถูกโจมตีอยู่
    มาก – ควรจะมีการตรวจสอบการ query

●   ทำาได้ด้วยการ เพิ่ม option logging ใน
    named.conf.options
query logging option
●   สร้าง directory ใน /var/log ชื่อ named และ
    กำาหนดให้ bind เป็ น owner ของ directory นั้น
      $ sudo mkdir /var/log/named
      $ sudo chown bind:bind /var/log/named
●   เพิ่ม logging option ในไฟล์
    /etc/bind/named.conf.options
query logging option (cont)
●   เพิม /etc/bind/named.conf.options
       ่

      logging {
         channel query_logging {
            file "/var/log/named/query.log";
            print­time yes;
         };
         category queries { query_logging; };
      };

●   ใช้คำาสั่ง
    $ sudo rndc reload
●   ควรจะได้ “server reload successful”
ทดสอบ query logging
●   ใช้ tmux เพื่อ monitor ผลลัพธ์
      $ tail -f /var/log/named/query.log
●   จากอีก terminal หนึ่ง (CTRL+B, C)
      $ dig @localhost $MYDOMAIN | egrep -v '^;|^$'
      $ host www.$MYDOMAIN localhost
●   ดู log ที่เกิดขึ้นใน query.log
ทดสอบจาก ภายนอก
●   กรอกข้อมูล domain และ IP address ของ Linux VM ที่
    http://bit.ly/Ubki56 
    (2012­12­03 – IP Address ไม่จำาเป็ น/auto detect)

●   รอให้ผม ใช้ข้อมูล setup forward DNS query ให้เสร็จ (ระบบ
    อัตโนมัติ ยังไม่เสร็จ) (2012­12­03 – เสร็จแล้ว)

●   ทดสอบ query ข้อมูลจาก     lsa­svr.coe.psu.ac.th

●   ทดสอบ query โดยใช้ services จากภายนอก

    (โดยเลือกใช้ google public DNS)
ทดสอบ (ต่อ)
    $ dig @lsa­svr.coe.psu.ac.th $MYDOMAIN
    $ dig @lsa­svr.coe.psu.ac.th www.$MYDOMAIN

●   ดูข้อมูลใน query.log ควรที่จะมี query record ที่มาจาก ip
    172.30.0.85
●   ถ้าไม่มีแสดงว่า ip ที่กรอกไว้อาจจะไม่ถูกต้อง หรือ
    config บน lsa-svr.coe.psu.ac.th ยังไม่ update หรือ ยังไม่
    ถูกต้อง – Please ask!
ทดสอบ (ต่อ)
●   จะต้องกำาหนดที่ ผู้ให้บริการ ที่เราไปจดโดเมน
    ว่า name server คือ lsa-svr.coe.psu.ac.th

●   โดยทั่วไปแล้วจะมี 2 Server กำาหนดแค่อนเดียวก็พอ
                                         ั

●   ไม่สามารถกำาหนดเป็ น IP Address ได้ จะต้องระบุเป็ นชื่อ

●   lsa-svr.coe.psu.ac.th จะ forward request ไปให้ VM
    ที่ setup เอาไว้โดยอัตโนมัติถ้า zone file ของ domain นั้น
    กำาหนดให้ NS เป็ น lsa-svr.coe.psu.ac.th
    (ใช้ได้เฉพาะ ภายในเครือข่ายของ CoE' Net)
hostinglotus




http://www.hostinglotus.com/hosting/clientarea.php?action=domaindetails&id=XXXX%27
dotsiam




http://cp.dotsiam.net/servlet/ViewDomainServlet?orderid=xxxxxxxx#domorder
ทดสอบ (ต่อ)
●   ทดสอบจาก

      http://www.kloth.net/services/nslookup.php
      (หรือ URL อื่นๆ ดู list จาก slide page 2)
    nslookup
      Domain: $YOURDOMAIN
      Server: 8.8.8.8
      Query: A(IPv4 Address)


●   ดูข้อมูลใน query.log ควรที่จะมี query record ที่มาจาก ip 172.30.0.85

●   ถ้าไม่มแสดงว่า ip ที่กรอกไว้อาจจะไม่ถูกต้อง หรือ config บน
           ี
    lsa-svr.coe.psu.ac.th ยังไม่ update

●   ทดลองเปลี่ยน 8.8.8.8 เป็ น lsa-svr.coe.psu.ac.th ถ้ายังมีปัญหา
Dynamic Update RR
●   ปกติ server จะใช้ static address ไม่ได้รบ ip จาก
                                            ั
    dhcp server
●   แต่ในบางกรณี เช่น Home Network ใช้ ADSL

●   IP จะ dynamic allocate ทุกครั้งที่เชื่อมต่อ

●   เราสามารถ แก้ไข IP แบบอัตโนมัติได้ดวย
                                       ้
    nsupdate (คำาสั่งใน package dnsutils)
ข้อควรคำานึง
●   Manual Modified Zone กับ Dynamic Update
    Zone อยู่ร่วมกัน ไม่ค่อยดีเท่าไหร่

●   ควรแยก Zone ต่างหาก

●   ในที่นี้ให้ใช้ sub domain
Sub domain
●   ใช้ “dyn.$MYDOMAIN” (dynamic address sub
    domain)
    –   Sub domain: dyn.cheshirecat2012.net
    –   เพิ่ม Zone file for sub domain

    –   เพิ่ม “allow-update” config
Sub domain (cont)
●   เพิ่ม “dyn” sub domain
    zone "dyn.cheshirecat2012.net" {
            type master;
            file "master/dyn.cheshirecat2012.net";
            allow­update { 127.0.0.1; };
    };

●   เพิ่ม zone file
    /var/cache/bind/master/dyn.$YOURDOMAIN
Sub domain (cont)
●   Zone file for dyn subdomain


$ORIGIN dyn.cheshirecat2012.net.
$TTL 40 

@ IN SOA ns.cheshirecat2012.net. root.cheshirecat2012.net. (
                                1          ; serial
                                40         ; refresh (4 hours)
                                10         ; retry (1 hour)
                                120        ; expire (4 weeks)
                                40         ; minimum (4 hours)
                                )

@                       NS      lsa­svr.coe.psu.ac.th.   ;; For forwarding
www         30 IN       A       192.100.77.175
Sub domain (cont)
●   Zone file ของ domain หลัก
    (cheshirecat2012.net) จะต้องระบุ NS ของ
    subdomain (dyn.cheshirecat2012.net)
    ซึ่งในที่นคือ server ตัวเดียวกัน
              ี้
     $ORIGIN cheshirecat2012.net.
     @            A   192.100.77.175
     ns           A   192.100.77.175
     mx           A   192.100.77.175
     www          A   192.100.77.175
     dyn    IN    NS lsa­svr.coe.psu.ac.th.
     dyn    IN    NS 172.30.XX.XXX
การใช้ nsupdate
●   nsupdate ใน dnsutils สำาหรับ update dns แบบ
    dynamic
●   เครื่องหมาย “>” คือ prompt ของ nsupdate
    $ nsupdate
    > zone dyn.cheshirecat2012.net.
    > server 127.0.0.1
    > update add test.dyn.cheshirecat2012.net. 30 A 1.2.3.4
    > show 
    > send
    > answer
    > quit
    $ host test.dyn.cheshirecat2012.net localhost
การใช้ nsupdate (cont)
●   คำาสั่งของ nsupdate สำาหรับการเปลียนแปลง IP
                                      ่
    address
    update delete
    update add
●   ถ้ามี address อย่ใน zone แล้วจะต้อง delete ก่อน แล้ว
                     ู
    ค่อย add เพื่อเพิ่มเข้าไปใหม่

●   การระบุ delete ไม่จำาเป็ นจะต้องรู้ ip address เดิม
การใช้ nsupdate (cont)
$ nsupdate
> server 127.0.0.1
> zone dyn.cheshirecat2012.net.
> update delete test.dyn.cheshirecat2012.net. IN A
> send
> quit
การใช้ nsupdate (cont)
●   ใน zone directory จะมีไฟล์ .jnl เพิมขึ้นมา
                                       ่

●   ข้อมูลที่เพิ่ง update จะอยู่ใน .jnl (journal) ไฟล์

●   ถ้าต้องการแก้ไขไฟล์แบบ manual
    จะต้อง freeze การ update แบบ dynamic ก่อน
    $ sudo rndc freeze $YOURDOMAIN
●   แล้วแก้ไข zone file หลังจากนั้น ให้ใช้ thaw
    สำาหรับการใช้งานต่อตามปกติ
    $ sudo rndc thaw $YOURDOMAIKN
การใช้ nsupdate (cont)
●   การ update สามารถ update จาก server อื่นๆได้

●   แต่ถ้าจะทำา ควรทีจะกำาหนดให้ใช้ public key ในการ
                     ่
    อนุญาต ให้เข้าถึงและแก้ไขข้อมูลใน zone ได้

●   เนื่องจาก ค่อนข้างซับซ้อน จะไม่พูดถึงในที่นี้
เรื่องอื่นๆ (not cover here)
●   Secondary DNS
    –   กำาหนด zone ที่มี type เป็ น slave

    –   ระบุตำาแหน่งไฟล์ ทีจะเก็บ zone data
                           ่

    –   ระบุ master ip address (Primary DNS Server)

    –   บน Primary DNS ระบุ Allow transfer, Allow
DNS Server


จบเพียงเท่านี้ สำาหรับตอนนี้
     จะกล่าวถึงอีกที
ตอน setup Mail SMTP Server

Ch07 bind9-part2

  • 1.
    Linux Server Admin BIND9(DNS Server) #2 Chatchai J 2012-11-28, 2012-12-03
  • 2.
    DNS Server Experiment ● ทดสอบ domain จริง – resolve จาก 8.8.8.8, 8.8.4.4 Google Public DNS – ทดสอบจาก http://www.kloth.net/services/nslookup.php http://bwachter.lart.info/tools/dig http://dig.menandmice.com/ http://www.cman.jp/network/support/nslookup.html http://www.geektools.com/digtool.php ● การ update ข้อมูลแบบ dynamic
  • 3.
    Zone config ในnamed.conf.local ● สร้าง zone ใน /etc/bind/named.conf.local zone "cheshirecat2012.net" {         type master;         file "master/cheshirecat2012.net"; };
  • 4.
    Zone file data ● ไฟล์ /var/cache/bind/master/$YOURDOMAIN /var/cache/bind/master/cheshirecat2012.net $ORIGIN . $TTL 40  cheshirecat2012.net IN SOA ns.cheshirecat2012.net. root.cheshirecat2012.net. (                                 2012112705 ; serial                                 40         ; refresh (4 hours)                                 10         ; retry (1 hour)                                 120        ; expire (4 weeks)                                 40         ; minimum (4 hours)                                 )                         NS      lsa­svr.coe.psu.ac.th. ;; For forwarding                         MX      10 mx.cheshirecat2012.net. $ORIGIN cheshirecat2012.net. @ A 192.100.77.175 ns           A   192.100.77.175 mx           A   192.100.77.175 www A 192.100.77.175
  • 5.
    Example zone file ● download file จาก http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net ● หรือ ใช้คำาสั่งนี้ $ wget ­q ­O­ http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net |   sed ­e 's/cheshirecat2012.net/$YOURDOMAIN/g' > $YOURDOMAIN ● เปลียน $YOURDOMAIN เป็ นชื่อ domain ของคุณเอง ่ สมมติว่าเป็ น wilar.org $ wget ­q ­O­ http://fivedots.coe.psu.ac.th/~cj/LSA/cheshirecat2012.net |        sed ­e 's/cheshirecat2012.net/wilar.org/g' > wilar.org
  • 6.
    start bind9 /reload data $ sudo service bind9 start – ถ้ามัน stop อยู่ $ sudo rndc reload – ถ้ามันทำางานอยู่แล้ว – ควรจะได้ข้อความว่า “server reload successful” $ grep named /var/log/syslog – ตรวจสอบ error อีกครั้ง $ dig @localhost $YOURDOMAIN | egrep -v '^;|^$' – ควรจะได้ ip address เป็ น 192.100.77.175
  • 7.
    ตรวจสอบการ query ● DNS Server มีปัญหาในเรื่องการถูกโจมตีอยู่ มาก – ควรจะมีการตรวจสอบการ query ● ทำาได้ด้วยการ เพิ่ม option logging ใน named.conf.options
  • 8.
    query logging option ● สร้าง directory ใน /var/log ชื่อ named และ กำาหนดให้ bind เป็ น owner ของ directory นั้น $ sudo mkdir /var/log/named $ sudo chown bind:bind /var/log/named ● เพิ่ม logging option ในไฟล์ /etc/bind/named.conf.options
  • 9.
    query logging option(cont) ● เพิม /etc/bind/named.conf.options ่ logging { channel query_logging { file "/var/log/named/query.log"; print­time yes; }; category queries { query_logging; }; }; ● ใช้คำาสั่ง $ sudo rndc reload ● ควรจะได้ “server reload successful”
  • 10.
    ทดสอบ query logging ● ใช้ tmux เพื่อ monitor ผลลัพธ์ $ tail -f /var/log/named/query.log ● จากอีก terminal หนึ่ง (CTRL+B, C) $ dig @localhost $MYDOMAIN | egrep -v '^;|^$' $ host www.$MYDOMAIN localhost ● ดู log ที่เกิดขึ้นใน query.log
  • 11.
    ทดสอบจาก ภายนอก ● กรอกข้อมูล domain และ IP address ของ Linux VM ที่ http://bit.ly/Ubki56  (2012­12­03 – IP Address ไม่จำาเป็ น/auto detect) ● รอให้ผม ใช้ข้อมูล setup forward DNS query ให้เสร็จ (ระบบ อัตโนมัติ ยังไม่เสร็จ) (2012­12­03 – เสร็จแล้ว) ● ทดสอบ query ข้อมูลจาก lsa­svr.coe.psu.ac.th ● ทดสอบ query โดยใช้ services จากภายนอก (โดยเลือกใช้ google public DNS)
  • 12.
    ทดสอบ (ต่อ) $ dig @lsa­svr.coe.psu.ac.th $MYDOMAIN $ dig @lsa­svr.coe.psu.ac.th www.$MYDOMAIN ● ดูข้อมูลใน query.log ควรที่จะมี query record ที่มาจาก ip 172.30.0.85 ● ถ้าไม่มีแสดงว่า ip ที่กรอกไว้อาจจะไม่ถูกต้อง หรือ config บน lsa-svr.coe.psu.ac.th ยังไม่ update หรือ ยังไม่ ถูกต้อง – Please ask!
  • 13.
    ทดสอบ (ต่อ) ● จะต้องกำาหนดที่ ผู้ให้บริการ ที่เราไปจดโดเมน ว่า name server คือ lsa-svr.coe.psu.ac.th ● โดยทั่วไปแล้วจะมี 2 Server กำาหนดแค่อนเดียวก็พอ ั ● ไม่สามารถกำาหนดเป็ น IP Address ได้ จะต้องระบุเป็ นชื่อ ● lsa-svr.coe.psu.ac.th จะ forward request ไปให้ VM ที่ setup เอาไว้โดยอัตโนมัติถ้า zone file ของ domain นั้น กำาหนดให้ NS เป็ น lsa-svr.coe.psu.ac.th (ใช้ได้เฉพาะ ภายในเครือข่ายของ CoE' Net)
  • 14.
  • 15.
  • 16.
    ทดสอบ (ต่อ) ● ทดสอบจาก http://www.kloth.net/services/nslookup.php (หรือ URL อื่นๆ ดู list จาก slide page 2) nslookup Domain: $YOURDOMAIN Server: 8.8.8.8 Query: A(IPv4 Address) ● ดูข้อมูลใน query.log ควรที่จะมี query record ที่มาจาก ip 172.30.0.85 ● ถ้าไม่มแสดงว่า ip ที่กรอกไว้อาจจะไม่ถูกต้อง หรือ config บน ี lsa-svr.coe.psu.ac.th ยังไม่ update ● ทดลองเปลี่ยน 8.8.8.8 เป็ น lsa-svr.coe.psu.ac.th ถ้ายังมีปัญหา
  • 17.
    Dynamic Update RR ● ปกติ server จะใช้ static address ไม่ได้รบ ip จาก ั dhcp server ● แต่ในบางกรณี เช่น Home Network ใช้ ADSL ● IP จะ dynamic allocate ทุกครั้งที่เชื่อมต่อ ● เราสามารถ แก้ไข IP แบบอัตโนมัติได้ดวย ้ nsupdate (คำาสั่งใน package dnsutils)
  • 18.
    ข้อควรคำานึง ● Manual Modified Zone กับ Dynamic Update Zone อยู่ร่วมกัน ไม่ค่อยดีเท่าไหร่ ● ควรแยก Zone ต่างหาก ● ในที่นี้ให้ใช้ sub domain
  • 19.
    Sub domain ● ใช้ “dyn.$MYDOMAIN” (dynamic address sub domain) – Sub domain: dyn.cheshirecat2012.net – เพิ่ม Zone file for sub domain – เพิ่ม “allow-update” config
  • 20.
    Sub domain (cont) ● เพิ่ม “dyn” sub domain zone "dyn.cheshirecat2012.net" {         type master;         file "master/dyn.cheshirecat2012.net"; allow­update { 127.0.0.1; }; }; ● เพิ่ม zone file /var/cache/bind/master/dyn.$YOURDOMAIN
  • 21.
    Sub domain (cont) ● Zone file for dyn subdomain $ORIGIN dyn.cheshirecat2012.net. $TTL 40  @ IN SOA ns.cheshirecat2012.net. root.cheshirecat2012.net. (                                 1          ; serial                                 40         ; refresh (4 hours)                                 10         ; retry (1 hour)                                 120        ; expire (4 weeks)                                 40         ; minimum (4 hours)                                 ) @                       NS      lsa­svr.coe.psu.ac.th. ;; For forwarding www         30 IN       A       192.100.77.175
  • 22.
    Sub domain (cont) ● Zone file ของ domain หลัก (cheshirecat2012.net) จะต้องระบุ NS ของ subdomain (dyn.cheshirecat2012.net) ซึ่งในที่นคือ server ตัวเดียวกัน ี้ $ORIGIN cheshirecat2012.net. @ A 192.100.77.175 ns           A   192.100.77.175 mx           A   192.100.77.175 www A 192.100.77.175 dyn    IN NS lsa­svr.coe.psu.ac.th. dyn    IN NS 172.30.XX.XXX
  • 23.
    การใช้ nsupdate ● nsupdate ใน dnsutils สำาหรับ update dns แบบ dynamic ● เครื่องหมาย “>” คือ prompt ของ nsupdate $ nsupdate > zone dyn.cheshirecat2012.net. > server 127.0.0.1 > update add test.dyn.cheshirecat2012.net. 30 A 1.2.3.4 > show  > send > answer > quit $ host test.dyn.cheshirecat2012.net localhost
  • 24.
    การใช้ nsupdate (cont) ● คำาสั่งของ nsupdate สำาหรับการเปลียนแปลง IP ่ address update delete update add ● ถ้ามี address อย่ใน zone แล้วจะต้อง delete ก่อน แล้ว ู ค่อย add เพื่อเพิ่มเข้าไปใหม่ ● การระบุ delete ไม่จำาเป็ นจะต้องรู้ ip address เดิม
  • 25.
  • 26.
    การใช้ nsupdate (cont) ● ใน zone directory จะมีไฟล์ .jnl เพิมขึ้นมา ่ ● ข้อมูลที่เพิ่ง update จะอยู่ใน .jnl (journal) ไฟล์ ● ถ้าต้องการแก้ไขไฟล์แบบ manual จะต้อง freeze การ update แบบ dynamic ก่อน $ sudo rndc freeze $YOURDOMAIN ● แล้วแก้ไข zone file หลังจากนั้น ให้ใช้ thaw สำาหรับการใช้งานต่อตามปกติ $ sudo rndc thaw $YOURDOMAIKN
  • 27.
    การใช้ nsupdate (cont) ● การ update สามารถ update จาก server อื่นๆได้ ● แต่ถ้าจะทำา ควรทีจะกำาหนดให้ใช้ public key ในการ ่ อนุญาต ให้เข้าถึงและแก้ไขข้อมูลใน zone ได้ ● เนื่องจาก ค่อนข้างซับซ้อน จะไม่พูดถึงในที่นี้
  • 28.
    เรื่องอื่นๆ (not coverhere) ● Secondary DNS – กำาหนด zone ที่มี type เป็ น slave – ระบุตำาแหน่งไฟล์ ทีจะเก็บ zone data ่ – ระบุ master ip address (Primary DNS Server) – บน Primary DNS ระบุ Allow transfer, Allow
  • 29.
    DNS Server จบเพียงเท่านี้ สำาหรับตอนนี้ จะกล่าวถึงอีกที ตอน setup Mail SMTP Server