O Guia do Iniciante do iptables, o Firewall do Linux
O Iptables é um utilitário de firewall extremamente flexível, construído para sistemas operacionais Linux. Seja você um novato no Linux ou um administrador de sistema, provavelmente existe alguma 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 no seu sistema, o iptables procura por uma regra na sua lista para que ela corresponda. Se não encontrar um, recorre à ação padrão.
O iptables quase sempre vem pré-instalado em qualquer distribuição Linux. Para atualizar / instalar, basta recuperar o pacote iptables:
sudo apt-get instala 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, particularmente 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 - Essa cadeia é usada para controlar o comportamento de 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 requeira encaminhamento, você nem usará 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 que está em execução 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 - Essa cadeia é usada para conexões de saída. Por exemplo, se você tentar fazer ping no 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, você vai querer decidir o que você quer que o comportamento padrão das três cadeias seja. Em outras palavras, o que você quer 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 incomparável, execute o iptables -L
comando.
Como você pode ver, também usamos o comando grep para fornecer uma saída mais limpa. Naquela captura de tela, nossas cadeias estão atualmente acostumadas a aceitar tráfego.
Mais vezes do que não, você vai querer 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 SAÍDA ACEITAR
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 conectar, 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 apenas os mesmos endereços IP sejam 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, vamos repassar as três respostas mais básicas e comumente usadas.
Aceitar - Permitir a conexão.
Solta - Solte 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 quer que eles saibam que o seu firewall bloqueou-os.
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:
Soltando a conexão:
Rejeitando a conexão:
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 SOLTA
, mas você pode mudá-los para ACEITAR
ou REJEITAR
, dependendo de suas necessidades e 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 de 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 --dportar 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 diz ao iptables que tipo de conexão o protocolo usa. Se você estivesse bloqueando um protocolo que usa UDP em vez de TCP, -pddp
seria necessário.
Este exemplo mostra como bloquear conexões SSH de qualquer endereço IP.
iptables -A ENTRADA -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 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 --dporta ssh -s 10.10.10.10 -m state --state NOVO, ESTABELECIDO -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABELECIDO -j ACCEPT
Salvando alterações
As mudanças que você fizer 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. Este comando pode diferir dependendo da sua distribuição:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables salvar
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