ローカルネットワーク上でBINDをDNSサーバーとして設定し、ルックアップを取得したときにスクリプトを実行することは可能ですか?
着信DNSルックアップに基づいてPythonまたはBashスクリプトを実行したいのですが、どうすれば解決できますか?
Bindで可能な場合は方法を教えてください。可能でない場合は、Ubuntuで実行される他のDNSサーバーの実装で可能かどうかを教えてください。
どうもありがとうございました。
ローカルネットワーク上でBINDをDNSサーバーとして設定し、ルックアップを取得したときにスクリプトを実行することは可能ですか?
着信DNSルックアップに基づいてPythonまたはBashスクリプトを実行したいのですが、どうすれば解決できますか?
Bindで可能な場合は方法を教えてください。可能でない場合は、Ubuntuで実行される他のDNSサーバーの実装で可能かどうかを教えてください。
どうもありがとうございました。
回答:
BINDログの解析やBINDへの干渉をまったく必要としない2つの追加オプションを考えることができます。
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リクエストのすべてのフィールドがすぐに利用できることがわかります。
イベントはバインドに実装されているようなものはありません。それは必要ありません。
一部の組織で一部のユーザーへのアクセスを制限するために使用されているアプリケーションファイアウォールを見回すことができます。そこではあなたが望むものを達成するより多くのチャンスがあります。
ルートの設定も良い考えのようです。結局、バインドとトリガーされたスクリプトの実行で達成したいことも非効率的です。次のことを行う必要があります。
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 /組織はそれを行うことができ、これらすべてがこの目的のために特定のルートを追加します。多くの場合、通過費用や裁判所命令がこのような措置の原因です。