Situação
O iptables nos fornece uma ferramenta poderosa para a construção de firewalls com máquinas linux.
Algumas vezes a geração e manutenção desses firewalls se torna complexa demais e – via de regra – os departamentos de TI tem pessoal de menos para a cada vez mais imensa tarefa.
A proposta
Um script que gere as instruções necessárias para construir seu firewall linux.
Como fazer
- Prepare uma pasta temporaria
$ mkdir /tmp/route-sentry $ cd /tmp
- Faça download do script (http://www.inovacaosistemas.com.br/downloads/testes/route-sentry.zip)
$ wget http://www.inovacaosistemas.com.br/downloads/testes/route-sentry.zip
- Descompacte na temp, altere os direitos e coloque na raiz
$ cd route-sentry $ unzip ../route-sentry.zip $ sudo chown root.root * $ sudo rsync -rv * /
- Modifique o /etc/firewall.ini
sudo nano /etc/firewall.ini
- Crie seu script de inicialização no /etc/meuFirewall
$ sudo nano /etc/meuFirewall
com as seguintes linhas
#!/bin/bash rsfirewall > /tmp/meuFirewall.ipt iptables-load /tmp/meuFirewall.ipt
- Altere os direitos do seu script
$ chmod +x /etc/meuFirewall - Acrescente ele no /etc/rc.local (ou onde sua distribuição gostar)
sudo vi /etc/rc.local
ficando assim:
... /etc/meuFirewall& ...
- Reinicie sua máquina
Como funciona
rsfirewall conta com a ajuda do /etc/firewall.ini para poder trabalhar.
Este arquivo .ini tem quatro sessões: allowed, redirections, nat, input
A) Em allowed você pode colocar aquelas máquinas que podem ser atingidas desde dentro da rede.Se é uma máquina interna que pode ser atingida desde outra máquina interna, então essas máquinas devem estar na lista internal.
internal=192.168.1.26, 192.168.1.57, 192.168.8.131, 192.168.8.132
Já se um local externo precisa ser alcançado desde a rede interna, o ip ou o domínio devem estar na lista external.
external=208.67.220.123,200.185.136.182,200.185.136.181,mail-attachment.googleusercontent.com
Lembre que não pode colocar a URL, só domínios ou IP. Se quer controlar URL, utilize um proxy.
B) Em redirections serão colocadas as regras de redirecionamento de entrada. Ou seja, o que fazer quando um porto é aberto para conexão desde o lado externo do firewall. Cada linha deve ter o número do porto externo, o ip interno e o porto interno que atenderá a requisição. Assim, se por exemplo, seu servidor externo vai abrir a porta 3838 para atender requisições RDP no porto 3389 do micro interno 192.168.3.4, então a linha deve ser ipn=3838:192.168.3.4:3389 onde n é um numero qualquer que não se repita na lista.
ip1=3838:192.168.3.4:3389
C) As regras de redirecionamento nat vão na sessão nat que permite fazer três coisas diferentes:
1) permitir que um micro ou rede navegue utilizando o protocolo nat livremente.
ip1=192.168.16.32 ip2=192.168.0.0/16
2) Permitir que um micro ou rede navegue para um outro ponto quando o porto desejado é um porto especifico
ip3=192.168.0/24:0/0:6071 ip4=192.168.11.23:200.152.40.98:5090
3) Permitir que um micro ou rede navegue diretamente para um outro micro ou rede especifico.
ip5=192.168.1.1:192.168.0.160 ip6=192.168.11.0/24:192.168.5.0/24
D) Finalmente, há sempre a necessidade de abrir algumas portas no próprio servidor para que os outros (da rede interna ou externa) tenham acesso. A liberação de entrada pode ser distinguido pela placa que está sendo usada na hora da petição assim como o porto.
Tudo o que chegar pela porta 8080 na placa eth1 está liberado
port1=eth1:8080
Tudo o que chegar por qualquer placa na porta 22 está liberado
port2=#:22
Um exemplo completo
Os exemplos citados acima, colocados no firewall.ini ficariam assim:
[allowed] internal=192.168.1.26, 192.168.1.57, 192.168.8.131, 192.168.8.132 external=208.67.220.123,200.185.136.182,200.185.136.181,mail-attachment.googleusercontent.com [redirections] ip1=3838:192.168.3.4:3389 [nat] ip1=192.168.16.32 ip2=192.168.0.0/16 ip3=192.168.0/24:0/0:6071 ip4=192.168.11.23:200.152.40.98:5090 ip5=192.168.1.1:192.168.0.160 ip6=192.168.11.0/24:192.168.5.0/24 [input] port1=eth1:8080 port2=#:22