Delen via


Hostfirewall beheren met Azure IoT en OSConfig

Belangrijk

Versie 1.0.3 (gepubliceerd op 28 juni 2022) bevat belangrijke wijzigingen in ledennamen die van invloed kunnen zijn op bestaande gebruikers. Zie voor meer informatie: Member names transition from PascalCase to camelCase in version 1.0.3

Doelgroep

Dit artikel is ontworpen ter ondersteuning van personen die apparaten inrichten of beheren met Azure IoT. Als dat niet lijkt op u, kunt u overwegen om doelgroepen te bekijken voor osConfig-documentatie.

Firewalloverzicht

Wanneer osConfig op apparaten is geïnstalleerd, kunt u Azure IoT-services gebruiken om verschillende basistaken voor firewallbeheer uit te voeren. Bijvoorbeeld:

  • Controleren of de firewall actief is
  • Zorg ervoor dat bepaalde regels bestaan (maken als deze niet aanwezig zijn)
  • Zorg ervoor dat bepaalde regels niet bestaan (verwijderen indien gevonden)
  • De regels van veel geïmplementeerde apparaten vergelijken met een bekend goed apparaat
  • Standaardverkeersbeleid instellen voor binnenkomend en uitgaand verkeer

Firewallpictogram

Tip

Als u hier bent voor de objectmodelverwijzing, kunt u de use cases-voorbeelden overslaan naar de referentie-informatie

Voorbeelden van use cases

Deze voorbeelden kunnen fungeren als uitgangspunten om u aan te passen aan uw unieke omgeving.

Elk voorbeeld bevat stappen en schermopnamen voor het werken in de Azure Portal en voor het werken in bash met Azure CLI.

Elk voorbeeld bevat ook variaties voor één apparaat (bijvoorbeeld een scenario voor probleemoplossing) of voor veel apparaten (bijvoorbeeld een configuratie-inrichtings- of rapportagescenario).

Wat u kunt verwachten:

In de instructies voor één apparaat leest en schrijft u gerapporteerde en gewenste eigenschappen rechtstreeks in de OSConfig-dubbel voor een apparaat. In de instructies op schaal gebruikt u IoT Hub Configuraties (ook wel automatisch Apparaatbeheer of ADM genoemd) om gewenste eigenschappen naar veel tweelingen te pushen en IoT Hub query's (onafhankelijk of gekoppeld aan configuraties als metrische gegevens) te gebruiken om de resultaten van apparaten te bekijken.

Vereisten voor het uitproberen van de voorbeelden op livesystemen

Als u dit artikel gebruikt ter referentie, zijn er geen vereisten. U kunt de voorbeelden bekijken, eigenschappennamen kopiëren, enzovoort.

Als u de voorbeelden op livesystemen wilt uitproberen (aanbevolen), volgt u deze stappen:

  1. Een gratis Azure-account maken of een bestaand account gebruiken

  2. Ten minste één osConfig-apparaat verbinden met een IoT Hub

    Tip

    Als u eenvoudig een IoT Hub wilt maken met (virtuele) apparaten die zijn gekoppeld, raadpleegt u Binnen 5 minuten een OSConfig-testomgeving (met Azure IoT) maken

  3. Bereid u voor op de Azure Portal instructies of de Azure CLI-instructies in de voorbeelden:

Als u liever de Azure Portal gebruikt

  1. Meld u aan bij uw Azure Portal en open de overzichtspagina van uw IoT Hub met IoT Hub en apparaten in de Azure-portal

-OF- Als u liever Azure CLI gebruikt

  1. AANBEVOLEN: Gebruik Azure Cloud Shell als uw bash-omgeving door u aan te melden bij uw Azure-portal en vervolgens Azure Cloud Shell te starten in de bash-modus Schermopname die Cloud Shell opent vanuit Azure Portal
  2. ALTERNATIEF: Als u liever uw eigen bash-omgeving gebruikt in plaats van Cloud Shell, installeert u de Azure CLI en meldt u zich aan
  3. Zorg ervoor dat de Azure IoT-extensie gereed is door deze uit te voeren az extension add --name azure-iot

