
Apresentando o Programa de Certificação da Linux Foundation
Você se lembrará da Parte 1 – Sobre o Iptables desta série LFCE (Engenheiro Certificado pela Linux Foundation) que demos uma descrição básica do que é um firewall: um mecanismo para gerenciar pacotes que entram e saem da rede. Por “gerenciar” queremos dizer na verdade:
- Permitir ou impedir que certos pacotes entrem ou saiam de nossa rede.
- Encaminhar outros pacotes de um ponto da rede para outro.
com base em critérios predeterminados.
Neste artigo, discutiremos como implementar filtragem básica de pacotes e como configurar o firewall com o iptables, uma interface para o netfilter, que é um módulo nativo do kernel usado para firewall.
Por favor, note que firewall é um assunto vasto e este artigo não tem a intenção de ser um guia abrangente para entender tudo o que há para saber sobre isso, mas sim como um ponto de partida para um estudo mais aprofundado sobre este tópico. No entanto, revisitaremos o assunto na Parte 10 desta série quando explorarmos alguns casos de uso específicos de um firewall no Linux.
Você pode pensar em um firewall como um aeroporto internacional onde aviões de passageiros chegam e partem quase 24 horas por dia, 7 dias por semana. Com base em várias condições, como a validade do passaporte de uma pessoa, ou seu país de origem (para citar alguns exemplos), ele ou ela pode, ou não, ser autorizado a entrar ou sair de um determinado país.
Ao mesmo tempo, os oficiais do aeroporto podem instruir as pessoas a se moverem de um lugar do aeroporto para outro, se necessário, por exemplo, quando precisam passar pelos Serviços Aduaneiros.
Pode ser útil usar a analogia do aeroporto durante o restante deste tutorial. Apenas tenha em mente as seguintes relações à medida que avançamos:
- Pessoas = Pacotes
- Firewall = Aeroporto
- País #1 = Rede #1
- País #2 = Rede #2
- Regulamentos do aeroporto aplicados pelos oficiais = regras do firewall
Iptables – Os Conceitos Básicos
No nível mais baixo, é o próprio kernel que “decide” o que fazer com os pacotes com base em regras agrupadas em cadeias, ou “sentenças”. Essas cadeias definem quais ações devem ser tomadas quando um pacote corresponde aos critérios especificados por elas.
A primeira ação tomada pelo iptables consistirá em decidir o que fazer com um pacote:
- Aceitá-lo (deixá-lo passar para nossa rede)?
- Rejeitá-lo (impedir o acesso à nossa rede)?
- Encaminhá-lo (para outra cadeia)?
Apenas no caso de você estar se perguntando por que essa ferramenta é chamada de iptables, é porque essas cadeias são organizadas em tabelas, com a tabela de filtro sendo a mais conhecida e a que é usada para implementar a filtragem de pacotes com suas três cadeias padrão:
1. A cadeia INPUT lida com pacotes que entram na rede e que são destinados a programas locais.
2. A cadeia SAÍDA é usada para analisar pacotes originados na rede local, que devem ser enviados para o exterior.
3. A cadeia ENCAMINHAR processa os pacotes que devem ser encaminhados para outro destino (como no caso de um roteador).
Para cada uma dessas cadeias, há uma política padrão, que dita o que deve ser feito por padrão quando os pacotes não correspondem a nenhuma das regras na cadeia. Você pode visualizar as regras criadas para cada cadeia e a política padrão executando o seguinte comando:
# iptables -L
As políticas disponíveis são as seguintes:
- ACEITAR → permite a passagem do pacote. Qualquer pacote que não corresponda a nenhuma regra na cadeia é permitido na rede.
- DESCARTAR → descarta o pacote silenciosamente. Qualquer pacote que não corresponda a nenhuma regra na cadeia é impedido de entrar na rede.
- REJEITAR → rejeita o pacote e retorna uma mensagem informativa. Esta em particular não funciona como política padrão. Em vez disso, é destinada a complementar as regras de filtragem de pacotes.

