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.
Leave a Reply