No post anterior Vimos a configuração do IPTables para funcionar como Firewall. Agora podemos ver como criar esses scripts para que as regras sejam executadas automaticamente quando o sistema for iniciado e também como podemos eliminar ou interromper essas regras por um momento.
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.
Neste caso, entre o roteador e nosso Linux haveria uma rede, e entre o Linux e a rede local haveria outra rede diferente. Isso significa que nosso roteador não teria que fazer NAT como tal, com um roteamento de tráfego simples, conforme explicado em post anterior Seria bom.
- 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 devemos criar o script dentro /etc/init.d/ e o serviço inicia automaticamente e podemos gerenciá-lo de uma forma mais confortável.
#! / 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:
Este último script que colocamos /etc/init.d/ com o nome firewall. Então, se quisermos gerenciar o firewall, podemos usar o comando /etc/init.d/ firewall start. Da mesma forma, podemos pará-lo ou ver o estado.
Agora vamos editar o arquivo /etc/rc.local e colocamos algo como: /etc/init.d/ firewall start para começar 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.
Se você estiver usando o Debian, há um pacote no repo (iptables-persistent) que faz exatamente isso, ele despeja as regras atuais em /etc/iptables/rules.v4 ou v6 dependendo do que você usa e as aplica a você quando você levanta o sistema.
Na prática, para limpar a configuração de um firewall iptables convencional (e usar NAT não seria assim do meu ponto de vista), na maioria dos casos, uma liberação de regra e redefinir as políticas padrão para ACEITAR seria suficiente.
Mas, em teoria, e até onde eu sei, além disso, você também precisa limpar as strings não padrão e redefinir os contadores. Ações a serem realizadas tendo em mente que além de "filtrar" existem outras tabelas, (é obrigatória a leitura do arquivo "/ proc / net / ip_tables_names" para isso).
A propósito, a ortodoxia diz que um firewall já deve estar ativo antes da rede. Não sei como isso é feito nos outros sistemas Linux, mas no tipo Debian o script pode ser adaptado e definido no diretório "/etc/network/if-pre-up.d/".
Bom firewall para todos. 😉
Olá, o post é muito bom. Eu li os 2 volumes inteiros.
Esperando pelo próximo 🙂
Uma pergunta da minha ignorância, continuamos com o iptables, mas para várias versões do kernel que temos nftables, já estou testando, as perguntas são, nftables é algo beta comparado ao iptables? O iptables continuará a ser usado por muito mais tempo?
Obrigado.
nftables inclui todas as funcionalidades de iptables, ip6tables, arptables e ebtables, todos usando uma nova infraestrutura em ambos os kernelspace e userspace, o que garante melhor desempenho e funcionalidade aprimorada. nftables irá substituir o iptables e todas as outras ferramentas mencionadas, mas não por enquanto, pelo menos até que haja um uso mais difundido de nftables como tal.
post muito bom, queria ler mais pois está muito bem explicado .. saudações obrigado grande contribuição
Olá! Muito bom tanto post.
Como contribuição, você pode adicionar ao final desta parte:
"Agora vamos editar o arquivo /etc/rc.local e colocar algo como: /etc/init.d/firestop start para iniciar o sistema."
Adicione isso a rc.local.
if [-x /etc/init.d/ firewall]; então
/etc/init.d/ firewall start
fi
O que significa que se "firewall" tiver permissões de execução, execute-o, se não tiver.
Se você quiser que o "firewall" não inicie, basta remover as permissões.
Por exemplo: chmod + x /etc/init.d/ firewall
para fazê-lo funcionar a cada inicialização ou ...
chmod -x /etc/init.d/ firewall
para desativá-lo completamente.
Saudações!