조회를 기반으로 BIND에서 스크립트를 실행할 수 있습니까?

조회를 기반으로 BIND에서 스크립트를 실행할 수 있습니까?

로컬 네트워크에서 BIND를 DNS 서버로 설정하고 조회 시 스크립트를 실행할 수 있습니까?

들어오는 DNS 조회를 기반으로 Python 또는 Bash 스크립트를 실행하고 싶습니다. 이 문제를 어떻게 해결합니까?

Bind에서 구현할 수 있다면 어떻게 구현할 수 있는지 알려주시고, 그렇지 않은 경우 Ubuntu에서 실행되는 다른 DNS 서버 구현에서 구현할 수 있는지 알려주세요.

매우 감사합니다.

답변1

BIND 로그를 구문 분석하거나 BIND를 전혀 방해하지 않아도 되는 두 가지 추가 옵션을 생각할 수 있습니다.

1) 포트 미러링 - 패킷을 복사하여 애플리케이션이 수신 대기 중인 별도의 포트로 전송하고, DNS 요청을 구문 분석하고 조치를 취합니다. dpkt또는 scapy유사한 패킷 제작 라이브러리가 원시 요청을 구문 분석하는 데 도움이 됩니다.

2) 일부 유형의 패킷 스니핑 라이브러리를 사용하여 요청을 수동적으로 모니터링합니다. 다음은 사용 예입니다 scapy.

from scapy.all import *

def handler(req):
    if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
        ip = req.getlayer(IP)
        dns = req.getlayer(DNS)

        q = dns.qd
        print q.qname # simply print domain name


if __name__ == '__main__':
    sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)

분명히 이것은 단지 원시적인 예일 뿐입니다. 쿼리되는 도메인의 이름만 인쇄하지만 물론 많은 논리를 추가할 수도 있습니다. scapy 문서를 참조하면 DNS 요청의 모든 필드를 사용할 수 있음을 알 수 있습니다.

답변2

바인드 서버 로그를 모니터링하여 이를 수행할 수 있습니다(쿼리 로깅이 켜져 있어야 함). 행운을 빌어요...

답변3

바인드에 구현된 이벤트와 같은 것은 없으며 그렇게 될 필요도 없습니다.

일부 조직에서 특정 사용자의 액세스를 제한하기 위해 사용하는 애플리케이션 방화벽을 살펴볼 수 있습니다. 거기서 당신은 당신이 원하는 것을 성취할 수 있는 더 많은 기회를 갖게 될 것입니다.

라우팅을 설정하는 것도 좋은 생각인 것 같습니다. 궁극적으로 스크립트 실행을 바인딩하고 트리거하여 달성하려는 것도 비효율적입니다. 다음을 수행해야 합니다.

for each dest IP 
look up through your database  
if match set the route
then the OS will see and use the root

라우팅 로드 설정은 문제가 되지 않으며 눈에 띄는 방식으로 성능에 영향을 미치지 않습니다. 엔터프라이즈 라우터에는 몇 개의 경로가 있다고 생각하시나요? 수백? 실제로는 그렇지 않습니다. 그리고 반드시 멋진 하드웨어 사양을 가지고 있는 것도 아닙니다. 진지하게, 문제 없습니다. 진지한 운영 체제는 많은 경로를 처리하고 조회를 최적화하도록 특별히 설계되었습니다.

그 외에도 가장 먼저 해야 할 일은 라우팅 테이블 위에 또 다른 종류의 데이터베이스인 데이터베이스를 사용하는 것입니다. 일을 단순하게 유지하십시오. BGP 서버에서는 실제로 정치적/재정적 이유로 많은 경로가 선택/우선순위가 지정됩니다. 모든 ISP/조직이 이를 수행할 수 있으며모두이에 대한 특정 경로를 추가하십시오. 배송 비용이나 법원 명령이 그러한 조치를 취하는 이유인 경우가 많습니다.

관련 정보