WF MSC kontrollieren - kleines Projekt

windows
firewall

#1

Hi,

hab mich bissel mit der Windows Firewall beschäftigt, und ein kleines Tool erstellt.

MFClose.jar (6,1 KB)

Es gibt eigentlich nur zwei Möglichkeiten, um die Firewall zu steuern. Entweder die WFP und hardcore C, oder über das UI (es gibt dabei Vor- und Nachteile).

Was macht MFClose.jar?

Ein Verzeichnis blockieren:

  • Doppelklick MFClose.jar
  • es wird nach allen .exe in dem ausgewählten Verzeichnis gesucht
  • es wird eine .bat erstellt mit Firewall Regeln
  • schaut euch die .bat mit einem Texteditor an
  • wenn ihr zufrieden seid, startet die .bat als Administrator
  • Regeln zum Blockieren werden angelegt
  • die Regeln habn eine bestimmte vierstellige Nummer, merkt euch diese
  • wenn ihr die Regeln wieder entfernen möchtet, dann wf.msc aufrufen und Regeln entfernen

Ein Verzeichnis erlauben:

  • Doppelklick MFClose.jar
  • es wird nach allen .exe in dem ausgewählten Verzeichnis gesucht
  • es wird eine .bat erstellt mit Firewall Regeln
  • schaut euch die .bat mit einem Texteditor an
  • wenn ihr zufrieden seid, startet die .bat als Administrator
  • Regeln zum Erlauben werden angelegt
  • die Regeln habn eine bestimmte vierstellige Nummer, merkt euch diese
  • wenn ihr die Regeln wieder entfernen möchtet, dann wf.msc aufrufen und Regeln entfernen

Was passiert, wenn ich ein Verzeichnis sowohl erlaube als auch blockiere? Dann wird es blockiert.

Werden wirklich alle blockiert? Ja schon… - Wenn ihr alle außer die erlaubten blockieren möchtet, dann wf.msc aufrufen, “Windows Defender Firewall-Eigenschaften”, Profil auswählen, “Ausgehende Verbindungen: Blockieren”, OK. - Aber was ist der Nachteil daran? Bei eingehenden Verbindungen ohne Regel fragt er, bei ausgehenden nicht.

Viel Spaß, Feedback gern, und (ich weiß nicht, ob ich das schreiben muss), ich kann natürlich keine Garantie für Schäden am System übernehmen.

Noch etwas? Firewall Regeln werden in der Registry hinterlegt, und können in ein .WFW file exportiert werden, aber nicht editiert werden. :frowning:

Noch etwas? Kann man nicht einen Kontextmenü-Eintrag bei Verzeichnissen hinzufügen? Ich fürchte, das wird schwierig werden…


Hashwert kürzen respektive verkleinern
#2

Moin,

ich veröffentliche Version 2 des MFClose:

MFClose.jar (6,0 KB)

Was hat sich geändert?:

Diese vierstellige Nummer ist jetzt ein eindeutiger fünfstelliger Hash (+ 0 als Präfix), z. B.:

0-123 (Hashwert -123) oder
00654 (Hashwert +654) usw.

anhand des von euch gewählten Pfads.

Quelltext
package mfclose;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFileChooser;

public class MFClose
{
  static ArrayList<File> files = new ArrayList();
  
  public static void main(String[] args)
    throws IOException, InterruptedException
  {
    JFileChooser jfc = new JFileChooser("C:\\Program Files\\Mozilla Firefox");
    jfc.setFileSelectionMode(1);
    jfc.setMultiSelectionEnabled(false);
    if (jfc.showOpenDialog(null) == 0)
    {
      File file = jfc.getSelectedFile();
      if ((file != null) && (file.isDirectory()))
      {
        Files.walkFileTree(file.toPath(), new SimpleFileVisitor()
        {
          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
            throws IOException
          {
            File toFile = file.toFile();
            if ((toFile.isFile()) && (toFile.getName().endsWith(".exe"))) {
              MFClose.files.add(toFile);
            }
            return FileVisitResult.CONTINUE;
          }
        });
        int index = file.hashCode() % 1000;
        String form = String.format("0%04d", new Object[] { Integer.valueOf(index) });
        ArrayList<String> blocks = new ArrayList();
        ArrayList<String> allows = new ArrayList();
        for (Iterator localIterator = files.iterator(); localIterator.hasNext();)
        {
          f = (File)localIterator.next();
          name = f.getName();
          blocks.add("powershell.exe -Command New-NetFirewallRule -DisplayName '" + form + "_" + name + "_In_Block' -Direction Inbound -Program '" + f.getPath() + "' -Action Block");
          blocks.add("powershell.exe -Command New-NetFirewallRule -DisplayName '" + form + "_" + name + "_Out_Block' -Direction Outbound -Program '" + f.getPath() + "' -Action Block");
          allows.add("powershell.exe -Command New-NetFirewallRule -DisplayName '" + form + "_" + name + "_In_Allow' -Direction Inbound -Program '" + f.getPath() + "' -Action Allow");
          allows.add("powershell.exe -Command New-NetFirewallRule -DisplayName '" + form + "_" + name + "_Out_Allow' -Direction Outbound -Program '" + f.getPath() + "' -Action Allow");
        }
        String name;
        PrintWriter pw = new PrintWriter(form + "_" + file.getName() + "_Block.bat");File f = null;
        try
        {
          for (String block : blocks) {
            pw.println(block);
          }
          pw.println("PAUSE");
        }
        catch (Throwable localThrowable1)
        {
          f = localThrowable1;throw localThrowable1;
        }
        finally
        {
          if (pw != null) {
            if (f != null) {
              try
              {
                pw.close();
              }
              catch (Throwable localThrowable2)
              {
                f.addSuppressed(localThrowable2);
              }
            } else {
              pw.close();
            }
          }
        }
        PrintWriter pw = new PrintWriter(form + "_" + file.getName() + "_Allow.bat");f = null;
        try
        {
          for (String allow : allows) {
            pw.println(allow);
          }
          pw.println("PAUSE");
        }
        catch (Throwable localThrowable4)
        {
          f = localThrowable4;throw localThrowable4;
        }
        finally
        {
          if (pw != null) {
            if (f != null) {
              try
              {
                pw.close();
              }
              catch (Throwable localThrowable5)
              {
                f.addSuppressed(localThrowable5);
              }
            } else {
              pw.close();
            }
          }
        }
      }
    }
  }
}

Weiterentwicklung möglich nur, wenn ihr mich fragt.

Feedback natürlich gern…