@ECHO OFF
REM ############################################################################
REM # Get administrative privileges.                                           #
REM ############################################################################
CACLS "%SYSTEMROOT%\System32\config\SYSTEM" >NUL 2>&1
IF "%ERRORLEVEL%" NEQ "0" (GOTO Elevate) ELSE (GOTO Run)

:Elevate
    SET UAC_SCRIPT="%TEMP%\%RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%.VBS"
    ECHO Set UAC = CreateObject("Shell.Application")              > %UAC_SCRIPT%
    ECHO UAC.ShellExecute "%~dpnx0", "%*", "%~dp0", "runas", 1   >> %UAC_SCRIPT%
    CSCRIPT %UAC_SCRIPT%
    DEL /F /Q %UAC_SCRIPT%
    EXIT /B

:Run

REM ############################################################################
REM # Run this at startup and it acts like a sort of "iptables for Windows".   #
REM ############################################################################
NETSH ADVFIREWALL SET ALLPROFILES STATE ON
NETSH ADVFIREWALL FIREWALL DELETE RULE NAME=ALL

REM ####################################
REM # Inbound Rules:                   #
REM ####################################

REM TCP
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN" NAME="HTTP"  PROTOCOL="TCP" LOCALPORT="80,8000,8080,8100,8888"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN" NAME="IMAP"  PROTOCOL="TCP" LOCALPORT="143"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN" NAME="HTTPS" PROTOCOL="TCP" LOCALPORT="443"

REM UDP
REM NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN" NAME="DNS"  PROTOCOL="UDP" LOCALPORT="53"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN" NAME="DHCP" PROTOCOL="UDP" LOCALPORT="68" REMOTEPORT="67"

REM Test
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN"  NAME="Battle.net" PROTOCOL="TCP" LOCALPORT="1120"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="IN"  NAME="Battle.net" PROTOCOL="UDP" LOCALPORT="1120"

REM ####################################
REM # Outbound Rules:                  #
REM ####################################

REM TCP
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="SSH"             PROTOCOL="TCP" REMOTEPORT="22"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="SMTP"            PROTOCOL="TCP" REMOTEPORT="25"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="HTTP"            PROTOCOL="TCP" REMOTEPORT="80,8000,8080,8100,8888"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="VPN"             PROTOCOL="TCP" REMOTEPORT="89"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Video Streaming" PROTOCOL="TCP" REMOTEPORT="182,187,1935,8777"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="HTTPS"           PROTOCOL="TCP" REMOTEPORT="443"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Battle.net"      PROTOCOL="TCP" REMOTEPORT="1119,1120,3724"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Crypto Mining"   PROTOCOL="TCP" REMOTEPORT="3340,3737,3833,4233,4933,8383,8533"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="VNC"             PROTOCOL="TCP" REMOTEPORT="5800,5900"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Websocket"       PROTOCOL="TCP" REMOTEPORT="9001,8081"

REM UDP
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="DNS"           PROTOCOL="UDP"                  REMOTEPORT="53"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="DHCP"          PROTOCOL="UDP" LOCALPORT="68"   REMOTEPORT="67"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Multicast DNS" PROTOCOL="UDP"                  REMOTEPORT="5353"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Bittorrent"    PROTOCOL="UDP" LOCALPORT="6881"

REM Test
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Battle.net" PROTOCOL="UDP" LOCALPORT="1120"

REM Other Protocols
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Ping" PROTOCOL="ICMPv4"

REM ####################################
REM # Prompt suppression rules:        #
REM ####################################
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Apache"              PROGRAM="%~d0\warez\xampp\apache\bin\httpd.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Chromium"            PROGRAM="%~d0\warez\chromium\bin\chrome.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Microsoft Edge"      PROGRAM="%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="BLOCK" DIR="OUT" NAME="FileZilla"           PROGRAM="%~d0\warez\xampp\filezillaftp\filezillaserver.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="BLOCK" DIR="OUT" NAME="Mercury"             PROGRAM="%~d0\warez\xampp\mercurymail\mercury.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Microsoft Teams"     PROGRAM="%LOCALAPPDATA%\Microsoft\Teams\current\Teams.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="MobaXterm"           PROGRAM="%~d0\warez\mobaxterm\slash\bin\xwin_mobax.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="BLOCK" DIR="OUT" NAME="MySQL"               PROGRAM="%~d0\warez\xampp\mysql\bin\mysqld.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="node.js"             PROGRAM="%~d0\warez\nodejs\app\node.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="qBittorrent"         PROGRAM="%~d0\warez\qbittorrent\app\qbittorrent\qbittorrent.exe"
NETSH ADVFIREWALL FIREWALL ADD RULE ACTION="ALLOW" DIR="OUT" NAME="Epson Event Manager" PROGRAM="%ProgramFiles(x86)%\Epson Software\Event Manager\EEventManager.exe"


REM ####################################
REM # Privacy rules:                   #
REM ####################################
