리눅스/CentOS7

CentOS7 - Name Server 구축하기(bind) (4/10)

일편나루 2019. 5. 25. 12:13
반응형

목차 (INDEX)

     

    개요

    이번에는 Bind 9를 이용해서 네임서버를 구축할 예정입니다.

    CentOS7 - 무료도메인 취득/설정하기 (freenom) (3/10) 에서 취득해 두었던 naruhoto.cf 적용하면서 설정해 나갈 겁니다. 또한 보안상 NAT(Network Address Translation)를 적용하여, 내부용 IP 어드레스와 외부용 IP 어드레스가 다르게 구성된 네트워크일 경우를 고려하여 아래와 같이 내부 용와 외부용 설정을 나눠서 구축할 예정입니다.

    • 내부용 DNS 서버 구축
    • 외부용 DNS 서버 구축

    ※ 참고로 NAT를 사용하지 않는 경우에는 외부용 DNS 설정만 하시면 됩니다.
    ※ 이번 내용은 이 사이트의 내용을 참고해서 구축했습니다. >> https://centossrv.com/bind.shtm

    사전 준비 & 확인 사항

    1. 고정 IP주소를 사용하는 환경이어야 합니다.
    2. 설정할 도메인을 미리 취득해 두어야 합니다. 
    3. 외부용 DNS 설정을 위해서는 사설 IP가 아닌 공인 IP를 최소 1개 이상 보유해야 합니다.

    ■편의를 위해서 아래와 같은 전제를 두고 진행하겠습니다.

    내부 네트워크: 192.168.1.0/24
    외부 네트워크: 123.123.123.0/24
    서버 IP주소 : 192.168.1.10 (내부)   /   123.123.123.10 (외부)

    CentOS7 서버에 SSH로 접속

    네임서버 구성을 위하여 해당 서버에 접속합니다.

    try🐶everything ~$ ssh naru@centos7 -p1999
    naru@centos7's password:
    Last login: Thu May 9 18:27:17 2019 from 10.x.1.x
    [naru@centos7 ~]$

    BIND를 설치합니다.

    [root@centos7 ~]# yum -y install bind bind-chroot bind-utils     ← bind-utils는 dig, dnslookup명령을 실행하기 위해 필요합니다

     

    ■설치된 bind패키지를 확인합니다

    [naru@centos7 ~]$ yum list installed | grep bind
    bind.x86_64 32:9.9.4-73.el7_6 @updates
    bind-chroot.x86_64 32:9.9.4-73.el7_6 @updates
    bind-libs.x86_64 32:9.9.4-73.el7_6 @updates
    bind-libs-lite.x86_64 32:9.9.4-73.el7_6 @updates
    bind-license.noarch 32:9.9.4-73.el7_6 @updates
    bind-utils.x86_64 32:9.9.4-73.el7_6 @updates
    rpcbind.x86_64 0.2.0-47.el7 @base
    [naru@centos7 ~]$

    BIND를 설정합니다

    [naru@centos7 ~]$ sudo su -
    [sudo] naru のパスワード:
    最終ログイン: 2019/05/09 (木) 18:38:24 JST日時 pts/0
    [root@centos7 ~]#

     

    설정 파일을 편집합니다

    [root@centos7 ~]# vi /etc/named.conf

     

    options {

            #listen-on port 53 { 127.0.0.1; };         ← 문장 맨 앞의 #을 제거하면 기본적으로 내부 DNS만 작동합니다. (그대로 둡니다)

            #listen-on-v6 port 53 { ::1; };

            version "unknown";                 ← bind의 버전 정보 비표시

            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";

            recursion yes;                  ← 재귀 쿼리 기능을 유효화 (내부 DNS 서버로 동작하게 합니다)

            dnssec-enable yes;

            dnssec-validation yes;

    중략

            allow-transfer { none; };            ←   추가 (zone정보의 전송금지)

            allow-query{        ← 추가 (DNS 쿼리를 허가할 호스트 또는 네트워크 지정)

                    localhost;

                    123.123.123.0/24

                    192.168.1.0/24;

            };

            forwarders {           ← 추가 (본 DNS 서버 관리 이외의 쿼리 할 서버를 지정)

                     8.8.8.8; 8.8.4.4;               ← Google의 공개 DNS 서버를 지정
                     80.80.80.80; 80.80.81.81;     ← 또는, freenom의 공개 DNS 서버를 지정

            };

    중략

     

    };

    logging {

            channel default_debug {

                    file "data/named.run";

                    severity dynamic;

            };

    category lame-servers { null; };     ← 추가 (error (connection refused) resolving이라는 에러 출력을 억제합니다)

    };

     

    추가 (여기서부터)

    // 내부 DNS 설정 시작

    view "internal" {

            match-clients { localnets; };

            match-destinations { localnets; };

    추가 (여기까지)

     

    zone "." IN {

            type hint;

            file "named.ca";

    };

     

    include "/etc/named.rfc1912.zones";

    include "/etc/named.root.key";

     

    추가 (여기서부터)

    include "/etc/named/named.naruhodo.cf.zone"; ← 이 파일은 아직 존재하지 않습니다. 설정을 마친 후 작성할 겁니다.

    };

    // 내부 DNS 설정 종료

     

    추가 (여기까지)

    파일 맨 마지막 행에 추가 (여기서부터) ※고정 IP주소 환경에서만 유효합니다

    // 외부 DNS 설정 시작

    view "external" {

            match-clients { any; };

            match-destinations { any; };

            recursion no;

            include "/etc/named/named.naruhodo.cf.zone.wan";   ← 이 파일은 아직 존재하지 않습니다. 설정을 마친 후 작성할 겁니다.

    };

    // 외부 DNS 설정 종료

    파일 맨 마지막행에 추가(여기까지)

     

    내부 DNS용 zone파일을 작성합니다

    [root@centos7 ~]# cat /etc/named/named.naruhodo.cf.zone

    zone "naruhodo.cf" {
            type master;
            file "naruhodo.cf.db";        ←     내부용 정방향 Zone 데이터베이스 (도메인 이름 ⇒ IP 주소), 조금 후에 작성합니다
    };

     

    // 이 설정은 동일 네트워크에서 한 번만 설정할 수 있습니다.

    // 따라서, naruhodo.cf 이외에 추가로 도메인을 취득 후 역방향 쿼리를 적용하고자 할 때는, 1.168.192.in-addr.arpa.db 파일의 PTR 레코드에 추가하세요

    zone "1.168.192.in-addr.arpa" {
            type master;
            file "1.168.192.in-addr.arpa.db";     ←     내부용 역방향 Zone 데이터베이스 (IP 주소  도메인 이름 ), 조금 후에 작성합니다

    };

    외부 DNS용 zone파일을 작성합니다

    [root@centos7 ~]# cat /etc/named/named.naruhodo.cf.zone.wan 

    zone "naruhodo.cf" {

            type master;

            file "naruhodo.cf.db.wan";     ←     외부용 정방향 영역 데이터베이스 (도메인 이름 ⇒ IP 주소), 조금 후에 작성합니다

            allow-query { any; };

            allow-transfer {

                    123.123.123.123 ;        ←     세컨더리 DNS를 지정합니다. (선택)

            };

            notify yes;      ← 이 zone정보가 변경되면 즉시 위의 세컨더리 DNS에도 반영시킵니다

    };

     

    ■IPv4 만 유효하도록 설정합니다.

    ※ 설정하면 error (network unreachable) resolving이라는 에러 출력을 억제합니다.

    [root@centos7 ~]# echo OPTIONS="-4" >> /etc/sysconfig/named

    ■확인해봅니다

    [root@centos7 ~]# cat  /etc/sysconfig/named
    
    # BIND named process options
    
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    #
    
    # OPTIONS="whatever"     --  These additional options will be passed to named
    
    #                            at startup. Don't add -t here, enable proper
    
    #                            -chroot.service unit file.
    
    #
    
    # DISABLE_ZONE_CHECKING  --  By default, service file calls named-checkzone
    
    #                            utility for every zone to ensure all zones are
    
    #                            valid before named starts. If you set this option
    
    #                            to 'yes' then service file doesn't perform those
    
    #                            checks.
    
    OPTIONS=-4          << 여기!
    
    [root@centos7 ~]# 

    ■ localhost에서 dnlookup을 하는 경우, 내부 DNS 응답을 위한 설정 

    [root@centos7 ~]# cat /etc/resolv.conf
    nameserver 127.0.0.1      ←    추가 (내부 DNS 쿼리 응답을 위해서 자기 자신으로 설정)
    nameserver 8.8.8.8          ←    추가 (위의 localhost가 응답하지 않을 때, 실행됨)
    [root@centos7 ~]# 

    Root Zone 파일 관리

    Root Zone 파일, 최신 버전 적용하기

    Root Zone은 전 세계에 13대만 존재하는 탑 레벨 도메인 서버의 IP주소를 관리하는 파일입니다. 갱신되는 일은 거의 없으나, 확인 차원에서 최신 내용을 반영하고 자동화합니다.

    [root@centos7 ~]# dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca

    ■ 확인해봅니다
    [root@centos7 ~]# cat /var/named/chroot/var/named/named.ca 
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> . ns @198.41.0.4 +bufsize=1024 
    ;; global options: +cmd 
    ;; Got answer: 
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6161 
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27 
    ;; WARNING: recursion requested but not available 
    
    ;; OPT PSEUDOSECTION: 
    ; EDNS: version: 0, flags:; udp: 4096 
    ;; QUESTION SECTION: 
    ;.                IN    NS 
    
    ;; ANSWER SECTION: 
    .            518400    IN    NS    e.root-servers.net. 
    .            518400    IN    NS    h.root-servers.net. 
    .            518400    IN    NS    l.root-servers.net. 
    .            518400    IN    NS    i.root-servers.net. 
    .            518400    IN    NS    a.root-servers.net. 
    .            518400    IN    NS    d.root-servers.net. 
    .            518400    IN    NS    c.root-servers.net. 
    .            518400    IN    NS    b.root-servers.net. 
    .            518400    IN    NS    j.root-servers.net. 
    .            518400    IN    NS    k.root-servers.net. 
    .            518400    IN    NS    g.root-servers.net. 
    .            518400    IN    NS    m.root-servers.net. 
    .            518400    IN    NS    f.root-servers.net. 
    
    ;; ADDITIONAL SECTION: 
    e.root-servers.net.    518400    IN    A    192.203.230.10 
    e.root-servers.net.    518400    IN    AAAA    2001:500:a8::e 
    h.root-servers.net.    518400    IN    A    198.97.190.53 
    h.root-servers.net.    518400    IN    AAAA    2001:500:1::53 
    l.root-servers.net.    518400    IN    A    199.7.83.42 
    l.root-servers.net.    518400    IN    AAAA    2001:500:9f::42 
    i.root-servers.net.    518400    IN    A    192.36.148.17 
    i.root-servers.net.    518400    IN    AAAA    2001:7fe::53 
    a.root-servers.net.    518400    IN    A    198.41.0.4 
    a.root-servers.net.    518400    IN    AAAA    2001:503:ba3e::2:30 
    d.root-servers.net.    518400    IN    A    199.7.91.13 
    d.root-servers.net.    518400    IN    AAAA    2001:500:2d::d 
    c.root-servers.net.    518400    IN    A    192.33.4.12 
    c.root-servers.net.    518400    IN    AAAA    2001:500:2::c 
    b.root-servers.net.    518400    IN    A    199.9.14.201 
    b.root-servers.net.    518400    IN    AAAA    2001:500:200::b 
    j.root-servers.net.    518400    IN    A    192.58.128.30 
    j.root-servers.net.    518400    IN    AAAA    2001:503:c27::2:30 
    k.root-servers.net.    518400    IN    A    193.0.14.129 
    k.root-servers.net.    518400    IN    AAAA    2001:7fd::1 
    g.root-servers.net.    518400    IN    A    192.112.36.4 
    g.root-servers.net.    518400    IN    AAAA    2001:500:12::d0d 
    m.root-servers.net.    518400    IN    A    202.12.27.33 
    m.root-servers.net.    518400    IN    AAAA    2001:dc3::35 
    f.root-servers.net.    518400    IN    A    192.5.5.241 
    f.root-servers.net.    518400    IN    AAAA    2001:500:2f::f 
    
    ;; Query time: 26 msec 
    ;; SERVER: 198.41.0.4#53(198.41.0.4) 
    ;; WHEN: Sun May 12 14:17:06 JST 2019 
    ;; MSG SIZE  rcvd: 811

     

    Root Zone 파일을 자동 갱신하도록 설정합니다.

    1개월에 한 번, 최신 여부를 체크하여, 갱신되었으면 Root Zone을 최신화 및 BIND데몬 재기동을 자동적으로 수행하도록 합니다.

    ※Root Zone이 갱신되었을 경우, 新旧Root Zone정보 및 新旧Root Zone의 차분정보를 Root유저에게 메일로 발송합니다.

    [root@centos7 ~]# vi named.root_update     ←   Root Zone 최신화 스크립트 작성

    #!/bin/bash
    
    new=`mktemp`
    errors=`mktemp`
    
    dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors
    
    if [ $? -eq 0 ]; then
        sort_new=`mktemp`
        sort_old=`mktemp`
        diff_out=`mktemp`
        sort $new > $sort_new
        sort /var/named/chroot/var/named/named.ca > $sort_old
        diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
        if [ $? -ne 0 ]; then
            (
             echo '-------------------- old named.root --------------------'
             cat /var/named/chroot/var/named/named.ca
             echo
             echo '-------------------- new named.root --------------------'
             cat $new
             echo '---------------------- difference ----------------------'
             cat $diff_out
            ) | mail -s 'named.root updated' root
            cp -f $new /var/named/chroot/var/named/named.ca
            chown named. /var/named/chroot/var/named/named.ca
            chmod 644 /var/named/chroot/var/named/named.ca
            which systemctl > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                systemctl restart named-chroot > /dev/null
            else
                /etc/rc.d/init.d/named restart > /dev/null
            fi
        fi
        rm -f $sort_new $sort_old $diff_out
    else
        cat $errors | mail -s 'named.root update check error' root
    fi
    rm -f $new $errors
    

    [root@centos7 ~]# chmod 700 named.root_update    ← Root Zone 최신화 스크립트에 실행 권한 부여

    [root@centos7 ~]# mv named.root_update /etc/cron.monthly/ ← Root Zone 최신화 스크립트를 매월 자동 실행되는 디렉터리로 이동

     

    내부용 정방향  Zone 데이터베이스 (도메인 이름  ⇒ IP 주소) 작성

    [root@centos7 ~]# vi /var/named/naruhodo.cf.db    ←  정방향 Zone 데이터베이스 작성

     

    $TTL    86400

    @        IN    SOA    naruhodo.cf.    root.naruhodo.cf.(

                                                        2019051215 ; Serial        ←  Serial값은 반드시 변경 전 수치보다 커야 변경사항이 반영됩니다

                                                        28800      ; Refresh       ←  변경내용을 즉시 반영하려면 Refresh 값을 0(zero) 설정 후 데몬 재기동

                                                        14400      ; Retry

                                                        3600000    ; Expire

                                                        86400 )    ; Minimum

    @          IN    A              192.168.1.10     ←  naruhodo.cf의 IP주소

    *            IN    A              192.168.1.10

    [root@centos7 ~]#

     

    내부용 역방향 Zone 데이터베이스(IP주소 ⇒ 도메인명) 작성

    [root@centos7 ~]# vi /var/named/1.168.192.in-addr.arpa.db     ← 역방향 Zone 데이터베이스 작성

    ※여러 개의 도메인을 추가할 경우 PTR 레코드만 추가해주면 됩니다.

    $TTL    86400

    @        IN    SOA    naruhodo.cf.  root.naruhodo.cf.(

                                                      2019051215 ; Serial     ←  Serial값은 반드시 변경 전 수치보다 커야 변경사항이 반영됩니다

                                                      0      ; Refresh       ←  변경내용을 즉시 반영하려면 Refresh 값을 0(zero) 설정 후 데몬 재기동

                                                      14400      ; Retry

                                                      3600000    ; Expire

                                                      86400 )    ; Minimum

                IN    NS             ns1.naruhodo.cf.      ←   freenom에서 설정했던 네임서버와 동일한 이름(ns1)으로 입력

                IN    MX    10    naruhodo.cf.

                IN    NS             naruhodo.cf.

    10        IN    PTR           naruhodo.cf.      ← 서버의 내부 IP의 마지막 부분(192.168.1.10)과 도메인명을 지정

    [root@centos7 ~]#

     

    외부용 정방향 Zone 데이터베이스 (도메인명 ⇒ IP주소) 작성    ※고정 IP주소 환경에서만 유효

    [root@centos7 ~]# vi /var/named/naruhodo.cf.db.wan

    $TTL    86400

    @                IN    SOA    ns1.naruhodo.cf.    root.naruhodo.cf.(

                                                                      2019051215 ; Serial       ←  Serial값은 반드시 변경 전 수치보다 커야 변경사항이 반영됩니다

                                                                      7200       ; Refresh

                                                                      7200       ; Retry

                                                                      2419200    ; Expire

                                                                      86400 )    ; Minimum

                            IN    NS             ns1.naruhodo.cf.      ←   freenom에서 설정했던 네임서버와 동일한 이름(ns1)으로 입력

                            IN    NS             ns2.naruhodo.cf.      ←   freenom에서 설정했던 네임서버와 동일한 이름(ns1)으로 입력

                            IN    MX    10    smtp.naruhodo.cf.

    ns1                   IN    A               123.123.123.10       ←    freenom에서 설정했던 네임서버와 동일한 이름(ns1)으로 입력, 공인 IP를 지정

    ns2                  IN    A               123.123.123.10       ←    freenom에서 설정했던 네임서버와 동일한 이름(ns2)으로 입력, 공인 IP를 지정

    @                    IN    A              123.123.123.10

    www               IN    A              123.123.123.10

    smtp               IN    A              123.123.123.10

    mail                 IN    A              123.123.123.10

    naruhodo.cf.    IN    TXT    "v=spf1 ip4:123.123.123.10 ~all"      ← 메일서버를 운영하는 경우, 발송하는 메일의 스팸처리를 방지하기 위한 처리

    [root@centos7 ~]#

    BIND 데몬을 기동 합니다

    [root@centos ~]# systemctl start named-chroot      ← named가 아닌 named-chroot를 사용하여 기동 합니다.

    [root@centos ~]# systemctl enable named-chroot

     

    ※ BIND의 chroot화

    CentOS7에서는 기본적으로 BIND를 chroot 화합니다.

    named-chroot라는 데몬을 이용하여 BIND 설정에 필요한 /etc/named*, /var/named/* 등을 /var/named/chroot 이하로 자동 마운트 ON/OFF를 합니다.

    ※ chroot화
    루트 디렉터리를 변경하는 것을 말하는데, bind의 root directory는 원래 "/"인데, chroot 화하면 "/var/named/chroot"로 바뀌게 됩니다. 이렇게 함으로써 프로세스가 / 디렉터리가 아닌 /var/named/chroot로 접근할 수 있도록 권한을 제어하여 해킹 등의 보안 사고로부터 root directory(/)가 탈취되는 최악의 상황을 회피하려는 목적에서 사용됩니다.

    🐶Debugging🐶
    이 문서를 테스트하면서 작성 중이었는데, 아래와 같은 에러가 발생했네요.  디버깅을 해보겠습니다.

    [에러 상황] named-chroot를 실행했는데, 아래와 같이 설정 파일을 찾지 못하는 경우 ( .. file not found)
    [root@centos7 named]# systemctl status named-chroot

     named-chroot.service - Berkeley Internet Name Domain (DNS)

       Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)

       Active: failed (Result: exit-code) since Sun 2019-05-12 15:59:58 JST; 2min 2s ago

     

    May 12 15:59:58 centos7 bash[9320]: zone example.com/IN: loaded serial 2016121917

    May 12 15:59:58 centos7 bash[9320]: zone example.com/IN: loaded serial 2016121917

    May 12 15:59:58 centos7 bash[9320]: zone example.co.jp/IN: loaded serial 2016121917

    May 12 15:59:58 centos7 systemd[1]: named-chroot.service: control process exited, code=exited status=1

    May 12 15:59:58 centos7 bash[9320]: zone naruhodo.cf/IN: loading from master file naruhodo.cf.db.wan failed: file not found

    May 12 15:59:58 centos7 bash[9320]: zone naruhodo.cf/IN: not loaded due to errors.

    May 12 15:59:58 centos7 bash[9320]: external/naruhodo.cf/IN: file not found

    May 12 15:59:58 centos7 systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).

    May 12 15:59:58 centos7 systemd[1]: Unit named-chroot.service entered failed state.

    May 12 15:59:58 centos7 systemd[1]: named-chroot.service failed.

    [root@centos7 named]# 

    [에러 처리] 검색을 해보니, 대부분 bind설정 파일들이 /var/named/chroot/이하로 올바르게 마운트 되지 않기 때문에 발생한다는 의견들이 많았습니다.
    실제로 /var/named이하의 파일 개수와 chroot에 마운트 된 /var/named/chroot/var/named의 파일 개수를 비교해보니, 각각 37, 31로 다른 것을 알 수 있습니다

    [root@centos7 ~]# ll /var/named | wc -l

    37

    [root@centos7 ~]# ll /var/named/chroot/var/named | wc -l

    31

    [root@centos7 ~]# 

    그렇다면, 
    해결 방법은 이 두 파일을 동기화시키면 될 거 같습니다. 일일이 수동으로 하지 않고, 자동으로 잘 동기화되는 방법을 찾아봐야겠죠!!

    🛠❶ chroot화 스크립트를 수동으로 실행해봅니다.   ⇒ 동기 안됨!!

    [root@centos7 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot off

    [root@centos7 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot/ on

    [root@centos7 ~]#  ll /var/named/chroot/var/named | wc -l

    [root@centos7 ~]# ll /var/named/chroot/var/named | wc -l

    31


    🛠❷ 패키지를 재설치합니다.
    🐶패키지를 설치하기 전에 모두 설정 내용이 초기화될 수 있으니 필요한 파일과 디렉터리를 백업해줍니다.
    ※ 재설치할 경우, /etc/named.conf파일과 /etc/named디렉터리 이하는 모두 초기화되므로 반드시 백업해두시기 바랍니다.!!
    [root@centos7 ~]# cp /etc/named.conf /etc/named.conf.naru

    [root@centos7 ~]# tar cvzf etc.named.tar.gz /etc/named

    [root@centos7 ~]# tar cvzf var.named.tar.gz /var/named


    🐶이제 새롭게 BIND관련 패키지를 remove후에 install 해 줍니다.

    [root@centos7 ~]# yum -y remove bind bind-chroot bind-utils     

    ...
    Removed:

      bind.x86_64 32:9.9.4-73.el7_6           bind-chroot.x86_64 32:9.9.4-73.el7_6           bind-utils.x86_64 32:9.9.4-73.el7_6     

     

    [root@centos7 ~]# yum -y install bind bind-chroot bind-utils

    ...
    Installed:

      bind.x86_64 32:9.9.4-73.el7_6           bind-chroot.x86_64 32:9.9.4-73.el7_6           bind-utils.x86_64 32:9.9.4-73.el7_6          


    🐶named.conf파일이 초기화되었네요; 좀 전에 백업해둔 파일을 붙여 넣기 해 주세요 ( /var/named 이하는 변함없습니다)

    [root@centos7 ~]# cp /etc/named.conf.naru /etc/named.conf

    🐶
    /etc/named폴더 이하의 파일들도 모두 복구해줍니다.

    [root@centos7 ~]# tar xvzf etc.named.tar.gz

    [root@centos7 ~]# cp ./etc/named/named.* /etc/named/


    🐶이제 named-chroot데몬을 기동 해봅니다. 

    [root@centos7 ~]# systemctl start named-chroot.service 

    🐶확인해봅니다.

    [root@centos7 ~]# systemctl status named-chroot.service 

    [root@centos7 ~]# systemctl status  named-chroot

     named-chroot.service - Berkeley Internet Name Domain (DNS)

       Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)

       Active: active (running) since Sun 2019-05-12 18:24:32 JST; 44s ago

     Main PID: 15124 (named)

       CGroup: /system.slice/named-chroot.service

               └─15124 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot

     

    May 12 18:24:32 centos7 named[15124]: zone naruhodo.cf/IN/internal: sending notifies (serial 2019051215)

    [root@centos7 ~]# 

    🐶이번에는 37, 37로 동기화가 잘 되었습니다.

    [root@centos7 ~]#  ll /var/named | wc -l

    37

    [root@centos7 ~]#  ll /var/named/chroot/var/named | wc -l

    37

    [root@centos7 ~]# 

    이상으로 디버깅 완료!!

    🛠(번외) 필요에 따라서, 시큐리티 포기 = chroot화를 포기하고 named 데몬을 사용하는 겁니다. 
    (시큐리티 강화는 해커뿐 아니라 관리자도 번거롭게 하거든요^^; 자신의 선택에 달려있습니다)

    [root@centos7 ~]# systemctl stop named-chroot

    [root@centos7 ~]# systemctl disable named-chroot

    [root@centos7 ~]# systemctl start named

    [root@centos7 ~]# systemctl enable named

     

    데몬이 정상 기동 했으면 53/TCP, 53/UDP 포트를 오픈해 줍니다.

    [root@centos7 ~]# firewall-cmd --add-service=dns --zone=public --permanent

    [root@centos7 ~]# firewall-cmd --reload


    [root@centos7 ~]# firewall-cmd --list-service
    samba http dns smtp smtps ssh https imaps

    [root@centos7 ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: p1p1
      sources: 
      services: samba http dns smtp smtps ssh https imaps
      ports: 1999/tcp
      protocols: 
      masquerade: no
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
            rule family="ipv4" source address="139.0.7.77" protocol value="ip" drop     ←  fail2 ban적용 전에 스팸 IP대역을 수동으로 추가해 넣은 것입니다. (참고용)
            rule family="ipv4" source address="181.214.206.0/24" protocol value="ip" drop
            rule family="ipv4" source address="58.218.204.0/24" protocol value="ip" drop
            rule family="ipv4" source address="185.36.81.0/24" protocol value="ip" drop
    [root@centos7 ~]# 

    쿼리용 DNS 서버를 Linux 서버로 변경

    ■서버 자신의 쿼리용 DNS 서버를 Google의 공개용 서버 IP주소로 변경해 둡니다.
    [root@centos7 ~]# sed -i 's/DNS1=.*/DNS1=8.8.8.8/g' /etc/sysconfig/network-scripts/ifcfg-p1p1

    ifcfg-p1p1 은 실제 자신의 인터페이스를 확인한 후에 rename 해 주세요

    [root@centos7 ~]# ip r      ← 라우팅 테이블에서 외부와 통신하는 인터페이스를 확인

    default dev ppp0 scope link 

    default via 10.x.0.254 dev p1p1 proto dhcp metric 100 

    10.x.0.0/16 dev p1p1 proto kernel scope link src 10.x.1.40 metric 100 

    157.x.x.x dev ppp0 proto kernel scope link src 157.x.x.x 

    203.x.x.x via 10.x.x.254 dev p1p1 src 10.x.1.x    ← p1p1 이 인터페이스 이름입니다.

    [root@centos7 ~]# 
    or
    [root@centos7 ~]#  ifconfig 

    [root@centos7 ~]# systemctl restart network    ← DNS 서버의 변경내용 반영

     

    쿼리가 잘 되는지 확인해 봅니다.

    ■naruhodo.cf의 사설 IP를 쿼리 해 봅니다. (local에서)

    [root@centos7 ~]# dig naruhodo.cf          ← 정방향 쿼리

    ; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> naruhodo.cf
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34611
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;naruhodo.cf. IN A

    ;; ANSWER SECTION:
    naruhodo.cf. 86400 IN A 192.168.1.10

    ;; AUTHORITY SECTION:
    naruhodo.cf. 86400 IN NS ns1.naruhodo.cf.

    ;; ADDITIONAL SECTION:
    ns1.naruhodo.cf. 86400 IN A 192.168.1.10

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Sun May 12 22:23:40 JST 2019
    ;; MSG SIZE  rcvd: 90

    [root@centos7 ~]# dig -x 192.168.1.10          ← 역방향 쿼리

    ; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -x 192.168.1.10
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34820
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;10.1.168.192.in-addr.arpa. IN PTR

    ;; AUTHORITY SECTION:
    10.1.168.192.in-addr.arpa. 86400 IN SOA iffthen.co.jp. root.iffthen.co.jp. 2019051221 0 14400 3600000 86400

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Sun May 12 22:37:01 JST 2019
    ;; MSG SIZE  rcvd: 110

    [root@centos7 ~]# 
    [root@centos7 ~]# nslookup naruhodo.cf        ←      정방향 쿼리
    > naruhodo.cf
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Name: naruhodo.cf
    Address: 192.168.1.10

    > 192.168.1.10           ←      역방향 쿼리
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    245.1.60.10.in-addr.arpa name = naruhodo.cf.
    >

     

    ■naruhodo.cf의 공인 IP를 쿼리 해 봅니다. (맥북에서)

    try🐶everything ~$ dig naruhodo.cf

    ; <<>> DiG 9.10.6 <<>> naruhodo.cf

    ;; global options: +cmd

    ;; Got answer:

    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59362

    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

     

    ;; OPT PSEUDOSECTION:

    ; EDNS: version: 0, flags:; udp: 512

    ;; QUESTION SECTION:

    ;naruhodo.cf. IN A

     

    ;; ANSWER SECTION:

    naruhodo.cf. 86400 IN A 123.123.123.10

     

    ;; Query time: 167 msec

    ;; SERVER: 192.168.11.1#53(192.168.11.1)

    ;; WHEN: Sun May 12 22:27:57 JST 2019

    ;; MSG SIZE  rcvd: 58

     

    try🐶everything ~$ 

    try🐶everything ~$ nslookup naruhodo.cf
    Server: 192.168.11.1

    Address: 192.168.11.1#53

     

    Non-authoritative answer:

    Name: naruhodo.cf

    Address: 123.123.123.10

     

    try🐶everything ~$ 

     

    새로 취득한 도메인으로 웹사이트 운영하기(Apache/VirtualHost)

    현재 운영 중인 웹서버에 이번에 새롭게 취득한 naruhodo.cf 도메인을 사용하여, 
    Apache의 virtualhost기능을 사용하여 아래의 조건으로 사이트를 운영할 수 있도록 설정합니다.

    • 메인 웹사이트 http://annotators.ml
    • 추가하는 웹사이트 http://naruhodo.cf
    • 메인 웹사이트 도큐먼트 루트 /var/www/html/annotators.ml
    • 추가할 웹사이트의 도큐먼트 루트  /var/www/html/naruhodo.cf
    • 메인 웹사이트의 액세스 로그 /var/log/httpd/access_log、/var/log/httpd/error_log
    • 추가하는 웹사이트의 액세스 로그/var/log/httpd/naruhodo.cf-access_log、/var/log/httpd/naruhodo.cf-error_log

    ※ 이 사이트를 기본으로 하여 구축합니다. >> https://centossrv.com/apache-virtualhost.shtml

     

    도메인 취득: 무료 도메인취득은 아래(⬇)를 참고해주세요.

    CentOS7 - 무료도메인 취득/설정하기 (freenom) (3/10)

     

    VirtualHost 설정하기

    ■정의되지 않은 호스트 관리용 설정 파일 작성

    [root@centos7 ~]# cat /etc/httpd/conf.d/virtualhost-00.conf 

    ※ 가상 호스트에 정의되지 않은 호스트명으로 액세스할 경우, 모두 거부합니다!

    <VirtualHost *:80>

        ServerName any

        <Location />

            Require all denied

        </Location>

    </VirtualHost>

    [root@centos7 ~]# 

     

    도큐먼트 루트 디렉터리 작성

    [root@centos7 ~]# mkdir /var/www/html/annotators.ml   ← 메인 호스트용

    [root@centos7 ~]# mkdir /var/www/html/naruhodo.cf ← 가상 호스트용

     

    ■가상 호스트 설정 파일 작성

    [root@centos7 ~]# cat /etc/httpd/conf.d/virtualhost-annotators.ml.conf    ← 메인 호스트용 

    <VirtualHost *:80>

        ServerName annotators.ml

        DocumentRoot /var/www/html/annotators.ml

    </VirtualHost>

     

    [root@centos7 ~]# cat  /etc/httpd/conf.d/virtualhost-naruhodo.cf.conf     ← 추가 호스트용

    <VirtualHost *:80>

        ServerName naruhodo.cf

        DocumentRoot /var/www/html/naruhodo.cf

        ErrorLog logs/naruhodo.cf-error_log

        CustomLog logs/naruhodo.cf-access_log combined env=!no_log

    </VirtualHost>

    [root@centos7 ~]# 

     

    ■웹서버 재기동

    [root@centos7 ~]# systemctl restart httpd 

    [root@centos7 ~]# systemctl status httpd

     httpd.service - The Apache HTTP Server

       Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)

       Active: active (running) since Mon 2019-05-13 00:19:46 JST; 11h ago

         Docs: man:httpd(8)

               man:apachectl(8)

     Main PID: 5583 (httpd)

       Status: "Total requests: 1357; Current requests/sec: 0; Current traffic:   0 B/sec"

       CGroup: /system.slice/httpd.service

               ├─ 5583 /usr/sbin/httpd -DFOREGROUND

               ├─ 5761 /usr/sbin/httpd -DFOREGROUND

               ├─ 5762 /usr/sbin/httpd -DFOREGROUND

               ├─ 5763 /usr/sbin/httpd -DFOREGROUND

               ├─ 5766 /usr/sbin/httpd -DFOREGROUND

               ├─ 5767 /usr/sbin/httpd -DFOREGROUND

               ├─ 6753 /usr/sbin/httpd -DFOREGROUND

               └─10580 /usr/sbin/httpd -DFOREGROUND

     

    May 13 00:19:39 centos7 systemd[1]: Starting The Apache HTTP Server...

    May 13 00:19:46 centos7 systemd[1]: Started The Apache HTTP Server.

    [root@centos7 ~]# 

    ■로그 파일 확인

    [root@centos7 ~]# ll /var/log/httpd/naruhodo.cf-*

    -rw-r--r-- 1 root root 0 May 13 11:50 /var/log/httpd/naruhodo.cf-access_log

    -rw-r--r-- 1 root root 0 May 13 11:50 /var/log/httpd/naruhodo.cf-error_log

    [root@centos7 ~]# 

     

    ■가상 호스트 확인: index파일 생성하기

    [root@centos7 ~]# echo "VirtualHost Test!!" >> /var/www/html/naruhodo.cf/index.html ← 테스트 페이지 작성

     

    1. 브라우저(Chrome)로 접근해 보거나, 

    방금 위에서 추가한 텍스트(VirtualHost Test!!)가 표시되는 것을 확인합니다.

    virtualhost test
    virtualhost test

    2. 무료 웹사이트 테스트 사이트에서 확인해봅니다.

    Website Test
    Website Test
    Website test results
    Website test results

    ■가상 호스트 확인: index파일 제거하기

    [root@centos7 ~]# rm -f /var/www/html/naruhodo.cf/index.html ← 테스트 페이지 삭제

     

    반응형

     

    naruhodo.cf 도메인을 Tistory의 개인 도메인으로 연결하기

    개인 도메인 연결 정보 확인하기

    아래의 링크에서 네임서버에 설정할 정보를 얻을 수 있습니다. 

    • 목적지 도메인 : host.tistory.io 또는 blog.tistory.com 중 1개 선택
    • 목적지 IP : 27.0.236.139

    https://notice.tistory.com/1784

     

    개인 도메인(2차 블로그 주소) 사용을 위한 DNS 설정하기

    티스토리에서는 티스토리 블로그를 통해 블로거 여러분이 자신만의 브랜드를 만들고 활동할 수 있도록 개인 도메인 연결 기능을 지원하고 있습니다. 나에게 어울리는 도메인을 가지고 있다면 자신만의 블로그 주소..

    notice.tistory.com

    개인 도메인 연결 정보 확인하기

    naruhodo.cf의 외부용 정방향 Zone 데이터베이스를 아래와 같이 편집합니다.

    [root@centos7 named]# vi /var/named/naruhodo.cf.db.wan 

    $TTL    86400
    @       IN      SOA     ns1.naruhodo.cf.        root.naruhodo.cf.(
                                                                     2019051316 ; Serial
                                                                    0       ; Refresh
                                                                    7200       ; Retry
                                                                   2419200    ; Expire
                                                                  86400 )    ; Minimum
            IN      NS                        ns1.naruhodo.cf.
            IN      NS                        ns2.naruhodo.cf.
            IN      MX      10             smtp.naruhodo.cf.
    ns1     IN      A                        123.123.123.10
    ns2     IN      A                       123.123.123.10
    @       IN      A                       27.0.236.139        ← naruhodo.cf 자체(@)의 IP주소를 티스토리에서 지정한 IP주소로 변경해줍니다.
    www     IN      CNAME           blog.tistory.com.  www라는 서브도메인의 별명을 blog.tistory.com으로 지정해줍니다
    smtp    IN      A                      123.123.123.10
    mail    IN      A                        123.123.123.10
    naruhodo.cf.    IN      TXT     "v=spf1 ip4:123.123.123..10 ~all" ;mail server

     

    Serial값을 이전보다 큰 값으로 변경한 후 named-chroot데몬을 재기동해줍니다.

    에러가 나지 않는다면 OK입니다.

    [root@centos7 named]# systemctl restart named-chroot

     

    ■naruhodo.cf 확인해봅니다. 
    try🐶everything backend$ nslookup naruhodo.cf
    Server: 192.168.11.1
    Address: 192.168.11.1#53

    Non-authoritative answer:
    Name: naruhodo.cf
    Address: 27.0.236.139    ←   IP주소가 변경된 것을 확인할 수 있습니다.

    try🐶everything backend$ 

    자신의 블로그 관리 홈에서 개인 도메인 설정을 진행합니다.

    관리/블로그 > 도메인 연결하기 

    개인도메인 설정 - 도메인 연결하기
    개인도메인 설정 - 도메인 연결하기

     

    http://로 시작하는 곳에 연결할 도메인을 입력한 후 변경사항을 저장합니다.

    만약 에러가 발생하면 버튼 왼쪽에 에러 메시지가 나타납니다. 적절히 대응해 줍니다.

    개인도메인설정 - 변경사항 저장
    개인도메인설정 - 변경사항 저장

    문제가 없다면 아래와 같은 화면이 나타납니다.

    개인 도메인 설정
    개인 도메인 설정

     

    몇 분 정도 지난 후에 페이지를 새로고침을 해보면,

    아래와 같이 보안 접속 인증서가 발급되고, 연결된 도메인은 보안접속 중입니다.라는 메시지와 함께 https://naruhodo.cf로 바뀐 것을 확인할 수 있습니다.

     

    개인도메인 설정 2
    개인도메인 설정 2

     

    이제 https://naruhodo.cf로 잘 동작하는 것을 확인할 수 있습니다

    개인도메인연결
    개인도메인연결


     

     

    이상 네임서버 설정과 취득한 도메인을 어떻게 활용할 수 있는지 간단히 알아봤습니다.

    다음에는 큐메일을 이용한 메일서버를 구축합니다.

     

    반응형