O guia para principiantes do iptables, o firewall do Linux

Índice:

O guia para principiantes do iptables, o firewall do Linux
O guia para principiantes do iptables, o firewall do Linux

Vídeo: O guia para principiantes do iptables, o firewall do Linux

Vídeo: O guia para principiantes do iptables, o firewall do Linux
Vídeo: Como trocar o conector do cabo de rede RJ45 sem o alicate próprio - YouTube 2024, Novembro
Anonim
O Iptables é um utilitário de firewall extremamente flexível, construído para sistemas operacionais Linux. Não importa se você é um novato no Linux ou um administrador do sistema, provavelmente há uma maneira de o iptables ser de grande utilidade para você. Continue lendo enquanto mostramos como configurar o firewall Linux mais versátil.
O Iptables é um utilitário de firewall extremamente flexível, construído para sistemas operacionais Linux. Não importa se você é um novato no Linux ou um administrador do sistema, provavelmente há uma maneira de o iptables ser de grande utilidade para você. Continue lendo enquanto mostramos como configurar o firewall Linux mais versátil.

foto por ezioman.

Sobre o iptables

O iptables é um utilitário de firewall de linha de comando que usa cadeias de políticas para permitir ou bloquear o tráfego. Quando uma conexão tenta se estabelecer em seu sistema, o iptables procura por uma regra em sua lista para combiná-lo. Se não encontrar, recorre à ação predefinida.

O iptables quase sempre vem pré-instalado em qualquer distribuição Linux. Para atualizar / instalar, basta recuperar o pacote iptables:

sudo apt-get install iptables

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

Tipos de Correntes

O iptables usa três cadeias diferentes: entrada, encaminhamento e saída.

Entrada - Esta cadeia é usada para controlar o comportamento das conexões de entrada. Por exemplo, se um usuário tentar acessar o SSH no seu PC / servidor, o iptables tentará igualar o endereço IP e a porta a uma regra na cadeia de entrada.

frente - Essa cadeia é usada para conexões de entrada que não estão sendo entregues localmente. Pense em um roteador - os dados estão sempre sendo enviados para ele, mas raramente destinados ao próprio roteador; os dados são apenas encaminhados para o seu destino. A menos que você esteja fazendo algum tipo de roteamento, NAT ou qualquer outra coisa em seu sistema que exija encaminhamento, você nem usa essa cadeia.

Há uma maneira infalível de verificar se o sistema usa ou precisa da cadeia de encaminhamento.

iptables -L -v

A captura de tela acima é de um servidor em funcionamento há algumas semanas e não tem restrições quanto a conexões de entrada ou 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 de encaminhamento, 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.
A captura de tela acima é de um servidor em funcionamento há algumas semanas e não tem restrições quanto a conexões de entrada ou 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 de encaminhamento, 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.

Saída - Esta cadeia é usada para conexões de saída. Por exemplo, se você tentar fazer o ping em howtogeek.com, o iptables verificará sua cadeia de saída para ver quais são as regras relacionadas ao ping e ao howtogeek.com antes de tomar a decisão de permitir ou negar a tentativa de conexão.

A advertência

Embora o ping de um host externo pareça algo que só precisaria atravessar a cadeia de saída, lembre-se de 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, portanto as cadeias de entrada e saída precisarão ser configuradas corretamente. O SSH é um protocolo comum que as pessoas esquecem de permitir em ambas as cadeias.

Comportamento Padrão da Cadeia de Políticas

Antes de entrar e configurar regras específicas, decida qual será o comportamento padrão das três cadeias. Em outras palavras, o que você deseja que o iptables faça se a conexão não corresponder a nenhuma regra existente?

Para ver o que suas cadeias de políticas estão configuradas atualmente para fazer com o tráfego sem correspondência, execute o

iptables -L

comando.

Como você pode ver, também usamos o comando grep para nos fornecer uma saída mais limpa. Naquela captura de tela, nossas cadeias estão atualmente dispostas a aceitar tráfego.
Como você pode ver, também usamos o comando grep para nos fornecer uma saída mais limpa. Naquela captura de tela, nossas cadeias estão atualmente dispostas a aceitar tráfego.

Mais vezes, você quer que seu sistema aceite conexões por padrão. A menos que você tenha alterado as regras da cadeia de políticas anteriormente, essa configuração já deve estar 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, na regra de aceitação, você pode usar o iptables para negar endereços IP ou números de porta específicos, enquanto continua a aceitar todas as outras conexões. Nós vamos chegar a esses comandos em um minuto.

Se você preferir negar todas as conexões e especificar manualmente quais delas deseja permitir a conexão, altere a política padrão de suas cadeias para soltar. Fazer isso provavelmente seria útil apenas para servidores que contenham informações confidenciais e que sempre 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 determinado endereço IP ou porta. Neste guia, abordaremos as três respostas mais básicas e comumente usadas.

Aceitar - Permitir a conexão.

Solta - Largue a conexão, aja como se nunca tivesse acontecido. Isso é melhor se você não quiser que a fonte perceba que seu sistema existe.

Rejeitar - Não permita a conexão, mas devolva um erro. Isso é melhor se você não quiser que uma determinada fonte se conecte ao seu sistema, mas deseja que eles saibam que seu firewall os bloqueou.

A melhor maneira de mostrar a diferença entre essas 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:

Rejeitando a conexão:
Rejeitando a conexão:
Image
Image

Permitindo ou bloqueando conexões específicas

Com suas cadeias de políticas configuradas, você pode agora configurar o iptables para permitir ou bloquear endereços específicos, intervalos de endereços e portas. Nestes exemplos, vamos definir as conexões para

DROP

mas você pode mudá-los para

ACCEPT

ou

REJECT

dependendo de suas necessidades e de como você configurou suas cadeias de políticas.

Nota: Nestes exemplos, vamos usar

iptables -A

para adicionar regras à cadeia existente. O iptables começa no topo da sua lista e passa por cada regra até encontrar uma que corresponda. Se você precisar inserir uma regra acima da outra, poderá usar

iptables -I [chain] [number]

para especificar o número que deveria estar na lista.

Conexões de um único endereço IP

Este exemplo mostra como bloquear todas as conexões 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 no intervalo de rede 10.10.10.0/24. Você pode usar uma notação de máscara de rede ou 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 para uma porta específica

Este exemplo mostra como bloquear conexões SSH a partir 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. o

-p tcp

parte do código informa ao iptables que tipo de conexão o protocolo usa. Se você estava bloqueando um protocolo que usa UDP em vez de TCP,

-p udp

seria necessário em vez disso.

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 exigem 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. Mas, e se você quiser que o SSH que entra no seu sistema seja permitido? A adição de uma regra à cadeia de saída também permite tentativas de SSH de saída?

É aí que entram os estados de conexão, o que lhe dá a capacidade que você precisa para permitir a comunicação bidirecional, mas apenas permitir que conexões unidirecionais 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 permitidas. No entanto, o sistema tem permissão para enviar informações por 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 alterações que você fizer nas regras do iptables serão descartadas na próxima vez em que o serviço iptables for reiniciado, a menos que você execute um comando para salvar as alterações. Este comando pode diferir 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

Listar as regras do iptables atualmente configuradas:

iptables -L

Adicionando o

-v

opção lhe dará informações de pacote e byte, e adicionando

-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 flush.

iptables -F

Recomendado: