Na publicação anterior, vimos como configurar o IPTables para funcionar como um firewall. Agora, veremos como criar scripts para executar regras automaticamente quando o sistema for iniciado, e também como excluir ou interromper temporariamente essas regras.
Antes de fazer o script e mostrar como fica, vamos falar um pouco sobre o NAT e o conceito do que queremos fazer com este equipamento.
NAT e contexto do exemplo.
Quando falamos em NAT, podemos confundir com roteamento, já que ambos são responsáveis por conectar duas redes diferentes entre si. A diferença mesmo é que o roteamento é aplicado para ir de uma rede local para outra e essa outra rede pode se conectar a um roteador e sair para a Internet.
Por outro lado, quando falamos sobre NAT, falamos sobre o roteamento de pacotes de uma rede local ou privada para uma rede pública ou Internet. Ele faz isso mascarando os pacotes, colocando o IP público com o qual ele vai para a Internet. Em outras palavras, não precisamos de um roteador, porque o IP público pertence diretamente ao computador GNU / Linux.
Faremos isso com o slogan de que estamos usando nosso Linux como roteador / firewall para acessar a Internet a partir de uma rede local. Mas aqui podem aparecer dois cenários.
- Que o nosso Linux esteja entre o roteador da operadora e a rede local.
Nesse caso, haveria uma rede entre o roteador e nosso sistema Linux, e uma rede diferente entre o sistema Linux e a rede local. Isso significa que nosso roteador não precisaria realizar NAT propriamente dito; o roteamento de tráfego simples, conforme explicado na postagem anterior, seria suficiente.
- Que nosso Linux tenha uma interface conectada à rede local e através da outra interface receba diretamente um IP público com o qual navega.
Isso significa que nosso Linux deve fazer NAT para que os pacotes possam chegar à Internet.
Para os propósitos deste pequeno laboratório então, diremos que nosso Linux recebe um IP público diretamente e assim será capaz de testar os efeitos do NAT.
Para fazer o NAT, usamos a sintaxe
iptables -t nat -A POSTROUTING -O eth1 -j MASQUERADE
Onde eth1 é a interface onde recebemos o IP público, ou seja, onde vamos para a Internet.
Criação de script iptables
Suponha então que: 172.26.0.0 é nossa rede local e 81.2.3.4 é o IP público com o qual acessamos a Internet. (é um ip estático). Eu tenho as interfaces eth0 (rede local)
eth1 (rede pública).
Basicamente, consiste em criar um script que pode ser chamado de /etc/init.d/firestop (por exemplo). e a partir desse script podemos iniciar, parar ou verificar o status de nossa configuração, assim como fazemos com qualquer daemon do sistema.
Suponha que minhas regras IPTABLES SÃO:
#! / bin / bash # Firewall da minha casa. # Nome do arquivo / etc / firewall_on # Por Jlcmux Twitter: @Jlcmux # # Política básica. iptables -P INPOUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # #NAT para compartilhar Internet de eth0 para eth1 iptables -t nat -A POSTROUTING -O eth1 -j SNAT --to-source 81.2.3.4 # # Permitir conexões de entrada iniciadas por meu iptables -A FORWARD -m estado --state ESTABLISHED, RELACIONADO -j ACCEPT # # Tráfego de saída autorizado iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACEITAR iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ACEITAR
Explicação:
O script basicamente faz o seguinte:
- Primeiro restrinja toda a navegação, conexões e tráfego. (Políticas básicas de firewall)
- Em seguida, crie o NAT com o destino eth1. indicando que temos um ip público estático «81.2.3.4»
- Abre as portas necessárias para receber os pacotes de conexões iniciados por mim.
- Aceita tráfego de saída HTTP, HTTPS e DNS.
Se quisermos usar nosso equipamento para navegar, devemos repetir as linhas e mudar FORWARD para INPUT ou OUTPUT conforme apropriado.
Cancele o script.
Agora vamos criar um script que substitui todos os itens acima e deixa o computador limpo de tudo isso. (Para fins de teste ou queremos apenas desligar o firewall).
#! / bin / bash # Firewall da minha casa. # Nome do arquivo / etc / firewall_off # Por Jlcmux Twitter: @Jlcmux # # Excluindo regras de iptables -F # #Aplicando políticas padrão (todo o tráfego é aceito) iptables -P ENTRADA ACEITAR iptables -P SAÍDA ACEITAR iptables -P AVANÇAR ACEITAR
Automatizando.
Agora precisamos criar o script dentro de /etc/init.d/ para que o serviço inicie automaticamente e possamos gerenciá-lo com mais facilidade.
#! / bin / bash # Firewall da minha casa. # Nome do arquivo /etc/init.d/ firewall # Por Jlcmux Twitter: @Jlcmux caso $ 1 no início) / etc / firewall_on ;; parar) / etc / firewall_off ;; status) iptables -L ;; *) echo "Sintaxe errada. Valid = /etc/init.d/ firewall start | stop | status ;; esac
Explicação:
Colocamos este último script em /etc/init.d/ com o nome "firewall" . Então, se quisermos gerenciar o firewall, podemos usar o comando /etc/init.d/firewall start. Também podemos pará-lo ou verificar seu status da mesma maneira.
Agora vamos editar o arquivo /etc/rc.local e adicionar algo como: /etc/init.d/firewall start para que ele inicie com o sistema.
Pois bem. Essa e a segunda parte. Espero que traga algo para todos vocês. Na próxima, veremos Proxy e IDS.