로컬 네트워크에서 BIND를 DNS 서버로 설정하고 조회 할 때 스크립트를 실행할 수 있습니까?
들어오는 DNS 조회를 기반으로 Python 또는 Bash 스크립트를 실행하고 싶습니다. 어떻게 해결할 수 있습니까?
바인드에서 가능하다면, 우분투에서 실행되는 다른 DNS 서버 구현에서 가능한지 여부를 알려주십시오.
대단히 감사합니다.
로컬 네트워크에서 BIND를 DNS 서버로 설정하고 조회 할 때 스크립트를 실행할 수 있습니까?
들어오는 DNS 조회를 기반으로 Python 또는 Bash 스크립트를 실행하고 싶습니다. 어떻게 해결할 수 있습니까?
바인드에서 가능하다면, 우분투에서 실행되는 다른 DNS 서버 구현에서 가능한지 여부를 알려주십시오.
대단히 감사합니다.
답변:
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 요청의 모든 필드를 쉽게 사용할 수 있습니다.
바인드 서버 로그를 모니터링하여이를 수행 할 수 있습니다 (조회 로깅이 켜져 있어야 함). 행운을 빕니다...
/dev/shm
있습니다.
swatch
작성한 다음 로그에서 또는 OSSEC 을 실행 하여 스크립트를 호출하십시오. 어느 쪽이든 장기적으로는 좋은 생각이 아닙니다.
이벤트와 같은 것은 바인드로 구현되지 않으며 필요하지 않습니다.
일부 조직에서는 일부 사용자에 대한 액세스를 제한하는 데 사용되는 응용 방화벽을 둘러 볼 수 있습니다. 거기에서 당신은 당신이 원하는 것을 성취 할 더 많은 기회를 가질 것입니다.
라우트를 설정하는 것도 좋은 생각입니다. 결국 바인드 및 트리거 된 스크립트 실행으로 달성하려는 것은 비효율적입니다.
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 / 조직은이를 수행 할 수 있으며이 목적을 위해 모두 특정 경로를 추가합니다. 운송 비용이나 법원 명령이 종종 그러한 조치의 원인입니다.