manuel-r
Goto Top

Blacklisten für ISA2006 generieren und importieren

Ich hab im Internet gesucht und wie so oft beim Thema ISA mehr oder weniger nichts gefunden. Also hab ich mich schnell hingesetzt und selbst gescriptet.

Um was geht es?
Der ISA ist unter anderem ein Proxy für das Firmennetzwerk und kann als solcher natürlich auch Webseiten anhand von Black-/Whitelisten filtern. Schade, um nicht zu sagen blöd, ist nur, dass es keine (oder nur sehr eingeschränkte) Downloadquellen gibt bei denen man sich mit fertigen Blacklisten versorgen kann. Und wenn man mal was findet, dann kann man drauf wetten, dass es Plaintext ist. Damit kann der ISA aber nicht umgehen face-sad

Was brauchen wir?
Zuerst brauchen wir mal die Blacklisten von blacklist.com. Die sind sehr schön strukturiert, was sehr nützlich ist, wenn man nicht auf alles und jedes sondern nur bestimmte Themen filtern will. Außerdem brauchen wir in einem beliebigen Verzeichnis eine Ordnerstruktur die wie folgt aussieht
  • <irgeneinpfad>\ISA-Blacklist\templates
  • <irgeneinpfad>\ISA-Blacklist\bigblacklist

bcb2cf20e21b67caf0a18c821b6393d9

Während dem Download widmen wir uns dem ISA.
Wie schon angesprochen kann der leider nicht einfach Plaintext einlesen und verarbeiten sondern hätte gerne XML-Files. Und damit es nicht zu einfach wir will er auch noch ganz bestimmte ClassIDs da drin sehen. Wenn die nicht da sind weigert er sich zu importieren.
Also legen wir für jedes zu filternde Thema erstmal unter Domänennamensätze eine Liste an. Dabei geben wir uns keine große Mühe, weil wir die gleich exportieren und nur noch als Template für die zukünftig per Script erstellten Blacklist brauchen.

Also
  • rechte Maustaste auf Domänennamensätze und Neuer Domänennamensatz.../ anklicken
  • als Name die Kategoriebezeichnung aus den heruntergeladenen Blacklisten verwenden (bspw. porn, adult, drugs,...). Das ist wichtig, weil das Script später diese Namen benötigt
  • Domänennamen und Beschreibung geben wir keine ein.
  • MitOkspeichern
  • rechte Maustaste auf den gerade erzeugen Namenssatz undAuswahl exportieren...auswählen. Wenn nach dem Dateinamen gefragt wird geben wir widerum das Kürzel für die entsprechende Blacklist (porn, adult, drugs,...) ein
  • die einzelnen Schritte für jede gewünschte Blacklist wiederholen

b32ea8cc063acd451c1f0084dcbf77bc

