星期一, 9月 08, 2008

駭客中繼站阻絕設定

Update: 由於在 2018年4月Cloudflare與APNIC合作建置全球最快的 Public DNS 1.1.1.1 上線,所以將範例裡的IP改為 127.0.0.1 ,參考 隱私優先、速度最快,公共DNS服務1.1.1.1上線了

VB超人接了某個政府機關的案子,有台主機代管在敝公司。日前很不幸地又收到資安管理通知,這次是要求做駭客中繼站阻絕設定,設定方法如下:
DNS設定步驟
  1. 建立內部DNS(如:192.168.0.2),並且要求所有內部電腦必須透過本DNS方可查詢。
  2. 新增一組Domain(如:blogdns.com) ,令此網域之查詢均指向一組虛設IP(如:127.0.0.1)。不論查詢 *. blogdns.com等,均回覆前述虛設IP。
  3. 重複步驟2,將所附之DN設定完畢。
虛設IP用 172.20.20.20 之類的Private Address也可以,若希望不要因為網路query讓電腦變慢用127.0.0.1是最理想的解法。原本我隨便找 1.1.1.1 ,結果在 2018年被拿去用 XD

敝公司的DNS就是小弟在管理,因為合約關係,我不得不幫VB超人搞定這個需求。目前有348個host,若一一設定不累死我?

首先簡化問題,不管是不是同個domain,把每個host都放在一個zone總可以吧?結果一定相同。因此,就寫個簡單的script將host列表轉成dns file;由於使用Windows DNS,所以可以把dns file放在%windir%\system32\dns,再利用registry匯入即可。
Windows DNS Server的機碼在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones]底下。

#!/usr/bin/env python
# coding: utf-8

def WriteDNSFile(list, adserver):
 for domain in list:
  domain = domain.strip();
  f=open(domain+'.dns', 'w+');
  f.write(";\n;  Database file "+domain+".dns for "+domain+" zone.\n");
  f.write(";      Zone version:  1\n;\n\n");
  f.write("@\tIN  SOA "+adserver+".  hostmaster."+adserver+". (\n");
  f.write("\t\t1\t; serial number\n");
  f.write("\t\t900\t; refresh\n");
  f.write("\t\t600\t; retry\n");
  f.write("\t\t86400\t; expire\n");
  f.write("\t\t3600\t) ; default TTL\n");
  f.write(";\n;  Zone NS records\n;\n\n");
  f.write("@\t\tNS\tyouradserver.corp.\n\n");
  f.write(";\n;  Zone records\n;\n\n");
  f.write("@\t\t A\t127.0.0.1\n\n");
  f.close();
 
def WriteDNSRegFile(list):
 f=open("dns.reg", "w+");
 f.write("Windows Registry Editor Version 5.00\n\n");
 for domain in list:
  domain = domain.strip();
  f.write("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\DNS Server\\Zones\\"+domain+"]\n");
  f.write('"Type"=dword:00000001\n');
  f.write('"SecureSecondaries"=dword:00000003\n');
  f.write('"NotifyLevel"=dword:00000002\n');
  f.write('"DatabaseFile"="'+domain+'.dns"\n');
  f.write('"NoRefreshInterval"=dword:000000a8\n');
  f.write('"RefreshInterval"=dword:000000a8\n');
  f.write('"Aging"=dword:00000000\n\n');
 f.close();
 
#主程式
adserver="youradserver.corp" #AD及DNS Server, 這裏是youradserver.corp
hostListFile = ur"歷次中繼站列表匯整檔.txt";
f=open(hostListFile, 'r');
list = f.readlines();
f.close();
WriteDNSRegFile(list);
WriteDNSFile(list, adserver);

本程式提供給有此需求的朋友,版權沒有,盡管盜貼。

3 則留言:

Kuon 提到...

Python++

江紹華 提到...

太感謝 大大無私地分享
透過拍森跑出來的reg執行後
將所有清單內產生的.dns存放到dns目錄
在重啟dns 服務 即可
太感謝啦

江紹華 提到...

太感謝您的分享了
不用使用原始手動的方式