Skip to content

Commit

Permalink
tarefa/firewall (EticaAI/aguia-pescadora#34): MVP de modo DMZ simples
Browse files Browse the repository at this point in the history
  • Loading branch information
fititnt committed Jul 21, 2019
1 parent eff7f66 commit 22d8d19
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 5 deletions.
2 changes: 1 addition & 1 deletion tarefa/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ variáveis e então mantê-los privados.**

## Sobre licença de uso e autoria

[![Domínio Público](../img/public-domain.png)](UNLICENSE)
[![Domínio Público](../img/public-domain.png)](../UNLICENSE)

Exceto onde explicitado contrário, todas são de autoria da
[Etica.AI](https://etica.ai) e liberadas sob domínio publico. Citação de autoria
Expand Down
2 changes: 1 addition & 1 deletion tarefa/add-public-keys/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,4 @@ poderiam ficar em logs.

Na medida do possível segundo a lei, [Etica.AI](https://etica.ai)
renunciou a todos os direitos autorais e direitos conexos ou vizinhos a este
trabalho para o [Domínio Público](UNLICENSE).
trabalho para o [Domínio Público](../../UNLICENSE).
1 change: 1 addition & 0 deletions tarefa/firewall/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
hosts
hosts-cluster
25 changes: 24 additions & 1 deletion tarefa/firewall/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ a porta 22 SSH por padrão (porém irá limitar brute forces). Então _na pior d
hipóteses_ poderá abrir porta 22 que não estava bloqueada antes e/ou bloquear
outras portas mas não vai trancar um usuário de acessar o próprio servidor.

## Uso para 1 Host

```bash
# Caso esteja no diretório tarefa/firewall/, use:
ansible-playbook -i hosts firewall.yml --check
Expand All @@ -18,6 +20,27 @@ ansible-playbook -i inventory/1-node-example/inventory.ini tarefa/firewall/firew
ansible-playbook -i inventory/1-node-example/inventory.ini tarefa/firewall/firewall.yml
```

## Uso para um grupo de hosts

```bash
# Caso esteja no diretório tarefa/firewall/, use:
ansible-playbook -i hosts-cluster firewall.yml --check
ansible-playbook -i hosts-cluster firewall.yml
```
A seguir um asciinema com exemplo de uso

[![asciicast](https://asciinema.org/a/258426.svg)](https://asciinema.org/a/258426)

<!--
ansible-playbook -i hosts-cluster firewall.yml
-->
<!--
Para gravar asciinema
asciinema rec aguia-pescadora-tarefa-firewall--cluster-2019-07-21-09-21 --title="Águia Pescadora/Tarefa/Firewall, 'hosts-cluster' v2019-07-21-09-21" --idle-time-limit=10
-->

## Debug

### Acessando maquina remota
Expand Down Expand Up @@ -50,4 +73,4 @@ escaneamento completo.

Na medida do possível segundo a lei, [Etica.AI](https://etica.ai)
renunciou a todos os direitos autorais e direitos conexos ou vizinhos a este
trabalho para o [Domínio Público](UNLICENSE).
trabalho para o [Domínio Público](../../UNLICENSE).
29 changes: 27 additions & 2 deletions tarefa/firewall/firewall.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,47 @@
proto: tcp
comment: "[aguia-pescadora/firewall] :22 (SSH) tcp LIMIT"

## :80 (HTTP) tcp ALLOW IN * ______________________________________________________
## :80 (HTTP) tcp ALLOW IN * ___________________________________________________
- name: ":80 (HTTP) tcp ALLOW IN *"
ufw:
rule: allow
port: "80"
proto: tcp
comment: "[aguia-pescadora/firewall] :80 (HTTP) tcp ALLOW IN *"

## :443 (HTTPS) tcp ALLOW IN * ____________________________________________________
## :443 (HTTPS) tcp ALLOW IN * _________________________________________________
- name: ":443 (HTTPS) tcp ALLOW IN *"
ufw:
rule: allow
port: "443"
proto: tcp
comment: "[aguia-pescadora/firewall] :443 (HTTPS) tcp ALLOW IN *"

## Basic DMZ with firewall only ________________________________________________
- name: "cluster_dmz_ips (convert string to list)"
set_fact:
cluster_dmz_ips_list: "{{ cluster_dmz_ips.split(',') }}"
#other_fact: "{{ local_var * 2 }}"
#another_fact: "{{ some_registered_var.results | map(attribute='ansible_facts.some_fact') | list }}"
when: "cluster_dmz_ips is defined and cluster_dmz_ips != '' and cluster_dmz_ips != None"

- name: "cluster_dmz_ips (debug 1)"
debug: var=cluster_dmz_ips
when: "cluster_dmz_ips is defined"

- name: "cluster_dmz_ips (debug 2)"
debug: var=cluster_dmz_ips_list
when: "cluster_dmz_ips is defined"

## :* (DMZ) ALLOW IN * .........................................................
- name: "cluster_dmz_ips"
ufw:
rule: allow
src: '{{ item }}'
comment: "[aguia-pescadora/firewall] :* (DMZ) ALLOW IN *"
loop: "{{ cluster_dmz_ips_list }}"
when: "cluster_dmz_ips_list is defined"

## Enable UFW (default: deny all) ______________________________________________
- name: "Enable UFW (policy: deny)"
ufw:
Expand Down
16 changes: 16 additions & 0 deletions tarefa/firewall/hosts-cluster.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# hosts-cluster.dist

[cluster]
aguia-pescadora-delta.etica.ai
aguia-pescadora-echo.etica.ai
aguia-pescadora-foxtrot.etica.ai

[cluster:vars]
# IPs that should be have free access for each machine
cluster_dmz_ips="173.249.10.99,167.86.127.220,167.86.127.225"

# TODO: alertar usuário de que uma DMZ apenas com firewall ainda é menos segura
# que uma via VPN, em especial se a aplicação não usar algum tipo de
# de criptografia e autenticação e a rede entre as máquinas puder ser
# inspecionada por terceiros, como uma WiFi publica
# (fititnt, 2019-07-21 08:06 BRT)
1 change: 1 addition & 0 deletions tarefa/firewall/hosts.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
example.com

0 comments on commit 22d8d19

Please sign in to comment.