Als Ergebnis haben wir dann irgendwann viele XML-Dateien, die in etwa so aussehen
<?xml version="1.0" encoding="UTF-8"?>  
<fpc4:Root xmlns:fpc4="http://schemas.microsoft.com/isa/config-4" xmlns:dt="urn:schemas-microsoft-com:datatypes" StorageName="FPC" StorageType="0">  
	<fpc4:Build dt:dt="string">5.0.5723.514</fpc4:Build>  
	<fpc4:Comment dt:dt="string"/>  
	<fpc4:Edition dt:dt="int">16</fpc4:Edition>  
	<fpc4:ExportItemClassCLSID dt:dt="string">{61A8568E-53C1-4D6D-BBD8-4F7150EB3093}</fpc4:ExportItemClassCLSID>  
	<fpc4:ExportItemScope dt:dt="int">0</fpc4:ExportItemScope>  
	<fpc4:ExportItemStorageName dt:dt="string">{4B02B25F-98C6-4873-8E7E-FF8246525961}</fpc4:ExportItemStorageName>  
	<fpc4:IsaXmlVersion dt:dt="string">5.30</fpc4:IsaXmlVersion>  
	<fpc4:OptionalData dt:dt="int">12</fpc4:OptionalData>  
	<fpc4:Upgrade dt:dt="boolean">0</fpc4:Upgrade>  
	<fpc4:Arrays StorageName="Arrays" StorageType="0">  
		<fpc4:Array StorageName="{22BF6710-D466-4CDA-8622-9197783C59BE}" StorageType="0">  
			<fpc4:Components dt:dt="int">-1</fpc4:Components>  
			<fpc4:DNSName dt:dt="string"/>  
			<fpc4:Name dt:dt="string"/>  
			<fpc4:RuleElements StorageName="RuleElements" StorageType="0">  
				<fpc4:DomainNameSets StorageName="DomainNameSets" StorageType="0">  
					<fpc4:DomainNameSet StorageName="{4B02B25F-98C6-4873-8E7E-FF8246525961}" StorageType="1">  
						<fpc4:DomainNameStrings>
						</fpc4:DomainNameStrings>
						<fpc4:Name dt:dt="string">porn</fpc4:Name>  
					</fpc4:DomainNameSet>
				</fpc4:DomainNameSets>
			</fpc4:RuleElements>
		</fpc4:Array>
	</fpc4:Arrays>
</fpc4:Root>
Diese Dateien dienen nachher als Templates für die automatische Erstellung der Blacklists und müssen unter
\templates\abgelegt werden.

Zwischenzeitlich sollte der Download der Blacklisten abgeschlossen sein. Wir entpacken die Datei in
\bigblacklist\und zwar so, dass darin ein Ordner namensblacklistsvorhanden ist und unterhalb dessen die einzelnen Listen.

Jetzt kommen wir zu meinem Script, dass die einzelnen Listen erzeugt:
'Quelle für die Blacklists ist http://urlblacklist.com/?sec=download  
'Damit dieses Script funktioniert müssen im ISA zuerst für jede Liste Vorlagen ohne Inhalt erstellt und danach exportiert werden.  
'Diese exportierten XML-Files bilden dann die Templates für die zu erstellenden Dateien.  
'Nach durchlaufen des Scripts werden die erstellten Dateien im ISA importiert und die Konfig übernommen.  

Set objExplorer = CreateObject("InternetExplorer.Application")  
objExplorer.TheaterMode = False
objExplorer.AddressBar = False
objExplorer.MenuBar = False
objExplorer.StatusBar = False
objExplorer.ToolBar = False
objExplorer.Resizable = False
objExplorer.Height = 480
objExplorer.Width = 640
objExplorer.Left = 100
objExplorer.Top = 100
objExplorer.Silent = False
objExplorer.Visible = True
objExplorer.Navigate "about:blank"  
objExplorer.document.writeln("<html>")  
objExplorer.document.writeln("<head>")  
objExplorer.document.writeln("<title></title>")  
objExplorer.document.writeln("</head>")  
objExplorer.document.writeln("<span style='font-family:Courier; font-size:10pt'>")  
Set fsObject = CreateObject("Scripting.FileSystemObject")  

'scriptpfad ermitteln  
strScriptPath = Replace(WScript.ScriptFullName ,WScript.ScriptName, vbNullString)
strTempFile = strScriptPath & "rule_temp.xml"  

'zu erstellende blacklist angeben  
strBlacklistName = inputbox ("Welche Blacklist soll erstellt werden?" ,"Blacklist erstellen","")  
strBlacklistName = lcase(strBlacklistName)
If strBlacklistName = "" Then  
  objExplorer.document.writeln("Es wurde keine zu erstellende Blacklist angegeben. Scriptverarbeitung wurde abgebrochen.<br><br>")  
  WScript.Quit
