30/09/2017

Como usar iptables, o firewall Linux


O iptables é um utilitário de firewall de linha de comando em Linux que usa políticas de acesso para permitir ou bloquear o tráfego. Quando uma conexão tenta estabelecer-se no seu sistema, o iptables procura uma regra na sua lista para combiná-la. Se não encontrar uma, ele recorre à ação padrão.Iptables quase sempre vem pré-instalado em qualquer distribuição Linux. Para atualizá-lo / instalar, basta digitar no terminal:

sudo apt-get install iptables

Existem alternativas GUI para iptables como o Firestarter, mas o iptables não é muito difícil se você souber  alguns comandos. Você tem que ser extremamente cuidadoso ao configurar as regras do iptables, especialmente se você está executando SSH em um servidor, porque um comando errado pode bloqueá-lo permanentemente até que seja corrigido manualmente na máquina física.


Tipos de Cadeias

Iptables usa três cadeias diferentes: input (entrada), forward (frente) e output (saída).
Input - Esta cadeia é usada para controlar o comportamento das conexões recebidas. Por exemplo, se um usuário tentar executar um SSH em seu PC / servidor, o iptables tentará combinar o endereço IP e a porta com uma regra na cadeia de input.
Forward - Esta cadeia é usada para conexões recebidas que na verdade não estão sendo entregues localmente. Pense em um roteador - os dados sempre estão sendo enviados para ele, mas raramente são destinados ao próprio roteador; Os dados são encaminhados para o alvo. A menos que você esteja fazendo algum tipo de roteamento, NATing ou algo mais no seu sistema que requer encaminhamento, você nem usará essa cadeia.
Existe uma maneira segura de verificar se o sistema usa ou precisa da cadeia forward.
     iptables -L -v

A captura de tela acima é de um servidor que está sendo executado por algumas semanas e não tem restrições sobre conexões de entrada ou de saída. Como você pode ver, a cadeia de entrada processou 11 GB de pacotes e a cadeia de saída processou 17 GB. A cadeia direta, por outro lado, não precisou processar um único pacote. Isso ocorre porque o servidor não está fazendo nenhum tipo de encaminhamento ou sendo usado como um dispositivo de passagem.
Output - Esta cadeia é usada para conexões de saída. Por exemplo, se você tentar fazer o ping num site, o iptables verificará sua cadeia de saída para ver quais são as regras relativas a ping e no site antes de tomar uma decisão para permitir ou negar a tentativa de conexão.


Ressalva

Mesmo que o ping de um host externo pareça algo que só precisaria percorrer a cadeia de saída, tenha em mente que para retornar os dados, a cadeia de entrada também será usada. Ao usar o iptables para bloquear seu sistema, lembre-se de que muitos protocolos exigirão comunicação bidirecional, de modo que as cadeias de entrada e saída precisarão ser configuradas corretamente. SSH é um protocolo comum que as pessoas esquecem de permitir em ambas as cadeias.


Comportamento padrão das políticas de cadeia

Antes de entrar e configurar regras específicas, você vai querer decidir o que deseja que o comportamento padrão das três cadeias seja. Em outras palavras, o que você deseja que o iptables faça se a conexão não corresponder a regras existentes?
Para ver o que suas políticas de cadeia estão atualmente configuradas para fazer com tráfego incomparável, execute o comando iptables -L.
Como você pode ver, também usamos o comando grep para nos dar uma saída mais limpa.
Na maioria das vezes, você quer que seu sistema aceite conexões por padrão. A menos que você tenha alterado as regras das políticas de cadeia anteriormente, essa configuração já deve ser configurada. De qualquer forma, aqui está o comando para aceitar conexões por padrão:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

Por padrão, você pode usar iptables para negar endereços IP ou números de porta específicos, enquanto continua a aceitar todas as outras conexões. Chegaremos a esses comandos em um minuto.
Se você preferir negar todas as conexões e especificar manualmente quais você deseja permitir a conexão, você deve alterar a política padrão de suas cadeias. Fazer isso provavelmente só seria útil para servidores que contenham informações confidenciais e apenas tenham os mesmos endereços IP conectados a eles.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP


Respostas específicas da conexão