Voorbeeld A. Is de hostfirewall actief?

De state eigenschap onder properties.reported.Firewall geeft een indicatie op hoog niveau van of de hostfirewall actief is. Het geeft bijvoorbeeld aan of de hostfirewall-engine is ingeschakeld en er ten minste één regel bestaat in de tabel FILTER . Zie voor meer informatie over het state opnemen van mogelijke waarden: Naslaginformatie.

  1. Kies apparaten in de linkernavigatiebalk van uw IoT Hub. Als het apparaat naast OSConfig IoT Edge geïnstalleerd, kiest u IoT Edge in plaats van apparaten.

  2. Klik op een apparaat waarop OSConfig is geïnstalleerd.

  3. Klik onder Module-identiteiten op osconfig.

  4. Klik op Module Identity Twin en blader door de JSON naar properties.reported.Firewall.state. In het volgende schermopnamevoorbeeld ziet u dat state: enabled.

    Schermopname die laat zien hoe u de firewallstatus voor een specifiek apparaat controleert met behulp van de portal

Voorbeeld B. Een firewallregel maken

In dit voorbeeld wordt de desiredRules functie van de firewallmodule gebruikt. We maken een nieuwe regel waarmee uitgaand tcp-poort 443-verkeer van het apparaat naar subnet 10.9.9.0/24 wordt toegestaan.

Zie de verwijzing Firewall desiredRules verderop in dit artikel voor meer informatie over desiredRules het verwerken van meerdere regels en regelverwijdering.

  1. Gebruik Azure Portal, in de osconfig-moduledubbel van het apparaat, onder properties.desired het toevoegen of wijzigen van een Firewall en desiredRules knooppunten als volgt. Volgens JSON-standaarden moet u mogelijk een komma aan het einde toevoegen om te integreren met andere gewenste eigenschappen, indien aanwezig.

    "Firewall": {
       "desiredRules": [
          {
             "desiredState": "present",
             "action": "accept",
             "direction": "out",
             "protocol": "tcp",
             "destinationAddress": "10.9.9.0/24",
             "destinationPort": 443
          }
       ]
    }
    

    Schermopname die laat zien hoe u een firewallregel voor één apparaat configureert met behulp van de portal

  2. Na ongeveer 30 seconden kunt u controleren of de wijziging is aangebracht vanaf de moduledubbel zelf. Vernieuw de weergave van de moduledubbel en schuif vervolgens om te zoekenproperties, en reportedvervolgens stateFirewallconfigurationStatusen de .desiredRules

    Schermopname die laat zien hoe u de gerapporteerde eigenschappen voor firewallconfiguratie voor één apparaat leest met behulp van de portal

Voorbeeld C. Vergelijk de vingerafdruk van de firewallstatus van veel apparaten met een bekend goed apparaat

De fingerprint eigenschap maakt snelle vergelijkingen mogelijk voor het controleren van de naleving op schaal. U hoeft niet alle regels van alle apparaten op te halen en vervolgens een veel-op-veel-vergelijkingsstrategie te implementeren. U kunt eenvoudig controleren of de vingerafdruk hetzelfde is op alle apparaten die naar verwachting overeenkomen met elkaar. U kunt bijvoorbeeld vergelijken tussen geïmplementeerde apparaten en een bekend goed referentieapparaat.

In de voorbeelden met één apparaat halen we gewoon de waarde op, wat impliceert dat u een vergelijking buiten de band uitvoert. In de voorbeelden op schaal gebruiken we IoT Hub Group BY-operator van Query om commoniteit of afwijking in een vloot weer te geven.

Niet van toepassing, zie Azure Portal op schaal.

Referentiegegevens

Beschrijving van objectmodel

In deze sectie worden de eigenschappen van dubbels en het bijbehorende gedrag beschreven.

Tip

OsConfig-referentiedocumentatie is van toepassing op hulpprogramma's met of zonder DTDL (Digital Twin Definition Language) verbeterde perspectieven van het gegevensmodel. Zie voor meer informatie: About plain desired/reported views and DTDL enhanced views.

