2. 리눅스 Server 구축및실무운영 이단원에서는리눅스운영체제를이용하여실무에서주로사용되어지는시스템구축기술과운영기술에대해다루도록하겠습니다. 이단원에서소개되는기술의부분은실무구축기술에중점을두고있으며, 이론적인접근은최소화하고있습니다. 이론적인자세한설명은각분야별전문서적을참고하시길바랍니다. 2.1. DNS (Domain Name System) DNS (Domain Name System) 는인터넷의접근기준이되는 IP Address를특정 String 형식의이름으로 Mapping 을시켜주는거대한분산 Name Date Base 라볼수있다. 실제 1970년대까지는주로 hosts 란파일에주요인터넷주소를적어두고배포하는형식의 DNS 방식을채택하였지만, hosts 파일의크기가거대해지자많은트래픽과이름충돌과같은여러가지문제가발생하기에이른다. 1983년 Paul Mockapetris가 RFC882, RFC883( 현재는 RFC1034로대체됨 ) 에새로운명명체제에대한구현을공식발표하며, 크게네임스페이스의계층구조, 분산데이터베이스, Email 라우팅개선을주안점으로현재의 DNS 가탄생하게된다. 이제본격적으로 DNS 설정에대해알아보도록하자 1/35 페이지
2.1.1 DNS 작동원리 설정에앞서 DNS 가어떻게작동하는지그원리에대해간단히알아보자. 예를들어여러분의웹브라우저로특정사이트에접속을한다는가정을해보도록하자. [ DNS 작동원리도 - 그림 1 ] 1. 웹브라우저는로컬 PC 의 DNS 클라이언트에설정된 DNS 서버로브라우저를접속한도메인에매핑된 IP를찾는다. 2. 로컬 DNS 서버는먼저자신의 DNS DB(/etc/named.conf) 에해당도메인이있는지를찾는다. 3. 해당도메인이없을경우자신의캐쉬에등록된정보가있는지확인한다. 2/35 페이지
4. 해당도메인이지금까지로컬 DNS 서버에서요청된적이없다면자기상위의 Root DNS 서버에해당도메인의정보를묻게된다. 5. 해당도메인이실제존재하는도메인이면 Root DNS 서버는해당도메인의실제권한을가지고있는 DNS 서버의주소를가르쳐주게된다. 6. 그럼해당도메인의실제권한을가지고있는 DNS 서버에서해당도메인의 IP 주소를확인할수있게된다. 이런과정의절차는다소복잡할수있지만사용자에게는매우투명하게처리되어진다. 실제각과정마다문제발생의요인이있고, 이런과정에대해이해를하지못할경우 DNS 서버를운영중문제가발생하게되면문제추적에어려움을겪게될것이다. DNS 서비스의경우는굳이서비스를하기위해서자체적으로 DNS 서버를구축하여운영하지않아도된다. 그룹내에 DNS 시스템이있는경우라면해당 DNS 서버에 DNS 서비스를통합하여운영하는것이효율적이다. 실제각서버별로도메인이각기다르다고하면, 각서버마다 DNS 서버를구축하는경우가있는데이런경우도메인관리에많은불편함과번거로운이생기기마련이다. 이상적인방식은 DNS 전용서비스용서버를이중화하여그룹내의모든도메인을일괄적으로관리하는방법이가장효율적이라할수있을것이다. 이상적인 DNS 서버를구축하기위한설정과실제도메인을취득하여 DNS를추가, 관리하는방법에대해알아보도록하자. 2.1.2 BIND (Berkeley Internet Name Daemon) 설치 먼저 Redhat Linux Package 에들어있는 bind 프로그램을설치하도록하자. 3/35 페이지
# rpm -Uvh./cd1/RedHat/RPMS/bind-9.2.1-16.i386.rpm # rpm -Uvh./cd1/RedHat/RPMS/bind-utils-9.2.1-16.i386.rpm # rpm -Uvh./cd2/RedHat/RPMS/bind-devel-9.2.1-16.i386.rpm 위와같은절차로설치는간단히완료할수있다. 그럼아래와같은 DNS 설정에필요한파일들이설치가될것이다. * /etc/rndc.conf bind8에서 bind 9으로변천과정에서추가된설정으로 DNS 관련보안인증키를생성하고이인증키를이용하여 DNS 의여러가지보안을강화함. * /etc/named.conf 네임서버셋팅시가장중심이되는설정파일로각도메인에대한 ip변환값을나타내는 zone file의이름과위치를정의한다. * /etc/resolv.conf 자기 system에적용될 DNS를설정한다. /etc/host.conf hosts file dns 대한설정과 DNS 와관련된몇가지설정을정의한다. /etc/hosts 자기 system에서만적용되는 mini DNS 설정 /var/named/named.ca 중요한 DNS 들의 ip를적용시켜 ip 검색시보다더빨리찾을수있도록함. ( 손댈필요없음 ) /var/named/named.local ip address 로도메인을찾을수있도록함 /var/named/named.zone named.conf 에정의된도메인의정보를정의한설정파일, 이곳에서실질적으로도메인이 ip address로변환되어진다. 4/35 페이지
/var/named/named.rev 대표도메인에대한 reverse mapping 정보를기록한다. 위에서간단히설명한 9개의파일로네임서버는가동되어진다. 허나실질적으로설정하는파일은 5가지정도이다. 2.1.3 DNS 기본설정 - /etc/rndc.conf bind 9 를설치하면 rndc-confgen 이라는명령어가설치가된다. 이명령어를이용해서 rndc.conf 를생성을하도록한다. rndc-confgen 명령을이용하면 key 값을 random 하게생성해준다. [root@arhfw root]# rndc-confgen > /etc/rndc.conf 생성된 rndc.conf 파일을열어 rndc-key 를임의의키명으로수정하도록한다. [root@arhfw root]# vi /etc/rndc.conf ----------------------------------------------------------------------------- # Start of rndc.conf #key "rndc-key" { key "clx-key" { algorithm hmac-md5; secret "J4WAGsHt1kzy4SbouN5iAQ=="; options { # default-key "rndc-key"; default-key "clx-key"; default-server 127.0.0.1; default-port 953; 5/35 페이지
----------------------------------------------------------------------------- 위와같이 rndc 설정이완료되면 named.conf 설정으로넘어가도록하자. - /etc/named.conf named.conf 설정파일은 DNS 설정파일중가장중요한파일로실제도메인의 INDEX 정보를저장하는곳으로 DNS 서버의동작의시작역할을하는파일이다. [root@arhfw root]# vi /etc/named.conf ---------------------------------------------------------------------------- options { version "unknown"; directory "/var/named"; allow-transfer { 192.168.133.9; allow-recursion { 192.168.133.0/24; localhost; // allow-query { 192.168.133.0/24; localhost; // forworders { 192.168.133.9;192.168.133.1 logging { category lame-servers { null; category unmatched { null; category network { null; category notify { null; key "clx-key" { algorithm hmac-md5; secret "LHE+QD1pUWzE2d1JE4OPNA=="; 6/35 페이지
controls { inet 127.0.0.1 allow { localhost; } keys { clx-key; zone "." IN { type hint; file "named.ca"; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; zone "133.168.192.in-addr.arpa" IN { type master; file "clunix.rev"; zone "clunix.org" IN { type master; file "clunix.zone"; allow-update { none; ---------------------------------------------------------------------------------- 7/35 페이지
이제위의 named.conf 파일설정에대한의미에대해하나씩알아보도록하자. 위의설정은실제실무에서흔히사용되는기본 named.conf 설정으로위설정파일을기준으로해서각자의 DNS 설정파일의변동부분을적용시키면될것이다. --------------------------------------------------------------------------------- options { version "unknown"; --------------------------------------------------------------------------------- # dig @clunix.org txt chaos version.bind. grep version ; <<>> DiG 9.2.1 <<>> @clunix.org txt chaos version.bind. ;version.bind. CH TXT version.bind. 0 CH TXT "9.2.1" dig 명령을이용하여아래와같이해당 DNS 서버의버전을알수있다. 이는실제 DNS 서버의버전을알아되어해당버전의버그등을이용하여해킹공격을시도할수있다. 그렇기에최대한시스템의주요어플리케이션의버전은외부에서알수없게해주는것이바람직하다. options 설정에 version "unknown"; 구문을추가하여 DNS 서버정보를숨겨버릴수있다. # dig @clunix.org txt chaos version.bind. grep version ; <<>> DiG 9.2.1 <<>> @clunix.org txt chaos version.bind. ;version.bind. CH TXT version.bind. 0 CH TXT "unknown" -------------------------------------------------------------------------------- directory "/var/named"; -------------------------------------------------------------------------------- 각도메인의정의된 zone file, rev file 등이존재하는 Directory 경로를지정하는설정이다. -------------------------------------------------------------------------------- allow-transfer { 192.168.133.9; -------------------------------------------------------------------------------- allow-transfer문은 Primary 네임서버에서의 Zone transfer를허용할호스트를지정 8/35 페이지
하는설정이다. Bind DNS 서버에서기본적으로모든호스트에 zone transfer 등을허용하고있다. 그래서 Nslookup 의 ls 기능을이용하면해당도메인의모든 Zone 정보를확인할수있다. 위설정에서실제허용이필요한호스트만을열어주도록한다. Zone transfer 가필요한호스트로는대표적으로 Secondary 네임서버가있다. 만일아무런곳에도열어주고싶지않은경우는 allow-transfer { none; 설정으로 DNS 보안을강화하도록한다. -------------------------------------------------------------------------------- allow-recursion { 192.168.133.0/24; localhost; -------------------------------------------------------------------------------- allow-recursion 설정은실제해당시스템의 named.conf 에정의된도메인이외의다른도메인을캐싱서버와같이이용하여 Query를하는경우이에대한허가대역을정하는설정이다. 즉이 DNS 서버를외부도메인에대한 DNS 서버로사용할수있는클라이언트대역이라고보면된다. -------------------------------------------------------------------------------- allow-query { 192.168.133.0/24; localhost; -------------------------------------------------------------------------------- allow-query 문은해당 DNS 서버를통해 DNS 질의를할수있는호스트대역을지정하는보안설정이다. 이구문에서허가하는네트워크대역에서만이 DNS 서버를통해 DNS query를보낼수있다. 하지만이설정의경우주의해야할점이있다. 이시스템에서사용하는 Domain 이외부에서범용적으로인식을해야하는도메인의 DNS 서버라고하면위설정을해서는안된다. 만일대외홍보홈페이지등에사용되는도메인이라고하면실제해당도메인을 192.168.133.0 의 C-Class 대역에서만인식을할것이다. 위설정은해당도메인을사용하는대역이제한적인경우에만사용을해야할것이다. -------------------------------------------------------------------------------- forworders { 192.168.133.9;192.168.133.1 } -------------------------------------------------------------------------------- 이설정은실제이서버에도메인질의가들어오면 192.168.133.9 서버에서질의를 9/35 페이지
보내버린다. 192.168.133.9 서버에서응답이없으면다시 192.168.133.1 으로보내버리고그곳에서도응답이없는경우는원래대로 root server 로질의하게된다. Option 설정에이설정이들어가면모든도메인질의에대해 forward 를시키므로특정도메인에한해이런기능을추가하고싶을때는해당도메인의 zone block에위설정을추가하면된다. -------------------------------------------------------------------------------- controls { inet 127.0.0.1 allow { localhost; } keys { clx-key; -------------------------------------------------------------------------------- inetd 는귀를귀울일주소를지정한다. 모든곳은 * 문자를이용한다. port 는귀를귀울일포트를지정한다. rndc 의경우 953 번포트를기본으로사용을한다. allow 는 tcp wrapper 와비슷하게생각하면된다. 즉 allow 에지정된호스트로부터의요청만허락을한다는의미이다. 모든곳을지정할경우에는 any 로지정하며, 어느곳도허락하고싶지않다면 none 으로지정을하면된다. keys 는 allow 에지정이되어있지않더라도지정된 key 와동일할경우허락을한다. --------------------------------------------------------------------------------- key "clx-key" { algorithm hmac-md5; secret "LHE+QD1pUWzE2d1JE4OPNA=="; --------------------------------------------------------------------------------- key 설정은 rndc-keygen 으로생성한 /etc/rndc.conf 안에있는키를복사해서붙여넣기를하면된다. 여기서생성된키를이용하여여러가지 DNS 인증체계를구성할수있다. --------------------------------------------------------------------------------- 10/35 페이지
logging { category lame-servers { null; category unmatched { null; category network { null; category notify { null; ---------------------------------------------------------------------------------- category lame-servers { null; 두도메인사이의권한부여가되어져있지않는상태에서해당도메인의 Zone 설정에 NS 지정이되어져있으면이에 Lame Server 란메세지를담은로그가발생하게된다. 이런형태의로그를로그파일에생성하지않겠다는의미이다. category unmatched { null; DNS 설정시지정된형태로설정이되지않은정보가있는경우로그에이에대한정보가남게된다. 실제서비스에영향을주지않는로그임으로이역시로그에남기지않도록한다. category network { null; 네트워크작동에대한로그를남기지않는다. category notify { null; NOTIFY protocol 에관련된메세지를남기지않는다. ---------------------------------------------------------------------------------- zone "." IN { type hint; file "named.ca"; zone "localhost" IN { type master; 11/35 페이지
file "localhost.zone"; allow-update { none; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; --------------------------------------------------------------------------------- 위설정은각도메인의 zone block 설정에대한기본설정사항이다.. zone block 은캐쉬네임서버, 로컬호스트, 로컬네트워크의 inverse domain, 각도메인, name server가위치하는네트워크에대한 inverse domain, 세컨더리도메인, primary 네임서버가위치하는네트워크에대한 inverse domain 등 7 가지에대해서설정을한다. 만약네임서버가 secondary 의역할을하지않는다면가장마지막의 secondary domain 과 primary 네임서버가위치하는네트워크에대한 inverse domain 은설정할필요가없다. 위설정은캐시네임서버와로컬호스트에관련된기본설정이다. 이부분은꼭존재를해야하며, /etc/named.conf 에기본설정그대로사용을하면된다. ------------------------------------------------------------------------------------ zone "clunix.org" IN { type master; file "clunix.zone"; allow-update { none; ------------------------------------------------------------------------------------ 위설정은 primary 도메인에대한 zone block 설정부분이다. 이서버에서 DNS 서버역할을할도메인이추가될경우위 zone block 설정과같은형태로 zone 설정을추가하면된다. zone block 설정은다음과같은형식을갖추고있다. 12/35 페이지
zone "ORIGIN" IN { type master; file /path/filename; allow-update { none; 위설정을분석하면현재이 DNS 서버는 clunix.org 의도메인에대해 primary DNS 역할을수행하고있으면 clunix.org 에대한구체적인정보는 /var/named/clunix.zone 파일안에담겨져있다. 는의미를가지고있는것이다. ------------------------------------------------------------------------------------- zone "133.168.192.in-addr.arpa" IN { type master; file "clunix.rev"; ------------------------------------------------------------------------------------- 위설정은 inverse domain에대한설정부분으로설정형식은다음과같다. 기본적인형식은 primary 도메인설정방식과동일하다. zone "ORIGIN" IN { type master; file /path/filename; allow-update { none; 다른점은 ORIGIN 의표기법인데, inverse domain 의 ORIGIN 은네트워크대역.in-addr.arpa 로설정을한다. 네트워크대역은꺼꾸로표현한다는것을주의한다. 예를들어 C class 의 1.2.3.0 네트워크에대한 inverse domain 을설정한다면, 3.2.1-in-addr.arpa 가된다는것이다. 각클래스별예제를참고하도록한다. A class 10.0.0.0 => 10.in-addr.arpa B class 172.1.0.0 => 1.172.in-addr.arpa C class 192.168.1.0 => 1.168.192.in-addr.arpa 13/35 페이지
- /var/named/<domain>.zone zone 파일을설정하기전에다음의 2 가지사항은꼭명심하도록한다. * 띄어쓰기는 TAB 을이용해서하도록한다. * 모든공백라인은 ";" 문자를이용하여주석처리를하도록한다. zone 파일의정의는 named.conf 의 zone block 의 file 옵션값에의해정의된다. 아래는앞에서의 named.conf 에서 clunix.org 의 zone block 에정의한 clunix.zone 파일에대한설정이다. [root@arhfw root]# vi /var/named/clunix.zone -------------------------------------------------------------------------------------- $TTL 86400 @ IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997092700 ; Serial 28800 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum IN NS ns.clunix.org. IN MX 10 arhfw IN A 192.168.133.254 ; ns IN A 192.168.133.254 ; arhfw IN CNAME ns arhdev IN A 192.168.133.9 arh01 IN A 192.168.133.1 arh02 IN A 192.168.133.2 arh03 IN A 192.168.133.3 arh04 IN A 192.168.133.4 arh05 IN A 192.168.133.5 14/35 페이지
arh06 IN A 192.168.133.6 arh07 IN A 192.168.133.7 arh08 IN A 192.168.133.8 ------------------------------------------------------------------------------------- 위 zone 설정의요소별주요사항에대해서살펴보도록하겠다. @ 는 /etc/named.conf 의 <ORIGIN> 에해당하는별칭이다. 즉여기서는 @ = clunix.org 가될것이다. Serial 는네임서버의우선순위를나타내는것으로 primary/secondary 네임서버간의데이터전송시 Primary 의 Serial 이 Secondary 의 Serial 에비해빨라야 Secondary 에서 Primary 의 DNS Zone 변경데이터를가져가게된다. refresh 는 Primary 서버로부터 Zone 데이터를가져온후다시업데이트가일어나는시간주기이다. retry 는 Primary 서버에접속시도가실패했을경우재접속을하는시간주기다. expire 는 Primary 로부터받은데이터정보를무효화시키는시간주기이다. 만일 refresh 시간이 expire 시간보다길게설정하면실제 Secondary 서버에서해당도메인의정보를가지고있지않는상태의기간이존재하게됨으로항상 refresh 시간을 expire 시간보다짧게지정해야할것이다. minimum 는캐싱업데이트 ttl 시간으로이 DNS 서버를통해특정도메인을질의했을경우일정시간동안캐쉬에저장하게되는데여기서캐싱시간을지정하게된다. IN NS ns.clunix.org. 위설정은해당도메인의 NS 를정의하는부분이다. 여기서 ns.clunix.org. 라고정의되는데이 NS 는 internic 과같은최상의 DNS DB에등록된도메인정보에의존된다. IN MX 10 arhfw 15/35 페이지
위설정은해당도메인 ( clunix.org ) 의 MX 레코드 ( 메일서버 ) 값을정의하는곳의로 clunix.org 도메인의메일서버는 arhfw.clunix.org 서버이다는의미이다. 여기서 zone 파일의호스트명명규칙중알아야하는부분이있는데실제 zone 파일에서완벽한도메인을표기할때는제일마지막에 Dot(.) 을항상붙여주어야한다. 만일 clunix.org 라는도메인을 zone 파일에서표기할때는 clunix.org. 이라고표시를해야하는것이다. 만일 Dot(.) 표시가없을경우에는표식뒤에항상 @ 이붙는다고생각하면된다. zone 파일에서 @ 은 named.conf 에정의된 ORIGIN 이라고앞에설명한적이있다. 즉 zone 설정에서 clunix.org 라고하면이는 clunix.org.@ 을말하는것이고, 이는즉 clunix.org.clunix.org 라고읽어들이게되는것이다. IN A 192.168.133.254 위설정은실제 clunix.org 도메인의 IP Address 를지정하는것이다. ns IN A 192.168.133.254 위설정은 ns.clunix.org 가 192.168.133.254 의 IP 를가지고있다는의미이다. 즉 A 레코드는해당도메인, 호스트의 IP 를정의하는설정이다. arhfw IN CNAME ns CNAME 설정은도메인 Alias 설정으로 arhfw.clunix.org 는 ns.clunix.org 와같은 IP 를가지고있다는의미이다. - /var/named/<domain>.rev [root@arhdev root]# cat /var/named/clunix.rev ------------------------------------------------------------------------------- $TTL 86400 @ IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997022700 ; Serial 28800 ; Refresh 16/35 페이지
14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.clunix.org. IN MX 10 arhfw.clunix.org. 9 IN PTR arhdev.clunix.org. 1 IN PTR arh01.clunix.org. 2 IN PTR arh02.clunix.org. 3 IN PTR arh03.clunix.org. 4 IN PTR arh04.clunix.org. 5 IN PTR arh05.clunix.org. 6 IN PTR arh06.clunix.org. 7 IN PTR arh07.clunix.org. 8 IN PTR arh08.clunix.org. 254 IN PTR ns.clunix.org. 254 IN PTR arhfw.clunix.org. ------------------------------------------------------------------------------ 상위설정부분은 zone file 설정과동일하고실제레코드설정부분에서 PTR 설정에대해서만알아보도록하자. 254 IN PTR arhfw.clunix.org. 위설정은 /etc/named.conf 에서 inverse domain 설정부분에서inverse domain 은 reverse mapping 을위해설정을하며 reverse mapping 이란 IP 주소로도메인이름을찾는것을의미한다. 위의 PTR 레코드설정은 192.168.133.254 IP 는 arhfw.clunix.org 란도메인에해당한다는의미이다. - /etc/resolv.conf [root@arhfw named]# vi /etc/resolv.conf 17/35 페이지
----------------------------------------------------------------------------- search clunix.org nameserver 192.168.133.254 nameserver 192.168.133.9 ----------------------------------------------------------------------------- resolv.conf 는설정시스템에서의 DNS 쿼리를받아올 DNS 서버정보를지정하는설정이다. 즉이시스템이 DNS 서버이든아니든간에이설정이되어져있어야이서버에서도메인을인식할수있는상태가된다. 만일로컬시스템이 DNS 서버역할을하는경우에는 nameserver 를자기자신으로지정하면될것이다. 로컬시스템이 DNS 서버기능이없을경우는 ISP 의 DNS 사용하던가아니면, 자사의 DNS 서버를이곳에지정해두면된다. 설정형식을살펴보면, search 에는로컬 DNS 서버의 domain name 을적어준다. 그럼 clunix.org 의 sub domain 의경우쿼리를날릴때 sub domain의 host name 명으로도전체도메인을표기하는역할을하게된다. [root@arhfw root]# nslookup arhfw ----------------------------------------------------------------------------- Server: 192.168.133.254 Address: 192.168.133.254#53 arhfw.clunix.org canonical name = ns.clunix.org. Name: ns.clunix.org Address: 192.168.133.254 ----------------------------------------------------------------------------- nameserver 는실제 DNS 서버주소를적는곳이다. 첫번째 nameserver 가 1차네임서버가될것이다. 두번째 nameserver 설정이 2차네임서버가된다. - /etc/host.conf 18/35 페이지
[root@arhfw root]# vi /etc/host.conf ----------------------------------------------------------------------------- order hosts,bind multi on nospoof on alert on ----------------------------------------------------------------------------- /etc/host.conf 파일은실제 DNS 작동과는크게상관은없으나 DNS 방식의정책을정의하는역할을한다. order 는 domain query 를 hosts file 과 bind 중어느곳에먼저하는지를정의한다. multi 는 hosts file 에동일한도메인에다른 IP 가여러개생성되는것을의미한다. nospoof 는실제시스템에접속하는 IP 와 Domain 이일치하는지를점검하는설정이다. alert 는 spoofing 등으로 IP 를속여서들어오는신호가있을때로그에남기게하는설정이다. nospoof 와 alert 는보안과관련이있으니상황에따라적절히사용하길바랍니다. 실제성능과보안은반비례하는경우가많기때문이다. - config file security 이제기본적인 DNS 셋팅이완료되었다. 이정도의기본설정만있으면 DNS 서버로써의역할을할수있다. 설정이완료된후간단한설정파일자체에대한보안처리를해두는것이좋을것이다. [root@arhfw root]# chown named. /etc/named.conf [root@arhfw root]# chmod 644 /var/named/clunix. [root@arhfw root]# chmod 644 /var/named/clunix.* [root@arhfw root]# chown named. /var/named/clunix.* [root@arhfw root]# /etc/rc.d/init.d/named restart 2.1.4 Primary, Secondary DNS 서버구축하기 19/35 페이지
이곳에서는실무에서흔히사용되는 Primary, Secondary DNS 설정방법에대해알아보도록하자. 실무에서 Internic 과같은기관을통해 Domain 을신청하게되면신청도메인에대한 1차 nameserver 와 2차 nameserver 를지정하는곳있다. 이는실제 1차 nameserver 에이상이생겼을때이곳에등록된 2차 nameserver 에서해당도메인에대한 IP 정보를얻을수있게해주는것이다. 이때해당도메인에대한 DNS 서버를관리할때앞에서다룬 DNS 설정은 Primary DNS (1차 DNS) 에서만해준다. Secondary DNS 서버는 1차 DNS 서버의설정을일정주기에맞추어계속자동업데이트시키는방법으로관리하게된다. 이때사용되어지는 Primary DNS 서버와 Secondary DNS 서버의설정방법에대해알아보도록한다. 기본적인설정형태는앞에서다룬설정방식과동일하다. 여기서는기본설정과상이한부분에대해서만언급하겠다. - Primary DNS 서버설정 위기본설정에서 Primary DNS 서버가되기위한설정변경부분이다. [root@arhfw root]# vi /etc/named.conf ------------------------------------------------------------------------------ zone "133.168.192.in-addr.arpa" IN { type master; file "clunix.rev"; // allow-update { none; -> 이부분이아래와같이 // allow-update { 192.168.133.9; zone "clunix.org" IN { type master; file "clunix.zone"; // allow-update { none; -> 이부분이아래와같이 // allow-update { 192.168.133.9; 20/35 페이지
------------------------------------------------------------------------------ 기본설정과다른부분은 allow-update 부분에 2차 DNS 서버의주소를포함시켜주어야 2차 DNS 에서자동으로 1차 DNS 서버에설정된 Domain 의해당 Zone 파일을자동으로업데이트시킬수있다. - Secondary DNS 서버설정 Secondary DNS 서버역시기본설정형태는기본과동일하다. 단 /etc/named.conf 에해당도메인의 reverse mapping 설정과 zone 설정부분에서 type 을 slave 로주어야하고 masters 부분에 1차 DNS 서버주소를적어주어야한다. [root@arhdev named]# vi /etc/named.conf ------------------------------------------------------------------------------ zone "133.168.192.in-addr.arpa" IN { type slave; file "clunix.rev.bak"; masters { 192.168.133.254; zone "clunix.org" IN { type slave; file "clunix.zone.bak"; masters {192.168.133.254; ------------------------------------------------------------------------------ 그런후 named Daemon을재시작하면 /var/named 밑에자동으로 clunix.rev.bak file과 clunix.zone.bak file 이생성이될것이다. [root@arhdev named]# cat /var/named/clunix.zone.bak ------------------------------------------------------------------------------ $ORIGIN. $TTL 86400 ; 1 day 21/35 페이지
clunix.org IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997092700 ; serial 28800 ; refresh (8 hours) 900 ; retry (15 minutes) 360000 ; expire (4 days 4 hours) 3600 ; minimum (1 hour) ) NS ns.clunix.org. A 192.168.133.254 MX 10 arhfw.clunix.org. $ORIGIN clunix.org. arh01 A 192.168.133.1 arh02 A 192.168.133.2 arh03 A 192.168.133.3 arh04 A 192.168.133.4 arh05 A 192.168.133.5 arh06 A 192.168.133.6 arh07 A 192.168.133.7 arh08 A 192.168.133.8 arhdev A 192.168.133.9 arhfw CNAME ns ns A 192.168.133.254 ------------------------------------------------------------------------------ 이제 Primary 1차 DNS 서버에서해당도메인의 Zone file 에설정변동이있어나면 refresh 에정의된 8시간에맞추어 8시간이지나면자동으로변동사항이적용될것이다. 만일이주기를단축하고싶다면각 zone file 의 refresh 값을단축시켜주거나 Primary 서버의 serial 값을올려주고각 named Daemon을재시작하면바로적용된다. 이제내부인프라의각 PC 의 DNS 클라이언트설정을다음과같이한다. 1차 DNS 서버 : 192.168.133.254 2차 DNS 서버 : 192.168.133.9 22/35 페이지
만일리눅스클라이언트라면앞에서언급했듯이 /etc/resolv.conf 에아래와같이설정하면된다. [root@arh01 root]# cat /etc/resolv.conf ------------------------------------------------------------------------------ search clunix.org nameserver 192.168.133.254 nameserver 192.168.133.9 ------------------------------------------------------------------------------ 이제간단히 Nslookup 을이용하여 Domain 을 Query 해보도록하자 [root@arh01 root]# nslookup -sil clunix.org ------------------------------------------------------------------------------ Server: 192.168.133.254 Address: 192.168.133.254#53 Name: clunix.org Address: 192.168.133.254 ------------------------------------------------------------------------------ 이제 Primary 1 차 DNS ( 192.168.133.254 ) 의네임서비스를중지해보자 [root@arhfw root]# /etc/rc.d/init.d/named stop 다시 Nslookup 으로 Domain query 를해보자. [root@arh01 root]# nslookup -sil clunix.org ------------------------------------------------------------------------------ Server: 192.168.133.9 Address: 192.168.133.9#53 Name: clunix.org Address: 192.168.133.254 ------------------------------------------------------------------------------ 23/35 페이지
위와같이 1차 DNS 서버에이상이있으면바로 2차 DNS 서버에서해당도메인이정보를가져오게되어져있다. 이로써보다안정하고, 관리적으로효율적인 Name Service 를할수있을것이다. 2.1.5 MX 레코드를이용한메일서버관리하기 이단원에서는도메인네임설정에서메일서버설정에관련된 MX 레코드값에대해구체적으로알아보다. clunix.org 란도메인으로웹서비스를운영하여홈페이지등에이용할수도있지만해당도메인에 @ 가붙는메일서비스를이용할수도있을것이다. webmaster@clunix.org 와같은메일서비스를하기위해서 1차적으로설정이들어가는부분은당연 DNS 설정일것이다. 실제 DNS 서버와웹서버와메일서버를하나의시스템에서사용한다면위의기본 Zone 설정에정의된 MX 레코드설정만으로충분할것이다. 하지만복잡하고, 대형메일서비스형태의시스템을구축시에는위의기본설정으론아주제한적인서비스밖에할수없을것이다. DNS 서버의 MX 레코드를잘이용하면메일시스템을다른서비스시스템과분리를하거나여러대의 Mail Queing 서버를두어보다안정적인메일서비스등을할수있을것이다. 그리고 Spam Filter 시스템이나 SMTP 부하분산시스템등을간단히구성할수있다. 그럼 MX 레코드에대해보다상세히알아보도록하자. MX 레코드는특정도메인으로수신되는메일을다른호스트로라우팅시켜주는역할을한다. 아래의 zone 파일을대상으로설명을해보도록하겠다. --------------------------------------------------------------------------------- $TTL 86400 24/35 페이지
@ IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997092700 ; Serial 28800 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum IN NS ns.clunix.org. IN MX 10 arhfw IN A 192.168.133.254 ; ns IN A 192.168.133.254 ; arhfw IN CNAME ns arhdev IN A 192.168.133.9 arh01 IN A 192.168.133.1 --------------------------------------------------------------------------------- 일단위설정으로보면 @clunix.org 형태로오는메일은 arhfw.clunix.org 에해당하는 192.168.133.254 서버로메일을라우팅하게된다. 192.168.133.254 의 MTA 메일프로그램에서해당도메인에대한메일인증권한이있으면이서버의 MailBox 에메일이쌓이게될것이다. 이때이와같이 @clunix.org 형태로오는메일을 arhfw.clunix.org 로라우팅시켜주는역할을하는설정이바로 " IN MX 10 arhfw " 이다. 이 MX 레코드부분을이용하여 @clunix.org 에해당하는메일을 arhdev 에서처리하길원한다면위 MX 레코드부분을 arhfw 에서 arhdev 로변경을해주면될것이다. 위와같이처리하면실제 DNS 서버와 Mail 서버가분리되는것이다. 다음은조금복잡한 MX 레코드구조이다. --------------------------------------------------------------------------------- $TTL 86400 25/35 페이지
@ IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997092700 ; Serial 28800 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum IN NS ns.clunix.org. clunix.org. IN MX 10 arhdev IN MX 20 arh01 IN MX 20 arh02 IN A 192.168.133.254 ; ns IN A 192.168.133.254 ; arhfw IN CNAME ns arhdev IN A 192.168.133.9 arh01 IN A 192.168.133.1 arh02 IN A 192.168.133.2 ---------------------------------------------------------------------------------- 위경우는 @clunix.org 형태로오는메일은먼저로컬호스트가 clunix.org 에대한메일처리권한이있는지를확인한다. 그런후없을경우 arhdev 로배달을시도한다. 만일 arhdev 서버가정상적으로수신을하지못하는상태라고하면, arh01, arh02 중하나로배달을하게된다. 이것은 MX 레코드의값이낮은순위로메일배달의우선순위가정해지기때문에다. arh01, arh02 중메일을수신받은시스템은해당시스템의 mail queue time 동안해당메일을큐잉에넣어두고일정시간을주기적으로 arhdev 쪽으로메일을다시보내게된다. 위구성에서혼돈하기쉬운부분이 MX 값이 10 인 arhdev 가다운되었을경우메일이 arh01 혹은 arh02로가서처리된다고혼돈을하게되는데, arh01, arh02 는단순 Queue 26/35 페이지
의역할만을하는것이다. 물론 arh01, arh02에서 clunix.org 에대한메일수신권한이주어진경우라면정상적으로메일을수신하게될것이다. 하지만이경우는실제 3대시스템에대한계정동기화및메일박스동기화, 서비스 IP 단일화등의여러가지문제가있을것이다. 이런부분은실제대용량메일서버시스템을구축할때사용되는클러스터기술부분에서다루도록하겠다. DNS의 MX 레코드부분에서는실제메일서버의문제가발생했을경우누락되는메일이최소화될수있는구조를만들어주는것만으로충분히그역할을다하는것일거다. 2.1.6 DNS 서버를이용한부하분산시스템구축하기 특정서비스에대해한대의서버로처리하기힘든과다한서비스요청이올경우리눅스의 LVS(Linux Virtual Server) 나 L4 Switch 와같은고가하드웨어를이용하여부하를분산시켜주는방법으로문제를해결할수있을것이다. 하지만 DNS 에서도이와유사한효과를줄수있다. 부하분산의작업스케줄링방식중 Round Robin이란스케줄링방식이있는데 DNS 서버에서이스케줄링방식으로부하분산과동일한효과를줄수있는것이다. 단 DNS 의경우실제서비스노드의활성상태를체크하는기능이없기때문에가용성자체는보장하지못한다. 하지만추가비용없이간단히로드밸랜스효과를낼수있는장점과이후초대형서비스대상의시스템구축시 LVS 나 L4 Switch 등의기술과같이이용하여 LVS 와 L4의서비스확장의제한문제를해결하는데사용될수있다. 아래 zone file 을대상으로살펴보도록하자. ---------------------------------------------------------------------------------- $TTL 86400 @ IN SOA ns.clunix.org. root.ns.clunix.org. ( 1997092702 ; Serial 28800 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum IN NS ns.clunix.org. IN MX 10 arhfw 27/35 페이지
IN A 192.168.133.254 ; ns IN A 192.168.133.254 ; www 180 IN A 192.168.133.1 www 180 IN A 192.168.133.2 www 180 IN A 192.168.133.3 ------------------------------------------------------------------------------------ 위와같이하나의호스트명에여러개의 IP 주소를주었을경우네임서버는해당도메인에대해요청되는순서에따라 192.168.133.1, 192.168.133.2, 192.168.133.3 주소를차례로풀이해서응답하게된다. [root@arhfw named]# nslookup -sil www.clunix.org ----------------------------------------------------------------------------------- Server: 192.168.133.254 Address: 192.168.133.254#53 Name: www.clunix.org Address: 192.168.133.1 Name: www.clunix.org Address: 192.168.133.2 Name: www.clunix.org Address: 192.168.133.3 [root@arhfw named]# nslookup -sil www.clunix.org ----------------------------------------------------------------------------------- Server: 192.168.133.254 Address: 192.168.133.254#53 Name: www.clunix.org Address: 192.168.133.3 Name: www.clunix.org Address: 192.168.133.1 Name: www.clunix.org 28/35 페이지
Address: 192.168.133.2 [root@arhfw named]# nslookup -sil www.clunix.org ---------------------------------------------------------------------------------- Server: 192.168.133.254 Address: 192.168.133.254#53 Name: www.clunix.org Address: 192.168.133.2 Name: www.clunix.org Address: 192.168.133.3 Name: www.clunix.org Address: 192.168.133.1 이와같이 DNS 라운드로빈방식으로처리할때는실제클라이언트 DNS 의캐싱에초기질의시얻은 IP 주소가남아있어두번째부터는계속초기 IP 로넘어가게되어있다. 그렇기때문에이런부분의캐싱문제를최소화하기위해각호스트뒤에 TTL 값을짧게정의해두는것이좋다. 위설정에서는 6분으로하여 6분뒤에는해당도메인의캐싱을비우고다시해당도메인의 DNS 서버에서정보를얻게되는것이다. 2.1.7 대형인프라환경의 DNS 서버구축 실제대기업이나학교네트워크인프라와같이대형인프라환경에서효율적인 DNS 서버의구축설계에대해알아보도록하자. 아래는실제대형인프라에서흔히사용되는 DNS 구조이다. [ 대형네트워크인프라대상 DNS 구성도 - 그림 2] 실제대형네트워크인프라에서는외부로서비스할 DNS 에대한 Primary 1차 DNS 와 Secondary 2차 DNS 가존재해야하며, 내부의여러 Subnet 의각클라이언트들이외부의다른도메인들을확인할캐싱 DNS 서버가필요하게된다. 29/35 페이지
뿐만아니라내부에서만사용되어지는도메인이있을경우해당도메인을처리해줄 DNS 서버역시필요할것이다. 하나의가상의인프라를대상으로실제실무적인기반의 DNS 시스템환경을구축해보도록하자. - 인프라의 Domain 요구환경 어느도시에큰대학교과하나설립되었다고가정하자. 이대학교의정보화서비스를위해전체적인인프라를효율적이고, 안정적으로관리할수있는네임서비스가필요하다. 이대학교에서필요한네임서비스는다음과같다. 외부용서비스도메인 : domain.ac.kr 외부대상서비스 : 대학교웹서비스, 전교생대상의메일서비스, 각학부별웹서비스내부대상서비스 : 각학부내부의전산환경에서만허용이되어지는서비스 2.1.8 DNS 관련 Tool ( Nslookup ) 네임서버를운영하고관리하는데있어내부적으로발생하는문제에대해해결을하기위해서는실제해당도메인에대한정보를관리자입장에서의확인을할수있는도구가필요하다. 흔히사용하는도구로 Nslookup 과 dig 가있다. - nslookup nslookup 은실제 UNIX, LINUX, Windows 등에서대표적으로사용되어지는 Name resolver tool 로서대상도메인 DNS 서버에대한다양한정보를확인점검할수있는도구이다. 위의 DNS 설정단계에서도설정확인을위해 nslookup 명령을많이사용하였다. 여기서는보다구체적인사용방법에대해알아보도록하자. nslookup은기본적으로입력된도메인의 A 레코드를검색하고, IP 주소에대해서는 PTR 레코드를검색하게된다. set type= 설정으로 A 레코드이외의다양한레코드또한검색할수있고, 30/35 페이지
set type= 에 A, ANY, HINFO, MX, NS, PTR, SOA, TXT 등의정보를넣어해당정보를검색할수있다. 아래의예제를통해다양한 Nslookup 의기능에대해살펴보도록하자. [root@arhdev root]# nslookup > server domain.com -------------------------------------------------------------------------------------- Default server: domain.com Address: xxx.xxx.xxx.xxx#53 ------------------------------------------------------------------------------------- nslookup command 를실행하면 nslookup interactive mode 상태로들어간다. > snu.ac.kr ------------------------------------------------------------------------------------- Default server: domain.com Address: xxx.xxx.xxx.xxx#53 Name: snu.ac.kr Address: 147.46.10.48 ------------------------------------------------------------------------------------- query 대상의도메인을입력하면해당도메인의 A 레코드에해당하는 IP 값이출력된다. > set type=mx > snu.ac.kr ------------------------------------------------------------------------------------ Default server: domain.com Address: xxx.xxx.xxx.xxx#53 snu.ac.kr mail exchanger = 0 smtp.snu.ac.kr. 31/35 페이지
smtp.snu.ac.kr internet address = 147.46.100.22 ------------------------------------------------------------------------------------ query type 을 MX ( Mail Exchage ) 로변경하여대상도메인의메일서버정보를확인한다. > set type=ns > snu.ac.kr ----------------------------------------------------------------------------------- Default server: domain.com Address: xxx.xxx.xxx.xxx#53 snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. snu.ac.kr nameserver = ercc.snu.ac.kr. ----------------------------------------------------------------------------------- query type 을 NS 로변경하여대상도메인의 name server 정보를파악한다. 위도메인의경우는 1차, 2차, 3차네임서버를상위도메인기관에등록해둔상태이다. > set type=any > snu.ac.kr ----------------------------------------------------------------------------------- Default server: domain.com Address: xxx.xxx.xxx.xxx#53 snu.ac.kr mail exchanger = 0 smtp.snu.ac.kr. Name: snu.ac.kr Address: 147.46.10.48 snu.ac.kr nameserver = ercc.snu.ac.kr. snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. Authoritative answers can be found from: snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. 32/35 페이지
snu.ac.kr nameserver = ercc.snu.ac.kr. smtp.snu.ac.kr internet address = 147.46.100.22 ------------------------------------------------------------------------------------ query type 를 any 하여해당도메인이모든정보를한번에확인할수도있다. 위와달리 non-interactive 방식으로 nslookup 을사용할수도있다. [root@arhdev root]# nslookup -type=mx snu.ac.kr ------------------------------------------------------------------------------------ Server: 192.168.133.9 Address: 192.168.133.9#53 Non-authoritative answer: snu.ac.kr mail exchanger = 0 smtp.snu.ac.kr. Authoritative answers can be found from: snu.ac.kr nameserver = ercc.snu.ac.kr. snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. smtp.snu.ac.kr internet address = 147.46.100.22 ercc.snu.ac.kr internet address = 147.46.80.1 [root@arhdev root]# nslookup -type=ns snu.ac.kr ------------------------------------------------------------------------------------ Server: 192.168.133.9 Address: 192.168.133.9#53 Non-authoritative answer: snu.ac.kr nameserver = ercc.snu.ac.kr. snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. Authoritative answers can be found from: 33/35 페이지
ercc.snu.ac.kr internet address = 147.46.80.1 [root@arhdev root]# nslookup -type=any snu.ac.kr ----------------------------------------------------------------------------------- Server: 192.168.133.9 Address: 192.168.133.9#53 Non-authoritative answer: snu.ac.kr mail exchanger = 0 smtp.snu.ac.kr. Name: snu.ac.kr Address: 147.46.10.48 snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. snu.ac.kr nameserver = ercc.snu.ac.kr. Authoritative answers can be found from: snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. snu.ac.kr nameserver = ercc.snu.ac.kr. smtp.snu.ac.kr internet address = 147.46.100.22 ercc.snu.ac.kr internet address = 147.46.80.1 [root@arhdev root]# nslookup -type=any snu.ac.kr ns.korea.com ---------------------------------------------------------------------------------- Server: ns.korea.com Address: 211.109.2.36#53 Name: snu.ac.kr Address: 147.46.10.48 snu.ac.kr mail exchanger = 0 smtp.snu.ac.kr. snu.ac.kr nameserver = ercc.snu.ac.kr. snu.ac.kr nameserver = erccw1.snu.ac.kr. snu.ac.kr nameserver = hektor.snu.ac.kr. snu.ac.kr 34/35 페이지
origin = ercc.snu.ac.kr mail addr = habae.snu.ac.kr serial = 2005042201 refresh = 3600 retry = 1800 expire = 604800 minimum = 86400 위와같이실제 nslookup을이용하면도메인에대한상세한정보를확인하여쉽게네임서비스구성을파악할수있다. 관리자의경우네임서비스의정보를확인하기위해당연히 nslookup 과같은툴을사용하겠지만, 위정보보다더세밀한정보역시 DNS 설정에서보안적인부분을확실히해놓지않을경우아무나정보확인이가능하다. 그렇기에앞의설정에서보안에관련된설정부분을상황에맞게처리해야할것이다. 35/35 페이지