Articles

Linux iptables Firewall Simplified Examples

In the previous post, we talked about how to Secure Linux Server Using Hardening Best Practices. Algumas pessoas me perguntaram sobre a seção de firewall, que foi uma breve introdução à firewall iptables. Hoje vamos discutir em detalhe a firewall Linux iptables e como proteger o tráfego do seu servidor usando essa firewall incrível.

Índice

Iptables em CentOS 7

Se estiver a utilizar CentOS 7, irá descobrir que o firewalld gere iptables, por isso, se quiser voltar aos iptables, terá de parar e mascarar o firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

em Seguida, instalar o iptables serviço e habilitá-lo a:

$ yum install iptables-services$ systemctl enable iptables

em Seguida, você pode iniciá-lo:

$ systemctl start iptables

Como o Linux funciona o firewall

Iptables firewall funções estão incorporadas no Netfilter quadro que está disponível no kernel do Linux para filtragem de pacotes.

Firewall types

Existem dois tipos de firewalls:

firewall apátrida processa cada pacote por si só, significa que ele não vê outros pacotes da mesma conexão.este tipo de firewall preocupa-se com todos os pacotes que passam por ele, por isso conhece o estado da ligação. Dá mais controlo sobre o trânsito.

Netfilter contém tabelas. Estas tabelas contêm cadeias, e cadeias contêm regras individuais.

Se um pacote corresponder a qualquer regra, os iptables irão aplicar a ação da regra a esse pacote.as acções podem ser: aceitar, rejeitar, ignorar ou passar o pacote para outras regras para mais processamento.

Netfilter pode processar o tráfego de entrada ou saída usando o endereço IP e o número do Porto.

o comando iptables gere e configura o Netfilter.

Antes de começarmos a escrever comandos de firewall, precisamos entender um pouco a estrutura de firewall para que possamos escrever regras de firewall facilmente.

iptables firewall tables

Netfilter has three tables that can carry rules for processing.

a tabela de filtros iptables é a tabela principal para o processamento do tráfego.a segunda é a tabela nat, que trata das regras NAT.

a terceira tabela é a tabela de mangle para pacotes de mangling.

Cadeias de tabelas

cada tabela dos quadros acima mencionados contém cadeias; estas cadeias são o recipiente das Regras dos iptables.

a tabela de filtros contém cadeias de entrada, entrada e saída. Você pode criar uma cadeia personalizada para salvar suas regras sobre ela.

Se um pacote está chegando ao host, iptables irá processá-lo pelas Regras da cadeia de entrada.

Se o pacote estiver indo para outro host, isso significa que as regras da cadeia de saída irá processá-lo.

os iptables usam a cadeia dianteira para manusear pacotes que acederam ao hospedeiro mas estão destinados a outro hospedeiro.

Política de cadeia

cada cadeia na tabela de filtros tem uma política. A política é a ação padrão que os iptables tomam.

a política pode ser DROP, REJECT e ACCEPT.

a Política de aceitação permite que os pacotes passem pela firewall. A Política de entrega deixa cair um pacote sem informar o cliente. A Política de rejeição também larga o pacote e informa o remetente.

de uma perspectiva de segurança, você deve largar todos os pacotes que vêm para a máquina e aceitar apenas os pacotes que vêm de fontes confiáveis.

Adicionar regras de iptables

Você pode adicionar uma nova regra usando o comando iptables como este:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Vamos quebrar esse comando em pedaços para que possamos entender tudo sobre ele.

O-A significa que estamos adicionando uma nova regra. Por omissão, o iptables adiciona todas as regras novas à tabela de filtros, a menos que indique outra tabela.

a bandeira-i especifica o dispositivo que irá aplicar a regra. Se você não especificar um dispositivo, iptables irá aplicar a regra para todo o tráfego de entrada, independentemente dos dispositivos.

a bandeira-p especifica o protocolo do pacote que você deseja processar, que é TCP no nosso caso.

a bandeira-dport especifica o porto de destino, que é 80.

O-D especifica o endereço IP de destino, que é 1.2.3.4. Se não for especificado nenhum endereço IP de destino, a regra aplicar-se-á a todo o tráfego recebido no eth1, independentemente do endereço IP.

O-j especifica a ação ou a ação de salto para fazer. Aqui estamos aceitando os pacotes usando a Política accept.

a regra acima permite o tráfego HTTP de entrada, que está na porta 80.

E permitir o tráfego de saída?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

pode usar a opção-A para adicionar regras à cadeia de saída.

a bandeira-o é usada para o dispositivo usado para o tráfego de saída.

A bandeira-sport especifica o porto de origem.

pode usar o nome do serviço como http ou https em vez do número de Porto numérico no sport ou dport. Todos os nomes dos serviços estão no ficheiro / etc / services.

Você deve usar o nome do serviço em vez de um número de porta, o que torna as regras de leitura mais fáceis.

iptables rules order

The iptables places new rules at the end of the chain. Você pode adicioná-lo ao topo usando-i opção.

A sequência das regras importa como você verá agora. Pode inserir as suas regras exactamente onde quiser usando a bandeira I.

Olhe para as seguintes regras para entender como regras ordenando assuntos:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

a primeira regra Aceita todo o tráfego UDP vem para eth1, e o número 3 é a ordem das regras.

A segunda regra diminui o tráfego que entra na porta 80.

a primeira regra irá aceitar todo o tráfego, em seguida, a segunda regra que deve parar o tráfego não fará nada, uma vez que iptables passa o tráfego na primeira regra.as suas regras devem fazer sentido, uma vez que a ordem das regras na cadeia é importante.

Lista de regras do iptables

Você pode listar as regras de uma chain usando o flag-L:

$ iptables -L INPUT

Você pode mostrar os números de linha para as regras de uso de linha-números:

$ iptables -L INPUT --line-numbers

A lista mostra os nomes dos serviços. Poderá mostrar os números dos portos em alternativa com a opção-n:

$ iptables -L INPUT -n --line-numbers

a regra acima tornará a listagem mais rápida, pois impede que iptabs de resolução de DNS e pesquisas de serviço.

Você pode listar todas as regras de todas as cadeias, como este:

$ iptables -L -n --line-numbers

Para obter quantos pacotes processados por cada regra, você pode usar o sinalizador-v:

$ iptables -L -v

além disso, você pode repor os contadores a zero, utilizando -Z bandeira.

Agora podemos adicionar uma nova regra para qualquer cadeia quisermos, podemos inserir a regra em uma ordem específica, e podemos listar as regras para qualquer cadeia ou todas as cadeias, mas o que sobre a exclusão de uma regra?

a apagar as regras

poderá apagar uma regra com a opção-D:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Este comando irá apagar a regra de HTTP que indicou anteriormente.

Antes de excluir uma regra, certifique-se apenas da especificação da regra listando-a, em seguida, exclua-a.

pode apagar a regra usando o número de ordem em vez de escrever as especificações da regra.

pode apagar todas as regras numa cadeia específica usando a bandeira-F, O que significa lavar todas as regras.

$ iptables -F INPUT

Se se esquecer de mencionar o nome da cadeia ao usar a bandeira-F, Então todas as regras da cadeia serão apagadas.

Substituir Regras

Você pode substituir as regras existentes com a sua própria regra usando o sinalizador-R:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Este comando irá substituir a primeira regra na chain INPUT com o tipo de regra.

listando a tabela específica

para listar uma tabela específica, use a bandeira-t com o nome da tabela como este:

$ iptables -L -t nat

aqui listamos as regras na tabela nat.

iptables User Defined Chain

To create a user-defined chain, use the-N flag.

$ iptables -N MY_CHAIN

Também, você pode renomeá-lo usando a bandeira-E.

$ iptables -E MY_CHAIN NEW_NAME

e pode apagar a cadeia definida pelo utilizador usando a opção-X.

$ iptables -X MY_CHAIN

Se não mencionar o nome da cadeia ao usar a bandeira-X, irá apagar todas as cadeias definidas pelo utilizador. Você não pode apagar cadeias incorporadas como entrada e saída.

redirecciona para uma cadeia definida pelo Utilizador

pode redireccionar os pacotes para uma cadeia definida pelo utilizador como cadeias incorporadas usando a bandeira-J.

$ iptables -A INPUT -p icmp -j MY_CHAIN

a regra acima redireccionará todo o tráfego ICMP para a cadeia MY_CHAIN.

define a Política por omissão para cadeias

pode usar a bandeira-P para definir a Política por omissão para uma cadeia específica. A Política padrão poderia ser aceitar, rejeitar e cair.

$ iptables -P INPUT DROP

então agora, a cadeia de entrada irá largar qualquer pacote a menos que você escreva uma regra para permitir qualquer tráfego de entrada.

sin Flood

o atacante envia pacotes SYN apenas sem completar o aperto de mão TCP e, como resultado, a máquina receptora teria muitas conexões abertas, e seu servidor fica muito ocupado para responder a outros clientes.

Podemos usar o módulo limite de firewall iptables para nos proteger de inundações de SYN.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

Aqui são indicados apenas 10 pacotes de SYN por segundo. Você pode ajustar este valor de acordo com suas necessidades de rede.

Se isso vai acelerar a sua rede, você pode usar cookies SYN.

Syn Cookies

In

/etc/sysctl.conf

file e adicionar esta linha:

net.ipv4.tcp_syncookies = 1

depois gravar e recarregar.

$ sysctl -p

Drop inválidos pacotes de Estado

os pacotes de Estado inválidos são pacotes que não pertencem a nenhuma ligação e você os larga.

$ iptables -A INPUT -m state --state INVALID -j DROP

esta regra irá largar todos os pacotes de Estado inválidos recebidos.

Drop Fragment Packets

Fragment packets are broken pieces of large malformed packets, and you should write rules to drop them.

a bandeira-f diz à firewall do iptables para seleccionar todos os fragmentos. Então, se você não está usando iptables como um roteador, você pode deixar cair pacotes fragmentados.

$ iptables -A INPUT -f -j DROP

Save iptables Rules

Se reiniciar o seu servidor, irá perder todas as regras que escreveu, como as persistir?

pode gravar todas as suas regras usando o comando iptables-save se estiver a usar CentOS ou chapéu vermelho.

iptables-save > /etc/sysconfig/iptables

em CentOS 7, você pode salvar regras como esta:

$ service iptables save

você pode salvar tabela específica como filtro tabela apenas:

$ iptables-save -t filter

Também, você pode usar iptables-restaurar para restaurar as regras.

no distros baseado no Debian, você pode usar o pacote iptables-persistente para salvar e restaurar as regras.

Primeiro, instale-o:

$ apt-get install iptables-persistent

em Seguida, você pode salvar e restaurar regras:

$ netfilter-persistent save
$ netfilter-persistent reload

espero que você encontre o iptables firewall fácil. Continua a voltar.obrigado.

Fundador da LikeGeeks. Trabalho como administrador de sistemas Linux desde 2010. Sou responsável pela manutenção, segurança e resolução de problemas de Servidores Linux para vários clientes em todo o mundo. Adoro escrever scripts shell e Python para automatizar o meu trabalho.