ufw
Ansible
possui um ufw
módulo para lidar com regras de firewall. No roles/common/tasks/main.yml
, que está incluído em todos os meus servidores, tenho (entre outras coisas):
- name: Install ufw
apt: name=ufw
- name: Allow ssh through firewall
ufw: proto=tcp port=22 rule=allow
- name: Set ufw policy
ufw: state=enabled direction=incoming policy=deny
Editar : É necessário permitir que o ssh antes de definir a política padrão "negue" (originalmente era o oposto acima), caso contrário, você pode ficar bloqueado entre as duas etapas.
Em cada função, tenho regras de firewall adicionais para essa função. Por exemplo, em roles/nginx/tasks/main.yml
, eu tenho (entre outras coisas) isso:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Portanto, todos os meus servidores nginx têm as portas 80 e 443 abertas.
Dessa forma, você pode criar qualquer configuração comum que desejar e adicionar regras adicionais em funções mais específicas.
ferm
Se você tem regras que ufw
não conseguem lidar, uma solução que acho que funcionaria bem é ferm
; ele pode fazer quase qualquer coisa, e você pode configurá-lo para ler as regras de diretórios tais como /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
, etc. Você poderia fazer o seu common
papel preparar o essencial ferm
de configuração e depois ter outros papéis soltar arquivos nestes diretórios.
iptables simples
Seu requisito de ansible
especificar regras além de regras especificadas de outra maneira é incomum e aparentemente desafia a maior parte do ponto de uso ansible
. Infelizmente, não vejo outra maneira de fazê-lo a não ser com planície iptables
, o que seria bastante feio. Aqui está um exemplo de abertura da porta 80 em roles/nginx/tasks/main.yml
(não testada):
- name: Check if port 80 is allowed
shell: iptables -L | grep -q "Allow http" && echo -n yes || echo -n no
register: check_allow_http
changed_when: no
always_run: yes
- name: Allow port 80
command: >
iptables -A INPUT -p tcp -m tcp --dport 80
-m comment --comment "Allow http" -j ACCEPT
when: check_allow_http.stdout == "no"
notify:
- Save iptables
Onde Save iptables
é um manipulador que é executado iptables-save
. Tudo o que foi dito acima é bastante entediante de escrever, mas pode ser apropriado, especialmente se você tiver apenas algumas regras para gerenciar ansible
.