Gerapporteerde/alleen-lezen-eigenschappen van de firewall (voor rapportage- en controlescenario's)
  • Pad: properties.reported.Firewall (Firewall onderdeel, alleen-lezen eigenschappen)

  • Beschrijving: De status van de hostfirewall zoals gedetecteerd door de firewallmodule van OSConfig

  • Leden

    Naam Type Opmerkingen
    configurationStatus opsomming van tekenreeksen Vertegenwoordigt de fout-/successtatus van het bereiken van de gewenste configuratie. Alleen zinvolle, indien gewenste configuratie-eigenschappen, zoals desiredRules of desiredDefaultPolicies zijn ingesteld. Mogelijke waarde vanaf dit schrijven zijn success, failureen unknown.
    configurationStatusDetail tekenreeks Tekst die wordt geretourneerd door onderliggende API's of hulpprogramma's zoals iptables. Bedoeld om het eerste niveau van inzicht te bieden in ongeldige invoerparameters, enzovoort, zonder gebruik te maken van het combineren van diagnostische logboeken.
    defaultPolicies matrix met objecten (zie voorbeeldpayload) Vertegenwoordigt de standaardhanding van pakketten van de firewall die niet aan een specifieke regel voldoen. In de context van iptables wordt dit toegewezen aan het ketenbeleid voor de invoer- en uitvoerketens van de filtertabel. In andere firewall-engines zou dit zo nodig worden toegewezen aan het gedrag van de firewall-engine. Sommige firewall-engines hebben bijvoorbeeld geen expliciet beleidsbegrip en vallen inherent verkeer weg dat niet aan een regel voldoet.
    vingerafdruk tekenreeks • Ondoorzichtige vingerafdruk voor de lijst met alle firewallregels op het apparaat
    • Wordt gebruikt voor het vergelijken van grote aantallen apparaten met een bekend goed apparaat
    OPMERKING: In versies van OSConfig vóór de release van oktober 2022 stond deze eigenschap bekend als 'firewallFingerprint'
    staat opsomming van tekenreeksen Status op hoog niveau van de hostfirewall. Mogelijke waarden zijn:
    unknown
    enabled
    disabled
    De logica hiervoor enabled is dat er een actieve firewall-engine is gedetecteerd en met ten minste één regel in de tabel FILTER.
    OPMERKING: In versies van OSConfig vóór de release van oktober 2022 werd deze informatie weergegeven als 'firewallState' (in plaats van 'state') en waren de waarden gehele getallen (in plaats van tekenreeksen).
  • Voorbeeldpayload (zoals weergegeven in de sectie van properties.reported dubbel)

    "Firewall": {
        "configurationStatus": "success",
        "configurationStatusDetail": "",
        "defaultPolicies": [
           {
              "direction": "in",
              "action": "accept"
           },
           {
              "direction": "out",
              "action": "accept"
           }
        ],
        "fingerprint": "c30d8b8bf5327a8a325a686e0c4bbf73b1bd33a72779af88827e8ea256caddb2",
        "state": "enabled"
    }
    
Firewall desiredRules

Waarschuwing

Net als bij firewallbeheer moet u goed letten bij het blokkeren van verkeer. U hebt de mogelijkheid om te voorkomen dat het apparaat de verbinding met IoT Hub of andere beheerkanalen kan voortzetten. In dergelijke gevallen is lokale toegang tot het apparaat mogelijk nodig om te herstellen.

  • Pad: properties.desired.Firewall.desiredRules (Firewall onderdeel, desiredRules beschrijfbare eigenschap)

  • Beschrijving: Een geordende lijst met regeldescriptors. Elke regeldescriptor in de lijst kan de volgende leden hebben.

  • Leden van elke regeldescriptor

    Naam Type Opmerkingen
    desiredState opsomming van tekenreeksen Altijd vereist. Mogelijke waarden zijn present (betekent dat een dergelijke regel moet worden gemaakt als er nog geen overeenkomende regel bestaat) of absent (betekent dat een bestaande regel op het apparaat dat overeenkomt met deze descriptor moet worden verwijderd indien gevonden. Voor regeldescriptors waar desiredState: "present" en waar er al geen overeenkomende regel op het apparaat bestaat, wordt de nieuwe regel boven aan de lijst met regels op het apparaat toegevoegd. Voor context kunt u dit beschouwen als vergelijkbaar iptables -I met .iptables -A Als er meerdere desiredState: "present" regeldescriptors aanwezig desiredRuleszijn, worden deze toegevoegd zodat de volgorde behouden blijft. Met andere woorden, bovenaan desiredRules de lijst met regels op het apparaat, volgt de volgende regel desiredRules in de lijst met regels op het apparaat, zoals in de lijst met regels op het apparaat, enzovoort.
    action opsomming van tekenreeksen Altijd vereist. Mogelijke waarden zijn accept, dropof reject.
    richting opsomming van tekenreeksen Altijd vereist. Mogelijke waarden zijn in en out.
    protocol opsomming van tekenreeksen Altijd vereist. Mogelijke waarden zijn any, udp, tcpof icmp. Houd er rekening mee dat any elk verkeer (in plaats van 'tcp en udp' betekent, maar geen andere IP-protocollen). Regels dienovereenkomstig protocol: "any" mogen niet worden opgenomen sourcePort of destinationPort.
    sourceAddress tekenreeks IP-adres of CIDR-bereik. Als deze niet is opgegeven, komt de resulterende regel overeen met een adres
    sourcePort geheel getal Relevant voor regels waar protocol: tcp of protocol:udp. Mag niet worden opgenomen in andere regels. Hiermee geeft u het poortnummer op wanneer dit is opgenomen in een relevante regel. Wanneer deze niet is opgenomen, geeft u een regel aan die overeenkomt met een poortnummer.
    destinationAddress tekenreeks IP-adres of CIDR-bereik. Als deze niet is opgegeven, komt de resulterende regel overeen met een adres
    destinationPort geheel getal Relevant voor regels waar protocol: tcp of protocol:udp. Mag niet worden opgenomen in andere regels. Hiermee geeft u het poortnummer op wanneer dit is opgenomen in een relevante regel. Wanneer deze niet is opgenomen, geeft u een regel aan die overeenkomt met een poortnummer.

Voorbeeldpayload (zoals weergegeven in de sectie van properties.desired dubbel)

De volgende regels vertegenwoordigen de volgende beheerdersintenties:

  1. "Mijn on-premises beheersubnet is 10.9.9.0/24, dus ik wil dat apparaten binnenkomende poort 22 (SSH) daar toestaan"

  2. "Mijn oude beheersubnet was 10.24.24.0/24, dus als een apparaat nog steeds een regel heeft die poort 22 (SSH) van daaruit toestaat, wil ik dat een dergelijke regel wordt verwijderd"

  3. OPMERKING: De beheerder kan hier een derde regel gebruiken om SSH overal te blokkeren (met de bovenstaande uitzondering), maar in dit voorbeeld gebruiken we een standaardbeleid voor neerzetten, waardoor een dergelijke regel overbodig wordt. Zie het desiredDefaultPolicies voorbeeld verderop in dit document.

    "Firewall": {
       "desiredRules": [
          {
             "desiredState": "present",
             "action": "accept",
             "direction": "in",
             "protocol": "tcp",
             "sourceAddress": "10.9.9.0/24",
             "destinationPort": 22
          },
          {
             "desiredState": "absent",
             "action": "accept",
             "direction": "in",
             "protocol": "tcp",
             "sourceAddress": "10.24.24.0/24",
             "destinationPort": 22
          }
       ]
    }
    

Houd er rekening mee dat wanneer een beheerwerkstroom wordt ingesteld properties.desired.Firewall.desiredRules (onderdeel, desiredRules beschrijfbare eigenschap vanuit DTDL-perspectief), het apparaat de ontvangst van hetzelfde bevestigt door een desiredRules eigenschap toe te voegen aan properties.reported.FirewallFirewall . De waarde van die eigenschap bevat een kopie van de oorspronkelijke desiredRules nettolading, samen met een versienummer en statuscode. IoT Hub op basis van beheerwerkstromen kan dit gebruiken om te bepalen of de gewenste status het apparaat nog heeft bereikt. Dit is slechts een bevestiging. Als u wilt bepalen of het apparaat de gewenste status heeft bereikt, raadpleegt configurationStatus u ook en configurationStatusDetail.

Firewall desiredDefaultPolicies

Waarschuwing

Net als bij firewallbeheer moet u goed letten bij het blokkeren van verkeer. U hebt de mogelijkheid om te voorkomen dat het apparaat de verbinding met IoT Hub of andere beheerkanalen kan voortzetten. In dergelijke gevallen is lokale toegang tot het apparaat mogelijk nodig om te herstellen.

Voor standaardbeleid is met name een zorgvuldige toepassing vereist. Op iptables gebaseerde systemen zijn de beleidsregels bijvoorbeeld afzonderlijk van toepassing op elk pakket zonder bestaande verbindingen te overwegen. Met andere woorden, een standaardbeleid voor inkomend verkeer (naast het blokkeren van drop nieuwe binnenkomende verbindingen) blokkeert reacties van externe systemen. Hierdoor kan het apparaat niet uitgaand communiceren met behulp van protocollen (zoals TCP) waarvoor bidirectionele pakketstroom is vereist. Stel niet in actiondrop op het in beleid of out het beleid zonder eerst te controleren of er specifieke regels bestaan om alle vereiste pakketten in beide richtingen in te schakelen.

  • Pad: properties.desired.Firewall.desiredDefaultPolicies (Firewall onderdeel, desiredDefaultPolicies beschrijfbare eigenschap)

  • Beschrijving: Een matrix met twee items, waarin het gewenste standaardgedrag (accepteren of neerzetten) voor inkomend verkeer en voor uitgaand verkeer wordt beschreven.

  • Leden van elk item

    Naam Type Opmerkingen
    richting opsomming van tekenreeksen Mogelijke waarden zijn in of out
    action opsomming van tekenreeksen Altijd vereist. Mogelijke waarden zijn accept en drop.

Voorbeeldpayload (zoals weergegeven in de sectie van properties.desired dubbel)

"Firewall": {
   "desiredDefaultPolicies": [
      {"direction": "in", "action": "drop"},
      {"direction": "out", "action": "accept"}
   ]
}

Houd er rekening mee dat wanneer een beheerwerkstroom wordt ingesteld properties.desired.Firewall.desiredDefaultPolicies (onderdeel, desiredDefaultPolicies beschrijfbare eigenschap vanuit DTDL perspectief), het apparaat de ontvangst van hetzelfde bevestigt door een desiredDefaultPolicies eigenschap toe te voegen aan properties.reported.FirewallFirewall . De waarde van die eigenschap bevat een kopie van de oorspronkelijke nettolading, samen met een versienummer en statuscode. IoT Hub op basis van beheerwerkstromen kan dit gebruiken om te bepalen of de gewenste status het apparaat nog heeft bereikt. Dit is slechts een bevestiging van ontvangst en verwerking. Zie en configurationStatusDetailvoor meer informatie over het slagen of mislukken van het bereiken van de gewenste statusconfigurationStatus.

Aanvullende informatie en veelgestelde vragen

Hoe zit het met een use case 'alles vervangen'?

In bepaalde gevallen willen beheerders mogelijk absolute controle opleggen over de nettolijst met firewallregels van het apparaat. Stel je een intentie voor, zoals 'Alleen regels X, Y en Z moeten bestaan; Alle andere regels (bestaande op het apparaat of na verloop van tijd door andere processen) moeten periodiek worden verwijderd." Op dit moment biedt de OSConfig Firewall-module niet rechtstreeks voor deze use-case. Het verwijderen van specifieke regels kan worden uitgevoerd via desiredRules en "desiredState": "absent", maar er is geen expliciete vervangingsfunctionaliteit. Als u een dergelijke functie wilt toevoegen, raadpleegt u de uitbreidbaarheidsdocumentatie op https://github.com/Azure/azure-osconfig.

Volgende stappen

Zie voor een overzicht van OSConfig-scenario's en -mogelijkheden:

Zie voor specifieke praktische voorbeelden: