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


9

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

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

바인드에서 가능하다면, 우분투에서 실행되는 다른 DNS 서버 구현에서 가능한지 여부를 알려주십시오.

대단히 감사합니다.


1
이것은 나에게 조금 이상하게 보입니다. 달성하려는 것을 물어볼 수 있습니까?
sr_

이상한 일이있을 수 있습니다.) 내가하려고하는 일은 조회의 대상 IP가 특정 외국에있는 경우 내 데이터베이스에서 조회하는 것이며,있는 경우 내 경로를 설정하고 싶습니다. 서버는 라우터, 특정 ISP 또는 경우에 따라 VPN 연결 역할을합니다. 나는 많은 경로를 설정하려고 시도했지만 99 %는 사용되지 않으며 성능은 매우 나쁩니다. 요청시 수행 할 수 있으면 DNS 성능이 좋지 않지만 제 경우에는 아무런 영향이 없습니다.
Gunnar

헝가리어 웹 사이트에서 Google Ad-blah를 사용하는 경우 끔찍하게 실패 할 수 있습니다. (하지만 대안적인 아이디어는 없습니다. 죄송합니다.)
sr_

나는 당신이해야 할 일에 대해 궁금합니다. 왜냐하면 당신은 지리적 위치와 일치 해야하는 IP로부터 요청을받을 것입니다. 서버가 특정 경로를 통해 해당 IP에 응답하기 위해 요청을 이미 BIND로 만든 이후로 의미가 없습니다.
Karlson

달성하려는 것에 대한 나의 추측이 맞다면 (비표준 게이트웨이를 통해 특정 연결을 라우팅) 잘못된 위치를 찾아야합니까? 정책 라우팅 및 / 또는 iptables를 살펴 보셨습니까?
Alexios

답변:


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)

분명히 이것은 단순한 예일뿐입니다. 쿼리 된 도메인의 이름 만 인쇄하지만 물론 많은 논리를 추가 할 수 있습니다. 스 캐피 문서를 참조하면 DNS 요청의 모든 필드를 쉽게 사용할 수 있습니다.


이것은 흥미로워 보인다. 이것에 대해 살펴 보겠습니다. 감사합니다 :-)
Gunnar

0

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


모든 바인드 쿼리를 로깅하면 성능 이 크게 저하됩니다. 나는에 권하고 싶지 않다 어떤 생산 수준의 신뢰할 수있는 서버입니다.
Shadur

해당 바인드 서버의로드에 따라 다릅니다. 그리고 예를 들어 램 디스크에 로그를 쓸 수도 /dev/shm있습니다.
Nils

로그를 swatch작성한 다음 로그에서 또는 OSSEC 을 실행 하여 스크립트를 호출하십시오. 어느 쪽이든 장기적으로는 좋은 생각이 아닙니다.
Jodie C

0

이벤트와 같은 것은 바인드로 구현되지 않으며 필요하지 않습니다.

일부 조직에서는 일부 사용자에 대한 액세스를 제한하는 데 사용되는 응용 방화벽을 둘러 볼 수 있습니다. 거기에서 당신은 당신이 원하는 것을 성취 할 더 많은 기회를 가질 것입니다.

라우트를 설정하는 것도 좋은 생각입니다. 결국 바인드 및 트리거 된 스크립트 실행으로 달성하려는 것은 비효율적입니다.

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 / 조직은이를 수행 할 수 있으며이 목적을 위해 모두 특정 경로를 추가합니다. 운송 비용이나 법원 명령이 종종 그러한 조치의 원인입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.