Com suas políticas de cadeia padrão configuradas, você pode começar a adicionar regras ao iptables para que ele saiba o que fazer quando encontrar uma conexão de ou para um endereço IP ou porta específica. Neste guia, vamos examinar as três "respostas" mais básicas e comumente usadas.
Accept - Permitir a conexão.
Drop - cortar a conexão. Isto é melhor se você não quiser que a fonte perceba que seu sistema existe.
Reject - Não permitir a conexão, mas enviar de volta um erro. Isto é melhor se você não deseja que uma fonte específica se conecte ao seu sistema, mas quer que eles saibam que seu firewall os bloqueou.
A melhor maneira de mostrar a diferença entre estas três regras é mostrar o que parece quando um PC tenta fazer ping em uma máquina Linux com o iptables configurado para cada uma dessas configurações.

Permitindo a conexão:

Cortando a conexão:

Rejeitando a conexão:


Permitir ou bloquear conexões específicas

Com suas políticas de cadeias configuradas, agora você pode ajustar o iptables para permitir ou bloquear endereços específicos, intervalos de endereços e portas. Nestes exemplos, definiremos as conexões para DROP, mas você pode alternar para ACCEPT ou REJECT, dependendo de suas necessidades e como você configurou suas políticas de cadeia.
Nota: nestes exemplos, vamos usar o iptables -A para anexar regras à cadeia existente. O iptables começa no topo da lista e passa por cada regra até encontrar uma que corresponda. Se você precisar inserir uma regra acima de outra, você pode usar iptables -I [chain] [number] para especificar o número que deve estar na lista.
Conexões de um único endereço IP
Este exemplo mostra como bloquear todas as conexões a partir do endereço IP 10.10.10.10.

iptables-A INPUT -s 10.10.10.10 -j DROP

Conexões de um intervalo de endereços IP
Este exemplo mostra como bloquear todos os endereços IP na faixa de rede 10.10.10.0/24. Você pode usar uma máscara de rede ou uma notação de barra padrão para especificar o intervalo de endereços IP.

iptables-A INPUT -s 10.10.10.0/24 -j DROP

ou

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Conexões a uma porta específica
Este exemplo mostra como bloquear conexões SSH de 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Você pode substituir "ssh" por qualquer protocolo ou número de porta. A parte -p tcp do código informa ao iptables sobre o tipo de conexão que o protocolo usa. Se você estivesse bloqueando um protocolo que usa UDP em vez de TCP, então seria necessário -p udp.
Este exemplo mostra como bloquear conexões SSH de qualquer endereço IP.

iptables -A INPUT -p tcp --dport ssh -j DROP


Estados de conexão

Como mencionamos anteriormente, muitos protocolos vão exigir comunicação bidirecional. Por exemplo, se você quiser permitir conexões SSH ao seu sistema, as cadeias de entrada e saída precisarão de uma regra adicionada a elas.
Agora veja  como os estados de conexão entram, o que lhe dá a capacidade que você precisa para permitir a comunicação de duas vias, mas apenas permitir que as conexões de uma maneira sejam estabelecidas. Dê uma olhada neste exemplo, onde as conexões SSH FROM 10.10.10.10 são permitidas, mas as conexões SSH TO 10.10.10.10 não são. No entanto, o sistema está autorizado a enviar informações sobre SSH desde que a sessão já tenha sido estabelecida, o que torna possível a comunicação SSH entre esses dois hosts.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT


Salvando alterações

As mudanças que você faz nas regras do iptables serão descartadas na próxima vez que o serviço iptables for reiniciado a menos que você execute um comando para salvar as alterações. Esse comando pode variar dependendo da sua distribuição:
Ubuntu:

sudo / sbin / iptables-save

Red Hat / CentOS:

/ sbin / service iptables save

Ou

/etc/init.d/iptables save

Outros Comandos
Liste as regras do iptables atualmente configuradas:

iptables -L

Adicionando a opção -v irá dar-lhe informações de pacotes e bytes, e adicionar -n listará tudo numericamente. Em outras palavras - nomes de host, protocolos e redes são listados como números.
Para limpar todas as regras atualmente configuradas, você pode emitir o comando:

iptables -F 
🎓 Você gostaria de aprender mais e se tornar um profissional qualificado?
👉 Conheça o treinamento Programação em Java curso completo 


Share:

0 comentários:

Postar um comentário

Ebook Grátis

Tecnologia do Blogger.