hansdampf06
Goto Top

OPNsense per Script konfigurieren

Hallochen Gemeinde!

Gibt es eine Möglichkeit, die Konfiguration von OPNsense für die Firewall (Aliases, Gruppen und Regeln) per Script zu automatisieren?

Was ich in der Dokumentation gefunden habe, ist, das auf die Konfiguration per API über HTTPS zugegriffen werden kann. Dort ist beispielsweise das Kommando addItem für den Controller Alias benannt. Jedoch gibt es keine weitergehenden Angaben, wie über dieses Kommando ein neuer Alias angelegt werden kann. Dasselbe gilt für das Kommando import.

Wie komme ich hier weiter? Gibt es alternative Möglichkeiten, letztlich die config.xml gezielt zu "manipulieren"?

Vielen Dank für Euren Input und viele Grüße
HansDampf06

Content-Key: 8154438154

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

Printed on: April 27, 2024 at 19:04 o'clock

Member: Tezzla
Tezzla Aug 15, 2023 at 20:07:50 (UTC)
Goto Top
Moin,

ich mache das per Backup bzw Restore. Das Backup.xml lässt sich gut anpassen, zB Subnetze, Aliases, etc.
Dann einfach importieren.

VG
Member: colinardo
colinardo Aug 16, 2023 updated at 09:11:26 (UTC)
Goto Top
Servus,
Was ich in der Dokumentation gefunden habe, ist, das auf die Konfiguration per API über HTTPS zugegriffen werden kann. Dort ist beispielsweise das Kommando addItem für den Controller Alias benannt. Jedoch gibt es keine weitergehenden Angaben, wie über dieses Kommando ein neuer Alias angelegt werden kann. Dasselbe gilt für das Kommando import.
Du musst die Daten per JSON an die API übergeben, welche Daten benötigt werden steht in den XML-Models für die Aliase hier.

Powershell Beispiel um für Hosts einen Alias anzulegen (addItem)
# api key
$key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  
# api secret
$secret = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'  
# url 
$url = 'https://my.OPNsense.intern'  
# ------------------

# create basic auth info
$authinfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $key,$secret)))  

# create body for new alias
$body = @{
    alias = @{
        enabled = 1
        name = 'MyTestAlias'  
        type = 'host'  
        description = "Mein Test Alias"  
        content = "1.1.1.1`n2.2.2.2"  
    }
} | ConvertTo-Json -Depth 100 -Compress

# post request
Invoke-RestMethod -Uri "$url/api/firewall/alias/addItem" -Method Post -ContentType 'application/json' -Body $body -Headers @{Authorization = "Basic $authinfo"}  

Und hier noch ein Beispiel für die Import-Methode für Aliases (import)

# api key
$key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  
# api secret
$secret = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'  
# url 
$url = 'https://my.OPNsense.intern'  
# ------------------

# create basic auth info
$authinfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $key,$secret)))  

# create import body for multiple aliases
$body = [ordered]@{
    data = [ordered]@{
        aliases = [ordered]@{
            alias = [ordered]@{
                'MyTestAlias1' = [ordered]@{  
                    enabled = 1
                    name = 'MyTestAlias1'  
                    type = 'host'  
                    content = "1.1.1.1`n2.2.2.2"  
                    categories = ''  
                    description = "Mein Test Alias 1"  
                }
                'MyTestAlias2' = [ordered]@{  
                    enabled = 1
                    name = 'MyTestAlias2'  
                    type = 'host'  
                    content = "3.3.3.3`n4.4.4.4"  
                    categories = ''  
                    description = "Mein Test Alias 2"  
                }
            }
        }
    }
} | ConvertTo-Json -Depth 100 -Compress

Invoke-RestMethod -Uri "$url/api/firewall/alias/import" -Method Post -ContentType 'application/json' -Body $body -Headers @{Authorization = "Basic $authinfo"}  

screenshot

Grüße Uwe
Member: HansDampf06
HansDampf06 Aug 16, 2023 at 18:20:21 (UTC)
Goto Top
Besten Dank für Eure Rückäußerungen. Diese werden mir in jedem Fall bei der anstehenden Migration der Firewall-Policy-Regeln von der FortiGate zur OPNsense hilfreich sein. Ferner habe ich auch ein Automatisierungsskript für die FortiGate, welches Address-Objekte hinzufügt oder löscht sowie die zugehörigen Address-Group-Objekte anpasst. Dieses Skript soll auch auf die OPNsense portiert werden und dabei wird das gleichfalls hilfreich sein.

Bei den Aliasen habe ich für die Migration von der FortiGate (Address- und Service-Objekte) nach OPNsense noch eine (manuelle) Funktion in der Web-GUI gefunden. Die Liste Aliase kann nämlich per Button heruntergeladen werden. Zugleich kann auch eine Konfiguration per Button hochgeladen werden. Hierbei wirft OPNsense informative Fehlermeldungen aus, die für die Migration hilfreich sind.
Wird eine bereits verarbeitete Konfigurationsdatei nochmals hochgeladen, prüft OPNsense diese auf Veränderungen der vorhandenen Aliase, ohne irgendeinen Alias doppelt anzulegen. Auf diesem können etwaige Korrekturen der Migrationsdaten zügig eingespielt werden. Auf diese Weise konnte ich den größten Teil der betreffenden Objekte von der FortiGate (> 1000) schon einspielen. Dabei liegt/lag der größte Aufwand darin, die Konfigurationssyntax mit den Besonderheiten im Detail in ein JSON-konformes Format im Sinne der OPNsense zu überführen - das ging am besten / schnellsten mit Excel, um die benötigte Zeile pro Alias zu generieren und in die hochzuladende Konfigurationsdatei einzuspielen. Insgesamt zeigen sich an dieser Stelle bereits sehr deutlich die konzeptionellen Unterschiede bei der FortiGate und bei der OPNsense, was mich zugleich das Verständnis für die OPNsense vertiefen lässt.

Viele Grüße
HansDampf06