보안

리눅스 DNS

202401to07 2024. 5. 23. 21:00

✅리눅스 DNS✅

 

해당 수업 필기 : https://202401to07.tistory.com/97

 

IP >>>WEB>>> O
도메인 >>>WEB>>> X
도메인 >>>DNS>>>WEB O
--------------------------NET ID------------------------------------------
**요즘에는 글로벌로 com,net... 등등 국가도메인 없이 쓰임**
#rootdmain .   (루트도메인 Root Domain  정보: http://root-servers.org)
1.최상위 도메인
2.모든  도메인 시작
3.도메인임을 증명
4.보통 web에서는 생략되나 DNS에서는 필수 기재


#top-level kr 국가  (jp:일본 , au:호주 , cn:중국 , US:미국....)


#second-level co com 회사 ( 영리목적기관 )


org 조직 ( 비영리목적기관 )
mil 군사 ( 군사기관)
gov 정부 ( 정부기관)
net 통신 ( 통신기관)
edu 교육 ( 교육기관)
mgr 관리 ( 관리기관)


#third-level sevas 회사명 ( ISP, 도메인업체에게 등록된 도메인)


--------------------------HOST ID--(마음대로 바꿔도 되는 부분)----------------------------------------
#subdomain www www 웹서버 사용자가 임의로 
mail 메일서버 바꿀수있는 도메인
ftp 파일서버
db DB서버
==================================================================================
도메인해석순서
로컬도메인 =>  1차도메인 =>  2차도메인
 /etc/hosts          1DNS서버           2DNS서버

/etc/hosts     --> 스푸핑으로 응용


================================================================================

미니 192.168.10.10 vm8 / bind설치 

록키 192.168.10.20 vm8

 

bind : LINUX/UNIX용 DNS전용 패키지 / 데몬 named /   (DNS = bind )

ZONE : 정매칭 A :도메인을 IP에 매칭 www A 192.168.10.10
REV_ZONE:  역매칭 PTR :IP를 도메인에 매칭 10 PTR http://www.sevas.com.

named.conf  : 전역설정 (전체 적용)

named.rfc1912.zones : 지역설정 (각자 적용)


[ DNS 서버 설정 ]


