Estou tentando configurar uma solução flexível de gerenciamento do iptables com o SaltStack, mas acho mais difícil do que eu pensava que seria.
Meu principal requisito: poder ter um pilar no qual eu mantenha uma lista de IPs, que deve estar na lista de permissões para acesso SSH em todos os minions. Esta lista de IPs mudará naturalmente de vez em quando: alguns IPs são adicionados, alguns IPs são removidos. O problema que estou enfrentando é com os IPs removidos - quando eu os removo do arquivo principal, o SaltStack não remove a lista branca real dos minions.
A única solução que consegui encontrar foi criar uma nova chave chamada "removed-ips" e sempre que eu quisesse remover um IP, eu adicionaria lá. O segundo loop for, em seguida, irá removê-lo. Claro, esta é uma solução realmente desagradável, existe uma maneira melhor de fazer isso?
/srv/pillar/iptables-default.sls:
iptables-default:
whitelisted-ips:
- '55.55.55.55'
- '66.66.66.66'
- '77.77.77.77'
removed-ips:
- '88.88.88.88'
/srv/salt/iptables-default.sls:
{% for ip in salt['pillar.get']('iptables-default:whitelisted-ips') %}
Whitelist OSF IP {{ip}} for SSH access:
iptables.append:
- table: filter
- family: ipv4
- chain: INPUT
- jump: ACCEPT
- match: state
- connstate: NEW
- source: '{{ ip }}'
- dport: 22
- proto: tcp
- save: True
{% endfor %}
{% for ip in salt['pillar.get']('iptables-default:removed-ips') %}
Remove old IPs that are not needed anymore:
iptables.delete:
- table: filter
- family: ipv4
- chain: INPUT
- jump: ACCEPT
- match: state
- connstate: NEW
- source: {{ ip }}
- dport: 22
- proto: tcp
- save: True
{% endfor %}
Tags saltstack