End If
If Not fsObject.FileExists(strScriptPath & "\templates\" & strBlacklistName & ".xml") Then  
  objExplorer.document.writeln("Es wurde kein passendes Template gefunden. Scriptverarbeitung wurde abgebrochen.<br><br>")  
  WScript.Quit
End If

'info ausgeben  
objExplorer.document.writeln("Die Verarbeitung wird nun gestartet. Je nach Größe der angegebenen Blacklist kann dieser Vorgang mehrere Minuten, in Ausnahmefällen bis zu einer Stunde, dauern. Ihr Arbeitsplatz wird in dieser Zeit wahrscheinlich stark ausgelastet sein.<br><br>")  
strTimerStart = int(timer())

'template öffnen und verarbeiten  
strTplSource = strScriptPath & "templates\" & strBlacklistName & ".xml"  
Set fsObject = CreateObject("Scripting.FileSystemObject")  
Set TplFile = fsObject.OpenTextFile(strTplSource, 1, false)
strTplFile = TplFile.ReadAll
strTplFile = replace(strTplFile,chr(13),"")  
arrTplFile = split(strTplFile,chr(10))
TplFile.Close

'ausgabeordner und datei erstellen  
strBlacklistFolder = strScriptPath & replace(date,".","-")  
strBlacklistFile = strBlacklistFolder & "\" & strBlacklistName & ".xml"  
If Not fsObject.FolderExists(strBlacklistFolder) Then
  fsObject.createfolder(strBlacklistFolder)
End If

'einleitungszeilen in ausgabedatei schreiben  
Set TgtFile = fsObject.OpenTextFile(strBlacklistFile, 2, true, 0)
For Count = 1 to 19
  TgtFile.Writeline arrTplFile(Count)
  if instr(arrTplFile(Count),"fpc4:DomainNameSet") > 0 then  
    TgtFile.Writeline "						<fpc4:Description dt:dt=" & chr(34) & "string" & chr(34) & ">Blacklist erstellt am " & date() & " um " & time() & " Uhr auf Basis der Blacklisten von http://urlblacklist.com/?sec=download</fpc4:Description>"  
  end if
Next

'quelldatei öffnen und verarbeiten  
strBlacklistSource = strScriptPath & "bigblacklist\blacklists\" & strBlacklistName & "\domains"  
Set SrcFile = fsObject.OpenTextFile(strBlacklistSource, 1, false)
strFileComplete = SrcFile.ReadAll
objExplorer.document.writeln(time() & ": Quelldatei wurde vollständig eingelesen<br>")  
arrFileComplete = split(strFileComplete,chr(10))
strLineCount = UBound(arrFileComplete)
objExplorer.document.writeln(time() & ": Quelldatei mit " & strLineCount & " Zeilen in Array eingelesen<br>")  
strTimerRun = timer() + 5
For Count = 0 to strLineCount - 1
  strIsaRule = "						  <fpc4:Str dt:dt=" & chr(34) & "string" & chr(34) & ">" & arrFileComplete(Count) & "</fpc4:Str>"  
  TgtFile.WriteLine strIsaRule
  if timer() > strTimerRun then
    objExplorer.document.writeln(time() & ": " & Count & "/" & strLineCount & "(" & int(Count / strLineCount * 100) & "%) Zeilen verarbeitet<br>")  
    strTimerRun = timer() + 10
  End If
Next

'einleitungszeilen in ausgabedatei schreiben  
For Count = 21 to 28
  TgtFile.Writeline arrTplFile(Count)
Next
TgtFile.Close

strTimerEnd = int(timer())

objExplorer.document.writeln("<br>Die Blacklist wurde unter " & chr(34) & strBlacklistFile & chr(34) & " erstellt und kann jetzt im ISA-Server importiert werden.<br>Die Liste umfasst " & Count & " Domains und die Verarbeitung dauerte " & strTimerEnd - strTimerStart & " Sekunden.<br>Script beendet.")  

Das speichern wir unter beliebigem Namen im Verzeichnis
ISA-Blacklistalso bspw.blacklist-erzeugen.vbs.
Das war an Vorarbeit vorerst alles. Wir können zur Tat schreiten und machen einen beherzten Doppelklick auf die Scriptdatei. Nach kurzer Zeit sollte ein Eingabefenster erscheinen in dem wir die zu erstellende Blacklist eingeben sollen; also bspw. einfach nur
ads.

5aae6256441100b38b5e5094e84f66d4

Je nach Rechenleistung unseres PCs/Servers können wir uns jetzt getrost zurücklehnen und den einen oder anderen Kaffee trinken. Für die adult-Liste braucht mein PC etwa 250 Sekunden; einer meiner DCs ist in knapp 15 Sekunden fertig.

d33ed62f2a7a503bdbc5290fff7d45fa

Im Ergebniss erhalten wir im Verzeichnis des aktuellen Datums unterhalb von
\ISA-Blacklist\eine XML-Datei die etwa so aussieht
<fpc4:Root xmlns:fpc4="http://schemas.microsoft.com/isa/config-4" xmlns:dt="urn:schemas-microsoft-com:datatypes" StorageName="FPC" StorageType="0">  
	<fpc4:Build dt:dt="string">5.0.5723.514</fpc4:Build>  
	<fpc4:Comment dt:dt="string"/>  
	<fpc4:Edition dt:dt="int">16</fpc4:Edition>  
	<fpc4:ExportItemClassCLSID dt:dt="string">{61A8568E-53C1-4D6D-BBD8-4F7150EB3093}</fpc4:ExportItemClassCLSID>  
	<fpc4:ExportItemScope dt:dt="int">0</fpc4:ExportItemScope>  
	<fpc4:ExportItemStorageName dt:dt="string">{B79A3EB0-A6DD-4F9C-A843-A5A95BA325B5}</fpc4:ExportItemStorageName>  
	<fpc4:IsaXmlVersion dt:dt="string">5.30</fpc4:IsaXmlVersion>  
	<fpc4:OptionalData dt:dt="int">12</fpc4:OptionalData>  
	<fpc4:Upgrade dt:dt="boolean">0</fpc4:Upgrade>  
	<fpc4:Arrays StorageName="Arrays" StorageType="0">  
		<fpc4:Array StorageName="{22BF6710-D466-4CDA-8622-9197783C59BE}" StorageType="0">  
			<fpc4:Components dt:dt="int">-1</fpc4:Components>  
			<fpc4:DNSName dt:dt="string"/>  
			<fpc4:Name dt:dt="string"/>  
			<fpc4:RuleElements StorageName="RuleElements" StorageType="0">  
				<fpc4:DomainNameSets StorageName="DomainNameSets" StorageType="0">  
						<fpc4:Description dt:dt="string">Blacklist erstellt am 09.08.2010 um 11:59:23 Uhr auf Basis der Blacklisten von http://urlblacklist.com/?sec=download</fpc4:Description>  
					<fpc4:DomainNameSet StorageName="{B79A3EB0-A6DD-4F9C-A843-A5A95BA325B5}" StorageType="1">  
						<fpc4:Description dt:dt="string">Blacklist erstellt am 09.08.2010 um 11:59:23 Uhr auf Basis der Blacklisten von http://urlblacklist.com/?sec=download</fpc4:Description>  
						<fpc4:DomainNameStrings>
						  <fpc4:Str dt:dt="string">02pmnzy5eo29bfk4.com</fpc4:Str>  
						  <fpc4:Str dt:dt="string">209.151.89.106</fpc4:Str>  
						  <fpc4:Str dt:dt="string">abetterinternet.com</fpc4:Str>  
						  <fpc4:Str dt:dt="string">accessoveloce.com</fpc4:Str>  
						  <fpc4:Str dt:dt="string">cellularmania.info</fpc4:Str>  
						  <fpc4:Str dt:dt="string">cliparts-bereich.de</fpc4:Str>  
						  <fpc4:Str dt:dt="string">dialxs.nl</fpc4:Str>  
						  <fpc4:Str dt:dt="string">directplugin.com</fpc4:Str>  
Ganz viele Zeilen raus geschnitten
						</fpc4:DomainNameStrings>
						<fpc4:Name dt:dt="string">dialers</fpc4:Name>  
					</fpc4:DomainNameSet>
				</fpc4:DomainNameSets>
			</fpc4:RuleElements>
		</fpc4:Array>
	</fpc4:Arrays>
</fpc4:Root>
Diese Datei importieren wir jetzt in den ISA in dem wir unter
Dömennamensätzerechts klicken undAlle importieren// auswählen. Danach will der ISA die Quelle wissen. An der Stelle geben wir die gerade eben erzeugte Datei an. Der ISA überprüft die Datei und sollte sie ohne zu meckern importieren.

279a91b325fbe795692504780e2b15d5

Danach öffnen wir den gerade importieren Namensatz mit Doppelklick. Wenn alles funktioniert hat sehen wir dort jetzt alle Domänen der Filterliste.
Das wiederholen wir für alle gewünschten Blacklists.

e7c35ec243a046e99df95d0243276fcc

Ganz zum Schluss nicht vergessen den ISA die neue Konfiguration übernehmen zu lassen. Je nach Rechenleistung des Servers trinken wir in dem Moment den Rest der Kanne Kaffee von vorhin. Auf meinem ISA (virtuell, 2 CPUs, 2 GB RAM) gehen da mehrere Minuten ins Land.

Natürlich müssen wir die Blacklisten auch noch an Firewallregeln binden. Wie das geht setze ich aber einfach mal als bekannt voraus.

Manuel

PS:
Wenn jetzt noch jemand eine Idee hat, wie man den ISA (vielleicht per Script) dazu bekommt regelmäßig und automatisch aktuelle Blacklisten zu importieren schreibe ich dass Script glatt auf komplette automatische Erstellung für geplanten Task um. Dann wäre das eine prima Fire&Forget-Lösung. Bisher hab ich dafür aber noch keine Lösung gefunden.

Content-Key: 148624

Url: https://administrator.de/contentid/148624

Printed on: April 16, 2024 at 08:04 o'clock

Member: Pjordorf
Pjordorf Aug 09, 2010 at 12:07:34 (UTC)
Goto Top
Hallo Manuel,

Klasse Beitrag. das hilft schon ungemein viel.

Peter
Member: nEmEsIs
nEmEsIs Aug 10, 2010 at 16:16:23 (UTC)
Goto Top
Hi

Also ich verwende schon des längerem diese Anleitung für den ISA 2006.

http://www.thiele.ch/index.php/blacklists-for-isa-2006

MFG Nemesis
Member: manuel-r
manuel-r Aug 11, 2010 at 06:43:49 (UTC)
Goto Top
Das Script kenne ich auch. Was mich persönlich daran gestört hat ist die Tatsache, dass nur eine riesengroße Blacklist erzeugt wird. Ich wollte es aber gerne in getrennte Listen verpacken, damit ich die Regeln granularer gestalten kann.

Bei uns ist es bspw. so, dass in der Pause privates Surfen erlaubt ist. Demzufolge ist es also sinnvoll etwa die Filterung von shopping, vacation, audio-video und socialnetworking in der entsprechenden Zeit abzuschalten. Gleichzeitig sollen bspw. porn und adult weiterhin gefiltert werden. Außderm gelten für Azubis andere Regeln als für "normale" Benutzer und die Geschäftsleitung hat nochmal andere Regeln. Denen kann ich ja etwa schlecht verbieten während der Arbeitszeit vielleicht Xing aufzurufen.
Zusätzlich kann ich beim Greifen einer Regel auf eine beliebige Webseite umleiten. Die User werden dann also je Regel auf eine Fehlerseite umgeleitet, die in dem Fall dann als Sperrgrund die entsprechende Liste aufführt. Das vermeidet in den meisten Fällen schon mal unnötige Anrufe im Support, weil der User im Klartext lesen kann "Du kommst hier net rein. Guggsdu Porno zu Hause."