星期一, 9月 08, 2008

駭客中繼站阻絕設定

VB超人接了某個政府機關的案子,有台主機代管在敝公司。日前很不幸地又收到資安管理通知,這次是要求做駭客中繼站阻絕設定,設定方法如下:
DNS設定步驟
  1. 建立內部DNS(如:192.168.0.2),並且要求所有內部電腦必須透過本DNS方可查詢。
  2. 新增一組Domain(如:blogdns.com) ,令此網域之查詢均指向一組虛設IP(如:1.1.1.1)。不論查詢 *. blogdns.com等,均回覆前述虛設IP。
  3. 於防火牆設定一組阻擋該虛設IP的規則(如:reject all dst ip=1.1.1.1)。
  4. 重複步驟2至3,將所附之DN設定完畢。
敝公司的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\t1.1.1.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 服務 即可
太感謝啦

江紹華 提到...

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