Ao decidir qual política implementar, é necessário considerar os prós e contras de cada abordagem conforme explicado acima – observe que não há uma solução única para todos os casos.
Adicionando Regras
Para adicionar uma regra ao firewall, invoque o comando iptables da seguinte forma:
# iptables -A chain_name criteria -j target
onde,
- -A significa Anexar (anexar a regra atual ao final da cadeia).
- nome_da_cadeia é INPUT, OUTPUT ou FORWARD.
- Alvo é a ação, ou política, a ser aplicada neste caso (ACEITAR, REJEITAR ou DESCARTAR).
- Critério é o conjunto de condições contra as quais os pacotes devem ser examinados. É composto por pelo menos uma (provavelmente mais) das seguintes bandeiras. Opções dentro de colchetes, separadas por uma barra vertical, são equivalentes entre si. O restante representa interruptores opcionais:
[--protocol | -p] protocol: specifies the protocol involved in a rule. [--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated. [--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined. [--source | -s] address[/mask]: represents the source address or network/mask. [--destination | -d] address[/mask]: represents the destination address or network/mask. [--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID. [--in-interface | -i] interface: specifies the input interface of the packet. [--out-interface | -o] interface: the output interface. [--jump | -j] target: what to do when the packet matches the rule.
Nosso Ambiente de Teste
Vamos juntar tudo isso em 3 exemplos clássicos usando o seguinte ambiente de teste para os dois primeiros:
Firewall: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
Source: CentOS 7 Hostname: dev1.gabrielcanepa.com IP Address: 192.168.0.17
E isso para o último exemplo
NFSv4 server and firewall: Debian Wheezy 7.5 Hostname: debian IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
EXEMPLO 1: Analisando a diferença entre as políticas DESCARTAR e REJEITAR
Vamos definir uma política de DESCARTAR primeiro para pings de entrada para nosso firewall. Ou seja, pacotes icmp serão descartados silenciosamente.
# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Antes de prosseguir com a parte de REJEITAR, vamos limpar todas as regras da cadeia de ENTRADA para garantir que nossos pacotes serão testados por esta nova regra:
# iptables -F INPUT # iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

EXEMPLO 2: Desabilitando / reabilitando logins ssh de dev2 para dev1
Vamos lidar com a cadeia de SAÍDA pois estamos lidando com tráfego de saída:
# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

EXEMPLO 3: Permitindo / impedindo clientes NFS (de 192.168.0.0/24) de montar compartilhamentos NFS4
Execute os seguintes comandos no servidor / firewall NFSv4 para fechar as portas 2049 e 111 para todos os tipos de tráfego:
# iptables -F # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Agora vamos abrir essas portas e ver o que acontece.
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Como você pode ver, conseguimos montar o compartilhamento NFSv4 após abrir o tráfego.
Inserindo, Anexando e Excluindo Regras
Nas exemplos anteriores, mostramos como anexar regras às cadeias INPUT e OUTPUT. Se quisermos inseri-los em uma posição predefinida, devemos usar o interruptor -I (i maiúsculo) em vez disso.
Você precisa lembrar que as regras serão avaliadas uma após a outra, e a avaliação para (ou salta) quando uma política DROP ou ACCEPT é correspondida. Por esse motivo, você pode se encontrar na necessidade de mover regras para cima ou para baixo na lista de cadeias conforme necessário.
Vamos usar um exemplo trivial para demonstrar isso:

Vamos colocar a seguinte regra,
# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
na posição 2) na cadeia INPUT (movendo assim o anterior #2 como #3)

Usando a configuração acima, o tráfego será verificado para ver se está direcionado para a porta 80 antes de verificar a porta 2049.
Alternativamente, você pode excluir uma regra e alterar o destino das regras restantes para REJECT (usando o interruptor -R</diy16):
# iptables -D INPUT 1 # iptables -nL -v --line-numbers # iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Por último, mas não menos importante, você precisará lembrar que, para que as regras do firewall sejam persistentes, você precisará salvá-las em um arquivo e depois restaurá-las automaticamente durante a inicialização (usando o método preferido de sua escolha ou o disponível para sua distribuição).
Salvando regras do firewall:
# iptables-save > /etc/iptables/rules.v4 [On Ubuntu] # iptables-save > /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Restaurando regras:
# iptables-restore < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Aqui podemos ver um procedimento semelhante (salvando e restaurando regras do firewall manualmente) usando um arquivo fictício chamado iptables.dump em vez do padrão mostrado acima.
# iptables-save > iptables.dump

Para tornar essas alterações persistentes através das inicializações:
Ubuntu: Instale o pacote iptables-persistent, que carregará as regras salvas no arquivo /etc/iptables/rules.v4.
# apt-get install iptables-persistent
CentOS: Adicione as seguintes 2 linhas ao arquivo /etc/sysconfig/iptables-config.
IPTABLES_SAVE_ON_STOP="yes" IPTABLES_SAVE_ON_RESTART="yes"
OpenSUSE: Liste as portas permitidas, protocolos, endereços, e assim por diante (separados por vírgulas) no arquivo /etc/sysconfig/SuSEfirewall2.
Para mais informações, consulte o próprio arquivo, que está fortemente comentado.
Conclusão
Os exemplos fornecidos neste artigo, embora não cubram todos os recursos do iptables, servem para ilustrar como habilitar e desabilitar o tráfego de entrada ou saída.
Para aqueles que são fãs de firewall, tenham em mente que revisaremos esse tópico com aplicações mais específicas na Parte 10 desta série LFCE.
Sinta-se à vontade para me informar se tiver alguma dúvida ou comentário.
Source:
https://www.tecmint.com/configure-iptables-firewall/