Ich verwende eine Sophos SG330 an einer Schule. Ich will für alle Schüler nur in den Pausen youtube sperren. Hat jemand eine Idee?
This thread was automatically locked due to age.
Ich verwende eine Sophos SG330 an einer Schule. Ich will für alle Schüler nur in den Pausen youtube sperren. Hat jemand eine Idee?
Bei Web Protection geht es über die Richtlinie, da kann man ein Zeit-Ereignis einstellen. Dort die Pausenzeit bei Zeitereignis eintragen und entsprechend in der Richtlinie das erlauben, was erlaubt werden soll. Diese zeitlich beschränkte Richtlinie der bisherigen Richtlinie (die es verbietet) voranstellen.
Achtung: Die Web Protetion verbietet rein auf URL-Ebene, d.h. Webproxies usw. sollten gesperrt sein sonst kann man die Sperre leicht umgehen.
Die Application Control wäre besser zum sperren geeignet, dort kann man aber kein Zeit-Ereignis hinterlegen
-> Dort könnte man nur per Restful-API ein Scripting machen, was dann auf einem PC/Server per Taskplaner zu den Pausenzeiten läuft und z.B. eine vorgestellte Youtube erlauben Regel ein und nach Pause wieder aus schaltet. Das Scripting geht z.B. auch per Powershell (ich habe da bereits Scripte für Firewall-Regeln, NAT, WLAN...)
Gruß Steve
Voraussetzungen: Sophos Webadmin CA im Zertifikatsspeicher (für https benötigt)
Der User, welcher das API-Token hinterlegt bekommt benötigt Sophos Admin Rechte
Hier ein Powershell-Script welches VPN Site-Site an/aus schaltet - Für Firewall/NAT/AppControl/WLAN... muss man nur die entsprechenden REFs per API-Browser suchen und hier anpassen.
#festlegen des Zielpunktes auf der Sophos
$url = "fqdnsophos:4444/.../";
$ref = "REF_IpsSitZra";
#Anmeldetoken
$token = "hvAYIbZDirRjEVxhDJJNbHXHDIBWRCOH";
#Erzeugen der Anmeldeinformationen
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
$securePassword = ConvertTo-SecureString $token -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("token", $securePassword)
#Werte für Abfrage setzen
$contentType = "application/json";
$header = @{}
$header.Add("X-Restd-Err-Ack","last")
#Informationen holen
($aktuellerStatus = Invoke-RestMethod -Method Get -Uri ($url+$ref) -Credential $credential) | Out-Null
$erfolgreich = $false;
if (!$aktuellerStatus.status)
{
$neuerStatus = $true;
$erfolgreich = $true;
}
elseif ($aktuellerStatus.status)
{
$neuerStatus = $false;
$erfolgreich = $true;
}
else {Write-Output "Ungültiger Statuswert bei API(Get)-Abfrage"}
#neuen Status setzen
if($erfolgreich)
{
$data = @{
status = $neuerStatus;
};
$json = $data | ConvertTo-Json;
Try {
Invoke-RestMethod -Method Patch -Uri ($url+$ref) -Credential $credential -Headers $header -Body $json -ContentType $contentType | Out-Null
if($neuerStatus){Write-Output "VPN wurde eingeschaltet"}
else{Write-Output "VPN wurde ausgeschaltet"}
}
Catch{Write-Output "Fehler beim setzen (Patch) des neuen Statuswertes"}
}
Read-Host -Prompt "Enter-Taste zum Beenden drücken..."
Voraussetzungen: Sophos Webadmin CA im Zertifikatsspeicher (für https benötigt)
Der User, welcher das API-Token hinterlegt bekommt benötigt Sophos Admin Rechte
Hier ein Powershell-Script welches VPN Site-Site an/aus schaltet - Für Firewall/NAT/AppControl/WLAN... muss man nur die entsprechenden REFs per API-Browser suchen und hier anpassen.
#festlegen des Zielpunktes auf der Sophos
$url = "fqdnsophos:4444/.../";
$ref = "REF_IpsSitZra";
#Anmeldetoken
$token = "hvAYIbZDirRjEVxhDJJNbHXHDIBWRCOH";
#Erzeugen der Anmeldeinformationen
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
$securePassword = ConvertTo-SecureString $token -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("token", $securePassword)
#Werte für Abfrage setzen
$contentType = "application/json";
$header = @{}
$header.Add("X-Restd-Err-Ack","last")
#Informationen holen
($aktuellerStatus = Invoke-RestMethod -Method Get -Uri ($url+$ref) -Credential $credential) | Out-Null
$erfolgreich = $false;
if (!$aktuellerStatus.status)
{
$neuerStatus = $true;
$erfolgreich = $true;
}
elseif ($aktuellerStatus.status)
{
$neuerStatus = $false;
$erfolgreich = $true;
}
else {Write-Output "Ungültiger Statuswert bei API(Get)-Abfrage"}
#neuen Status setzen
if($erfolgreich)
{
$data = @{
status = $neuerStatus;
};
$json = $data | ConvertTo-Json;
Try {
Invoke-RestMethod -Method Patch -Uri ($url+$ref) -Credential $credential -Headers $header -Body $json -ContentType $contentType | Out-Null
if($neuerStatus){Write-Output "VPN wurde eingeschaltet"}
else{Write-Output "VPN wurde ausgeschaltet"}
}
Catch{Write-Output "Fehler beim setzen (Patch) des neuen Statuswertes"}
}
Read-Host -Prompt "Enter-Taste zum Beenden drücken..."
Hallo Steve,
(Sorry, my German-speaking brain isn't creating thoughts at the moment. [:(])
I haven't taken the time to dig into RestAPI, so I'm unclear on the reason to prefer this approach to simply using cron jobs.
If there's an AppCtrl rule named YouTube that blocks it, get the REF_ with the following. Let's assume we learned it was REF_AppRulYoutube.
cc get_object_by_name application_control rule 'YouTube'|grep \'ref
Assuming that 45-minute classes start at 7:45, 8:45, 9:45 and 10:45 Monday through Friday, I would block the time in between classes with:
45 7,8,9,10 * * 1,2,3,4,5 root /usr/local/bin/confd-client.plx change_object REF_AppRulYoutube status 0
30 7,8,9 * * 1,2,3,4,5 root /usr/local/bin/confd-client.plx change_object REF_AppRulYoutube status 1
What advantage does the API method that I'm not seeing? Thanks for your input!
MfG - Bob (Bitte auf Deutsch weiterhin.)