Introdução Firewall Iptables – Começando

Firewall Iptables

Conceito de Firewall:

O firewall é usado basicamente como um meio de proteção. Dividindo a rede que se pretende deixar segura da rede não segura.
Geralmente um firewall é instalado na borta da rede, sendo a entrada e saida dos pacotes da mesma, fazendo a leitura de cada pacote e fazendo o controle do que pode passar para rede interna, ou dando o  redirecinamento correto, servindo de filtro.

O iptables é a ferramenta de firewall a nivel de pacotes do linux desde o kernel 2.4 substituindo o ipchains.
Ele se baseia nas regras e parametros passados para fazer a filtragem dos pacotes, ou seja, compara as regras com os pacotes.

Para termos uma segurança maior, incluindo um controle de navegação na rede interna, uma dupla muito usada e que combina muito bem, é a dupla Iptables + Squid. Squid é um proxy de navegação, mas essa solução falaremos em outra oportunidade

Tabelas:

Tabelas são os locais usados para armazenar as chains e conjunto de regras com uma determinada característica em comum. As tabelas podem ser referenciadas com a opção -t tabela e existem basicamente 4 tabelas disponíveis no iptables:
Tabela FILTER: possui cadeias INPUT, OUTPUT, FORWARD
Tabela NAT: possui cadeias PREROUTING, OUTPUT, POSTROUTING
Tabela MANGLE: cadeias PREROUTING, OUTPUT, POSTROUTING, INPUT, FORWARD
Tabela RAW: cadeias PREROUTING, OUTPUT

O que são chains?

As Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall.

INPUT: aplica regra aos pacotes que chegam ao servidor

OUTPUT: aplica regras aos pacotes de rede originados e que partem do servidor

FORWARD: aplica regras aos pacotes de rede roteados atraves do servidor (para outro servidor ou outra interface do mesmo servidor)

PREROUTING: altera pacotes de rede na hora que chegam e antes do roteamento

POSTROUTING: altera pacotes de rede após o roteamento. Usado para SNAT

Politicas, ações (targets):

ACCEPT: pacote permitido
DROP: descartar pacote
QUEUE: enviar o pacote ao userspace (codigo fora do kernel)
RETURN: descontinuar o processamento do pacote e aplicar a regra padrao a ele
REJECT: Descarta o pacote e envia feedback ao remetente
DNAT: Reescreve endereço de destino (NAT)
SNAT: Reescreve endereço de origem (NAT)
LOG: coloca no log informações sobre o pacte

Estrutura do comando:

Comando principal:

iptables subcomando chain parametro1 valor1 parametron valorn ação

Subcomandos:

-A cadeia – anexa a regra ao final da cadeia
-L [cadeia] lista as regras da cadeia, ou todas caso a cadeia nao seja especificada
-F [cadeia] apaga todas as regras na cadeia
-N cadeia – Lista todas as regras na cadeia
-P cadeia politica – configura a regra padrão da cadeia
-D cadeia linha – apaga uma regra em um posição na cadeia
-X [cadeia] excluiu uma cadeia vazia
-I cadeia linha – insere uma regra em uma posição na cadeia
-Z zera os contadores para todas as cadeias

Parametros, alguns:

-t tabela (filter é a padrao)
-j ação
-p protocolo (especifica o protocolo, icmp, tcp, udp, all)
-s IP (IP de origem do pacote)
-d IP (IP de destino do pacte)
-i interface (nome da interface de rede de entrada do pacote)
-o interface (nome da interface de rede de saida do pacote)
–sport portas (Portas de origem)
–dport portas (Portas de destino)
–syn (identifica nova requisição de conexao)
–icmp-type (tipo de mensagem icmp)

Checagem de estado dos pacotes (state match):

-m state –state OPCAO
NEW cria uma nova conexao
ESTABLISHED pacote que pertence a uma conexao existente
RELATED pacote relacionado mas que nao faz parte de uma conexao existente
INVALID pacote nao pode ser identificado (ex. falta memoria, erro ICMP de conexao nao conhecida)

Extensões:

Extensao TCP
–tcp-flags (ALL, SYN, ACK, FIN, etc)
–source-port ou –sport
–destination-port ou –dport

Extensao UDP
Mesmas opções do TCP

Extensao ICMP
–icmp-type

Outras extensoes
-m limit quando usado em LOG serve para limitar o numero de pacotes escritos durante um certo ponto
–limit valor

Arquivos de logs criados pelo iptables:

Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.

Exemplos:

Exibir todas as regras:

Verificar regras (padrão filter –line-numbers (Exibe linhas))

Verificar regras tabela nat

Criando uma regra, DROP em tudo que vai pra porta 123

Inserindo uma regra, -I por padrao insere a regra no final
# indicando a linha ja a regra para a posição referente

Substituindo uma regra, parametro -R
# Substitui a regra 1 (no caso do nosso exemplo)

Deletar regra, parametro -D
# remove linha 1

# apagar usando sintaxe, usar mesmo sintaxe com parametro -D

Bloquear porta específica
Sainte:

Entrante:

Ou múltiplas portas:

Manter registros de Log’s de pacotes bloqueados:

Os log’s são salvos em /var/log/messages.

Compartilhar internet, parametro ip_forward precisa ser 1, geralemte altera-se no arquivo “/proc/sys/net/ipv4/ip_forward”. Lembrando que a mudança não é permanente, a cada reinicialização deve-se alterar o parâmetro novamente ou quando criar um sript de firewall incluir o comando para alterar o arquivo com o cat.

Ip Masquarade

Encaminhamento de portas (Ip forwarding)
Tentando acessar pela interface wan

Reject
Descarta pacote e envia um retorno a quem enviou o pacote.

entre outras opções do –reject-with

Criar chain

Limpar regras

remover  Chain criada pelo usuario, parametro -X
zerar contador, parametro -Z

Alterar regra padrão, o ideal INPUT ser drop por padrão

Liberar servidor web
Liberar host especifico
Liberar ping (resposta liberada se output esta ACCEPT tbm)
Liberar respostas de ping para outras maquinas
Proteção contra Syn-flood:
Port scanner suspeito:
Ping da morte:
Salvando e restaurando as regras:

Proxy transparente

Fazer com que todas as conexões passem pelo proxy

Criar o arquivo:

Adicionar o código:

Permissao de execução

Cuide para que o firewall inicie automaticamente na próxima inicialialização:

Fonte