yum install bind* -y     
vi /etc/named.conf   ( named 서버 전역환경)
options {
#       listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; }; <<<< 외부에서 서버 연결 허용
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
#       allow-query     { localhost; };
        allow-query     { any; };    <<<<<<<< 외부에서 nslookup사용가능

        recursion yes;      <<<<<<<<<<<<<< 전달자 가능 

#       dnssec-enable yes;
#       dnssec-validation yes;
        dnssec-enable no; <<<<<<<<<<<<<< dnssec 암호화 여부
        dnssec-validation no;   <<<<<<<<<<<<<< dnssec 암호화 키값 

zone "." IN {

type hint; <<<< type이 hint면 주로 root도메인
        file "named.ca";           <<<<  rootdomain 정보 저장파일
};

vi /etc/named.rfc1912.zones 
     43 zone "sevas10.com" IN {      <<<<<<<< 정방향
     44         type master;
     45         file "sevas10.zone";
     46         allow-update { none; };
     47 };
     48
     49 zone "10.168.192.in-addr.arpa" IN {    <<<<<< 역방향
     50         type master;
     51         file "sevas10.rev";
     52         allow-update { none; };
     53 };


cp named.empty sevas10.zone         : zone 파일 생성
vi sevas.zone
*도메인 마지막에 . 붙이기 
 cp sevas.zone sevas.rev      :  역방향 설정
 vi sevas.rev

$TTL 3H      <<<캐쉬시간
@       IN SOA  ns.sevas10.com.           root.sevas10.com. (
                                        0       ; serial    # [업데이트 날짜]
                                        1D      ; refresh  #[ 재갱신 기간]
                                        1H      ; retry     #[ 재시도 기간]
                                        1W      ; expire   #[ 만료 기간]
                                        3H )    ; minimum   #[ 캐쉬 시간]

chown .named sevas10.*     :    실행전 권한 바꾸기
chmod 660 sevas10.*     : 실행전 권한 바꾸기     / (세컨에서 업데이트 할경우)

named-checkconf  /etc/named.conf       :   파일검사  (설정파일확인)
named-checkzone  sevas10.com  sevas.zone     :  존파일검사  ( named-checkzone [도메인] [설정파일]

named-checkconf /etc/named.conf
named-checkzone sevas10.com /var/named <<<----zone 파일검사(dir)
named-checkzone sevas10.com sevas10.zone <<<----zone 파일검사
named-checkzone 192.168.10 sevas10.rev <<<----rev 파일검사


vi /etc/sysconfig/network-scripts/ifcfg-ens33

DEVICE=ens33
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
ONBOOT=yes
DNS1=192.168.10.10    : 최종 랜카드 설정

service network restart
service named restart
cat /etc/resolv.conf    <<<<<<<<<<<<<<*** DNS 참조 확인 ****
nslookup http://www.sevas.com 확인

====================================================================

로컬 컴퓨터와 DNS 연동

1. ncpa.cpl 에서 이더넷  및 vmnet 8    DNS 변경  
        2. cmd 에서 nslookup 확인
        3. ping [도메인] 을 확인해서 IP가 제대로 가는지 확인
          [안될경우  ipconfig /flushdns 를 쳐서 기다리거나
            1번 내용을 다시 진행함 ]
        
mini (vmnet1 )  10.10.10.10
http://www.sevas10.com10.10.10.10
ftp.sevas10.com 30.30.30.30
db.sevas10.com 20.20.20.20

client (vmnet2) 20.20.20.20

ftp.korea10.com 10.10.10.10
=======================================================================
DNS SLVAE 설정

1. bind 설치  ( yum install bind* -y )
2. 전역 설정

vi /etc/named.conf
options {
#       listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; }; <<<< 외부에서 DNS서버 연결 허용
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
#       allow-query     { localhost; };
        allow-query     { any; };  <<<<<<<< 외부에서 nslookup사용가능
        allow-transfer { 20.20.20.20; }; <<<<<<<<  마스터에 넣어 

        also-notify { 20.20.20.20; } ;   <<<<<<<<  마스터에 넣어 

         recursion yes;
#       dnssec-enable yes;
#       dnssec-validation yes;
        dnssec-validation no;   <<<<<<<<<<<<<< dnssec 암호화 키값 

        dnssec-enable no;  <<<<<<<<<<<<<< dnssec 암호화 여부

3. 지역 설정   (마스터)

vi /etc/named.rfc1912.zones
zone "korea10.com" IN {
        type master;
        file "korea10.zone";

        allow-update { none; };
        allow-transfer { 20.20.20.20; }; <<<<<<<<<<<<<<  전역/ 지역
        also-notify { 20.20.20.20; }; <<<<<<<<<<<<<< 전역/ 지역
}; 


4. 방화벽설정

firewall-cmd --permanent --add-port 53/udp
firewall-cmd --permanent --add-port 53/tcp
firewall-cmd --reload

firewall-cmd --list-all         (확인)

 

서버(송)는 tcp , udp 둘다 

클라이언트(수신)는 udp만 넣어야돼 

 

5. 데몬 실행 

service named restart


6. DNS 주소 이제 변경 

vi /etc/sysconfig/network-scripts/ifcfg-ens3

vi /etc/resolv.conf

service named restart

 

7. 지역설정 (슬레이브 slave)

vi /etc/named.rfc1912.zones

zone "sevas10.com" IN {
        type slave;
        file "slaves/sevas10.zone";
        masters { 20.20.20.20; };
};

 

8. 확인 

nslookup http://www.sevas10.com 
nslookup http://www.korea10.com 
/var/named/slaves 에 보면 zone파일이 전송된것을 알수 있음


========================================================
정리포인트
0. DNS    

primary server  => 주영역 실제 DNS서버 내용 설정
secondry server => primary서버의 복사본
forward server  =>  다른 DNS에게 전달하기 위한서버 (설정X)

1. dns server type   : 
     hint  : root_domain
     master : primary dns  (주영역)
     slave    : secondry dns (보조영역)

2. /etc/name.conf 와   /etc/named.rfc1912.zones의 차이점
named.conf   <<<<모든 도메인 및 DNS에 적용  
named.rfc1912   <<<<지정한 도메인에 대해서만 적용 

IXFR 방식       zone 파일비교 후 업데이트
AXFR(기본값)     zone 파일전송

 

 

 


전달자  : 내가모르는 주소 다른서버에게 요청
조건부전달자: 특정한 주소에 대해서만 다른서버에게 요청

forward only : 무조건 전달                     ---> 이거 많이 사용
forward  first : 제일먼저 전달한뒤 없음 본인내용

forwarders { nameserverIP; nameserverIP;... };

장점 : 내가 없는 도메인을 넘길수있다 


*** 사설 IP로는 확인 어려움 공인IP로 확인해야됨 ***
### 전달자는  recursion yes; 가 활성화 되어있어야됨 ###

recusion yes; = 포워딩
==========================================================

20.20.20.20  DNS

http://www.sevas20.com20.20.20.20 

 

vi /etc/named.conf
 forward only;
 forwarders { 20.20.20.20; };

 recursion yes;

 

========================================================================================
*** DNS 수업포인트 ***

zone 영역  정방향 nslookup  http://www.sevas10.com A   => 도메인이 기준  
rev  영역  역방향 nslookup  192.168.10.10    PTR  => IP가 기준   (보통 사용X)

DNSserver type
hint  :  root 도메인 서버
master : primary   ( 주서버    ) slave시 allow-transfer 
slave  : secondry  ( 보조(복사본)서버 ) masters { master IP; };
cache  : forword (전달자)

TIP 빠른 업데이트를 원할경우 
also-notify { slave IP; }; 를 주면 바로 변경됨

 forward only; : 내주소에 없으면  다른 DNS로 가 
forward first;  : 다른 DNS주소 먼저 가고 없으면 내 주소 와 

IXFR  : 송신
AXFR : 수신
=============================================================
DNS  증폭공격이란? (DNS Reflector Attack)
DNS 쿼리를 요청할때 희생자의 IP로 스푸핑을 하여서 여러 DNS서버에 요청 
요청을 받은 서버들은 희생자에게 쿼리내용을 보내게됨
희생자의 컴퓨터 DOS공격이 걸림

*보안방법*
1.recusion no; 로 하여 재귀적인 질문 차단   =
2.query type 을 지정하여 지정한 내용만 포워딩할수있게끔 쿼리문받음
3.allow-query를 허용된 네트워크만 설정하여 질의필터링