명명된 구성 파일

명명된 구성 파일

내 설정은 점점 더 복잡해지고 있으며 일반적으로 나는 물건을 여러 부분으로 나누고 직접 조립하는 경향이 있습니다. 하지만 이번에는 전체 장비가 함께 작동하도록 하는 데 조금 더 도움이 필요한 것 같았습니다. 그렇기 때문에 @Rui F Ribeiro 사용자가 나에게 이 질문을 별도의 질문으로 요청한 것입니다.


내가 달성하고 싶은 것은 무엇입니까? 기본적으로 인터넷에서 찾은 것은 DNS 방화벽이라고 합니다.
다음 기능으로 구성된 BIND 서버가 필요합니다.

  • 기본적으로 모든 요청을 외부 DNS로 전달할 것으로 예상됩니다(제 경우에는 OpenDNS: 208.67.222.222, 208.67.220.220).
  • OpenDNS에는 유용한 도메인 차단/조작 기능이 있기 때문에 어떤 상황에서도 루트 서버에 쿼리할 수 없습니다. 따라서 바인딩 서버가 OpenDNS와 루트 서버에 무작위로 요청하기 시작하면 매번 다른 결과를 얻게 됩니다.(참고: 이 전달은 중간에 다른 서버에 의해 가로채거나 추가로 조작되지 않는 것을 포함하여 다양한 이유로 암호화 모드에서 수행되어야 합니다.)
  • 바인드 서버도 캐시 역할을 해야 하며 OpenDNS에 쿼리를 보낼 수 있지만 이미 새로운 데이터가 있는 경우 계속해서 쿼리할 필요가 없어 대역폭과 시간이 낭비됩니다.
  • 내 구성을 더욱 복잡하게 만드는 다른 주요 요청은 다음과 같습니다.많은 도메인 목록이 있는 RPZ 영역을 설정하고 싶습니다. 도메인이 확인되는 것을 원하지 않습니다. 기본적으로 127.0.0.1 또는 내 LAN의 다른 IP/호스트로 확인되기를 원합니다. 광고 목적 등을 위한 http 서버의 모든 캡처로 사용됩니다.

이렇게 복잡한 구성을 어떻게 달성할 수 있습니까?

이것은 내 구성 파일입니다. 여기 뭔가가 필요에 따라 작동하지 않는 것 같으니 구성하는 데 도움을 주세요.


명명된 구성 파일

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

명명된.conf.옵션

acl "trusted" {
        127.0.0.1/8;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
        ::1;
};

options {

        directory "/var/cache/bind";    # bind cache directory

        recursion yes;                  # enables resursive queries

        allow-query { trusted; } ;

        allow-recursion { trusted; };   # allows recursive queries from "trusted" clients

        //listen-on { 0.0.0.0; };       # interfaces where to listen

        allow-transfer { none; };       # disable zone transfers by default

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forward only;

        forwarders {
                208.67.222.222;
                208.67.220.220;
        };


        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================

        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;


        auth-nxdomain no;               # conform to RFC1035
        #listen-on-v6 { any; };

        response-policy {
                zone "rpz-white" policy PASSTHRU; // my own white list
                zone "rpz-foreign";    // obtained from producer
        };

};

zone "rpz-white" {
  type master;
  file "/etc/bind/rpz-white.db";
};

zone "rpz-foreign" {
  type master;
  file "/etc/bind/rpz-foreign.db";
};

이름 .conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

명명된.conf.defaultzone

// prime the server with knowledge of the root servers
//zone "." {
//      type hint;
//      file "/etc/bind/db.root";
//};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

답변1

그럼 여러분의 소원을 모두 확인해 볼까요? 쉬운 문제를 먼저 해결하기 위해 순서를 변경했습니다.

1) BIND는 캐시 역할을 해야 합니다.

이것이 기본적으로 수행되는 작업입니다. 아무것도 구성할 필요가 없습니다.

2) 우리는 루트 네임서버와 통신하지 않습니다.

루트 힌트에 대해 댓글을 달았네요. 이제 조직/집 외부의 DNS 서버와 통신할 때 IP 주소로 요청을 전달하지 않는 것이 좋습니다. 그러니 댓글을 forward only;달고 댓글을 해제하세요.include "/etc/bind/zones.rfc1918";

3) 여기 RPZ가 좋아 보이네요. rpz-foreign.dbDNS 이름/도메인 정규식을 정의해야 합니다 .

www.domaintoblacklist.xxx CNAME myserver

또는

www.domaintoblacklist.xxx A 127.0.0.1

4) 연결을 암호화하는 방법은 다음과 같습니다.도메인 이름 암호화. DNS 암호화를 사용하면 OpenDNS를 포함한 여러 DNS 공급자와 TLS/SSL을 통한 DNS에 대해 논의할 수 있습니다. 또 다른 장점은 사람들이 DNS 요청을 듣거나 변경할 수 없다는 것입니다.

가장 쉬운 설치 방법은 스크립트를 다운로드하는 것입니다.dnscrypt 자동 설치

스크립트를 다운로드하려면 다음을 수행하십시오.

git clone https://github.com/simonclausen/dnscrypt-autoinstall

이 스크립트는 독립형 dnscrypt 사용을 위해 수행되므로 그 위에 BIND를 사용하려면 추가 작업이 필요합니다.

그럼 시작해 보겠습니다.

./dnscrypt-autoinstall.sh

스크립트는 DNS 서비스 사용 여부를 포함하여 일련의 질문을 합니다.

dnscrypt인 로컬 호스트를 가리키도록 /etc/resolv.conf가 변경됩니다. resolv.conf를 BIND로 변경해야 합니다. 이에 대해서는 나중에 자세히 설명하겠습니다.

localhost에서 BIND는 dnscrypt-proxy127.0.0.2 및 127.0.0.3을 수신합니다. dnscrypt-proxyopendns 서버와 통신하는 사람이 될 것입니다.

또한 전달자 BIND는 다음과 통신하도록 구성되어야 합니다 dnscrypt.

options {
  ...
    forwarders {
            127.0.0.2;
            172.0.0.3;
    };
  ...

}

또한 /etc/init.d/dnscrypt-proxy를 편집하고 127.0.0.1 줄을 127.0.0.3으로 변경했습니다.

$DAEMON --daemonize --ephemeral-keys --user=dnscrypt --local-address=127.0.0.3 --resolver-address=$ADDRESS1 --provider-name=$PNAME1 --provider-key=$PKEY1

플레이북도 변경되었습니다 /etc/resolv.conf. BIND/0.0.0.0(DNS 용어로 127.0.0.1)을 가리키도록 변경해야 합니다.

chattr -i /etc/resolv.conf

그리고 편집하세요.

마치다:

service dnscrypt-proxy restart
service bind9 restart

암호화 구성이 완료된 후:

  • BIND를 캐시로 사용하여 통신하는 클라이언트
  • BIND는 여전히 "일반" DNS 프로토콜을 사용하여 dnsproxy의 두 인스턴스와 통신합니다.
  • dnsproxy는 선택한 공급자와 통신하고 443/UDP 및 443/TCP를 통해 DNS를 암호화합니다.

외부로 전송되는 패킷을 모니터링하려면 다음을 수행하세요.

sudo tcpdump -n port 443

관련 정보