Puppeteers Blog

Windowsien palomuurin hallinta Puppetilla

May 24, 2018 

Linuxissa palomuurina - tai tarkemmin pakettisuodattimena - käytetään netfilteriä, jota hallitaan yleensä iptables (IPv4) ja ip6tables (IPv6) komennoilla. Iptables-sääntöjen määritys Puppetissa onnistuu helpoiten puppetlabs/firewall -moduulilla. Tyypillinen käyttötapaus on portin avaaminen palomuuriin; tästä tyypillisenä esimerkkinä Puppet-Finland-projektin ::snmp::packetfilter -luokka, jossa avataan pääsy UDP-portiin 161 määritetyistä IPv4 ja IPv6-osoitteista.

Myös Windowsin palomuurisääntöjä voi muokata Puppetilla käyttämällä puppet/windows_firewall -moduulia. Kyseinen moduuli on melko yksinkertainen kääre "netsh advfirewall"-komennon ympärillä, mutta se hoitaa hommansa hyvin.

Linuxissa koko palomuurisäännöstö on helppo pitää ruodussa Puppetilla (ks. esim. puppetfinland/packetfilter moduuli), mutta Windowsissa on pitkälti tyytyminen sääntöjen kevyeen lisäämiseen ja muokkaamiseen. Tämä käy ilmeiseksi, kun listaa tuoreen Windows-koneen palomuurisäännöt:

PS> netsh advfirewall firewall show rule name="all"|more

Sääntöjä on valtava määrä ja niitä ovat luoneet ties mitkä sovellukset ja automatisoidut järjestelmät. Yllä oleva komento putkitetaan "more"-komennolle, jotta sääntöjä ehtisi ylipäätään lukea. Joka tapauksessa sääntöjen täydellinen hallinta Puppetilla olisi vähintäänkin haastavaa jos minkään ei haluttaisi rikkoutuvan. Tämä ei kuitenkaan mitenkään estä yksittäisten lisäsääntöjen luontia Puppetilla - alla hieman muokattu esimerkki puppetfinland/windows_snmp -moduulin palomuurisäännöistä:

 ::windows_firewall::exception { 'windows_snmp':
 ensure => 'present',
 direction => 'in',
 action => 'Allow',
 enabled => 'yes',
 protocol => 'UDP',
 local_port => '161',
 remote_ip => '10.50.10.15',
 display_name => 'SNMP-in from 10.50.10.15',
 description => "Allow SNMP connections",
 }

Display-name-parametrin oletusarvona on resurssin nimi ($title) ja siihen kannattaa lisätä säännöstä niitä parametreja, joiden voidaan olettaa muuttuvan, esimerkiksi remote_ip. Tämä siksi, että Puppet tajuaisi luoda uuden säännön, jos kyseinen parametri muuttuu.

Aivan kuten Linuxissakin pitää Puppetin luomia sääntöjä aika ajoin tarkistaa tai debugata. Puppetin luoman säännön saa esille antamalla name-parametriksi ::windows_firewall-resurssin parametrin display_name arvon:

PS> netsh advfirewall firewall show rule name="SNMP-in from 10.50.10.15"
 
 Rule Name: SNMP-in from 10.50.10.15
 ----------------------------------------------------------------------
 Enabled: Yes
 Direction: In
 Profiles: Domain,Private,Public
 Grouping:
 LocalIP: Any
 RemoteIP: 10.50.10.15/32
 Protocol: UDP
 LocalPort: 161
 RemotePort: Any
 Edge traversal: No
 Action: Allow
 Ok.

Mikäli Puppetin luomassa säännössä on jotakin vikaa, voidaan se poistaa helposti:

PS> netsh advfirewall firewall delete rule name="SNMP-in from 10.50.10.15"
Samuli Seppänen
Samuli Seppänen
Author archive
menucross-circle