Introdução Firewall Iptables - Começando
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:
|
|