Dicas De Segurança Firewall Para Novos SysAdmins |

Tutoriais Linux para sysadmin e usuários novos

Dicas de segurança firewall para novos SysAdmins

12 min read
Dicas de segurança firewall para novos SysAdmins 1

O linux vem com um firewall baseado em host chamado Netfilter. O netfilter é um conjunto de ganchos dentro do kernel do Linux que permite que os módulos do kernel registrem funções de retorno de chamada na pilha de rede. Uma função de retorno de chamada registrada é chamada de volta para cada pacote que atravessa o respectivo gancho na pilha de rede. Esse firewall baseado em Linux é controlado pelo programa chamado iptables para manipular a filtragem de IPv4 e o ip6tables manipula a filtragem de IPv6.

Este artigo será o seu guia mostrará comandos do iptables essencial para controlar suas regras diárias de firewall e segurança do servidor Linux em execução no servidor bare metal, roteador ou servidor em nuvem.

Exemplos de firewall Netfilter Linux Iptables para novos SysAdmins.

  • A maioria das ações listadas neste post foi escrita com a suposição de que elas serão executadas pelo usuário root executando o bash ou qualquer outro shell moderno. Não digite comandos no sistema remoto, pois isso desconectará seu acesso.
  • Para fins de demonstração, usei o RHEL 6.x, mas o comando a seguir deve funcionar com qualquer distribuição Linux moderna que use o netfliter.
  • NÃO é um tutorial sobre como configurar o iptables.

1. Exibindo o status do seu firewall

Digite o seguinte comando como raiz:

iptables -L -n -v

Exemplo de saídas:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

A saída acima indica que o firewall não está ativo. O exemplo a seguir mostra um firewall ativo:

iptables -L -n -v

Resultados de exemplo:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
  394 43586 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   93 17292 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
    1   142 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
    0     0 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 wanin      all  --  vlan2  *       0.0.0.0/0            0.0.0.0/0
    0     0 wanout     all  --  *      vlan2   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain wanin (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain wanout (1 references)
 pkts bytes target     prot opt in     out     source               destination
  • -L : lista regras.
  • -v : exibe informações detalhadas. Essa opção faz com que o comando list mostre o nome da interface, as opções de regra e as máscaras TOS. Os contadores de pacotes e bytes também são listados, com o sufixo 'K', 'M' ou 'G' para 1000, 1.000.000 e 1.000.000.000 de multiplicadores, respectivamente.
  • -n : exibe o endereço IP e a porta em formato numérico. Não use o DNS para resolver nomes. Isso irá acelerar a listagem.

1.1 Para inspecionar o firewall com números de linha, digite:

iptables -n -L -v --line-numbers

Saídas de amostra:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
3    TCPMSS     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
5    wanin      all  --  0.0.0.0/0            0.0.0.0/0
6    wanout     all  --  0.0.0.0/0            0.0.0.0/0
7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain wanin (1 references)
num  target     prot opt source               destination

Chain wanout (1 references)
num  target     prot opt source               destination

Você pode usar números de linha para excluir ou inserir novas regras no firewall.

1.2 Para exibir as regras da cadeia INPUT ou OUTPUT, digite:

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

2. Pare/inicie/reinicie o firewall2.

Se você estiver utilizando o CentOS/RHEL/Fedora Linux, digite:

service iptables stop
service iptables start
service iptables restart
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
  • -F : Excluindo (liberando) todas as regras.
  • -X : excluir regra.
  • -t nome_tabela: selecione a tabela (chamada nat ou mangle) e exclua / limpe as regras.
  • -P : defina a política padrão (como DROP, REJECT ou ACCEPT).

3. Excluir regras de firewall

Para exibir o número da linha junto com outras informações das regras existentes, digite: Você receberá a lista de IP. Olhe para o número à esquerda e use o número para excluí-lo . Por exemplo, exclua o número da linha 4, digite: OU localize o IP de origem 202.54.1.1 e exclua da regra:

iptables -L INPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers | less
iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1
iptables -D INPUT 4

iptables -D INPUT -s 202.54.1.1 -j DROP
  • -D : exclua uma ou mais regras da cadeia selecionada.

4. Insira regras de firewall

Para inserir uma ou mais regras na cadeia selecionada como o número de regra fornecido, use a seguinte sintaxe. Primeiro descubra os números das linhas, digite:

iptables -L INPUT -n –line-numbers

Resultados da amostra:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  202.54.1.1           0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED 

Para inserir uma regra entre 1 e 2, digite:

iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Para visualizar as regras atualizadas, digite:

iptables -L INPUT -n --line-numbers

Exemplo de saídas:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  202.54.1.1           0.0.0.0/0
2    DROP       all  --  202.54.1.2           0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED

5. Salvar regras de firewall

Para salvar regras de firewall no CentOS / RHEL / Fedora Linux, digite:

service iptables save

Neste exemplo, solte um IP e salve as regras de firewall: Para todas as outras distros, use o comando iptables-save:

iptables -A INPUT -s 202.5.4.1 -j DROP
service iptables save
iptables-save > /root/my.active.firewall.rules
cat /root/my.active.firewall.rules

6. Restaurar regras de firewall

Para restaurar regras de firewall em um arquivo chamado /root/my.active.firewall.rules, digite:

iptables-restore < /root/my.active.firewall.rules

Para restaurar regras de firewall em CentOS / RHEL / Fedora Linux, digite:

service iptables restart

7. Defina as políticas padrão do firewall

Para eliminar todo o tráfego:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -L -v -n

7.1 Bloquear apenas tráfego de entrada

Para descartar todos os pacotes recebidos / encaminhados, mas permitir o tráfego de saída, digite:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -L -v -n

8. Solte o endereço de rede privada na interface pública.

A falsificação de IP nada mais é do que interromper os seguintes intervalos de endereços IPv4 para redes privadas em suas interfaces públicas. Pacotes com endereços de origem não roteáveis devem ser rejeitados usando a seguinte sintaxe:

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

8.1 Intervalos de endereços IPv4 para redes privadas (certifique-se de bloqueá-los na interface pública)

  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 (C)
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (LOOPBACK)

9. Bloquear um endereço IP (BLOCK IP)

Para bloquear um endereço IP do invasor chamado 1.2.3.4, digite:

iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP

10. Bloquear solicitações de porta de entrada (BLOCK PORT)

Para bloquear todas as solicitações de serviço na porta 80, digite:

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

11. Bloquear endereço IP de saída

Para bloquear o tráfego de saída para um host ou domínio específico, como palamarsolutionit.com.br, digite:

host -t a palamarsolutionit.com.br

Exemplo de saídas:

palamarsolutionit.com.br tem endereço 30.170.166.120

Anote o endereço IP e digite o seguinte para bloquear todo o tráfego de saída para 30.170.166.120:

iptables -A OUTPUT -d 30.170.166.120 -j DROP

Você pode usar uma sub-rede da seguinte maneira:

iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP

11.1 Exemplo - Bloquear domínio do Facebook.com

Primeiro, descubra todos os endereços IP do facebook.com e digite:

host -t a www.facebook.com

Exemplo de saídas:

www.facebook.com tem o endereço 69.171.228.40

Encontre o CIDR para 69.171.228.40, digite:

whois 69.171.228.40 | grep CIDR

Exemplo de saídas:

CIDR: 69.171.224.0/19

Para impedir o acesso de saída a www.facebook.com, digite:

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Você também pode usar o nome de domínio, digite:

iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
iptables -A OUTPUT -p tcp -d facebook.com -j DROP

12. Registrar e soltar pacotes

Digite o seguinte para registrar e bloquear a falsificação de IP na interface pública chamada eth1 Por padrão, tudo é registrado no arquivo / var / log / messages.

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
tail -f /var/log/messages
grep --color 'IP SPOOF' /var/log/messages

13. Registrar e soltar pacotes com número limitado de entradas de log.

O módulo -m limit pode limitar o número de entradas de log criadas por hora. Isso é usado para evitar inundar seu arquivo de log. Para registrar e eliminar a falsificação a cada 5 minutos, em rajadas de no máximo 7 entradas.

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

14. Solte ou aceite o tráfego do endereço Mac

Use a seguinte sintaxe:

iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

15. Bloquear ou permitir solicitação de ping ICMP

Digite o seguinte comando para bloquear solicitações de ping do ICMP: As respostas de ping também podem ser limitadas a determinadas redes ou hosts: O seguinte aceita apenas tipos limitados de solicitações de ICMP:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
### ** assumed that default INPUT policy set to DROP ** #############
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** all our server to respond to pings ** ##
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  1. Faixa aberta de endereços IP

Use a seguinte sintaxe para abrir um intervalo de endereços IP:

iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

exemplo NAT

iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

17. Conexões estabelecidas e reiniciando o firewall

Quando você reiniciar o serviço iptables, ele eliminará as conexões estabelecidas ao descarregar os módulos do sistema no RHEL / Fedora / CentOS Linux. Edite / etc / sysconfig / iptables-config e configure IPTABLES_MODULES_UNLOAD da seguinte maneira:

IPTABLES_MODULES_UNLOAD = no

18. Tela de Ajuda dos Iptables Inundando Meu Servidor

Use o nível do log crítico para enviar mensagens para um arquivo de log em vez do console:

iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level critic

19. Bloquear ou abrir portas comuns

A seguir, é apresentada a sintaxe para abrir e fechar portas TCP e UDP comuns:

Substitua ACCEPT por DROP para bloquear a porta:
 ## abra a porta ssh tcp port 22 ## 
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport  22  -j ACCEPT 
iptables -A INPUT -s 192.168. 1.0 / 24  -m state --state NEW -p tcp --dport  22  -j ACEITAR ## xícaras abertas (serviço de impressão) porta udp / tcp 631 para usuários de LAN ## 
iptables -A INPUT -s 192.168.1.0 /

24  -p udp -m udp --dport  631  -j ACCEPT 
iptables -A INPUT -s 192.168.1.0 / 24  -p tcp -m tcp --dport  631  -j ACCEPT ## permite sincronização de horário via NTP para usuários de LAN (aberto porta 123 do udp) ## 
iptables -A INPUT -s 192.168.1.0 / 24 -m state --state NEW -p udp --dport 123 -j ACCEPT ## abra a porta 25 do tcp (smtp) para todos os ##

iptables -A INPUT -m state --state NEW -p tcp --dport  25  -j ACCEPT # abre portas de servidor DNS para todas as ## 
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACEITAR 
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT ## abra a porta do servidor http / https (Apache) para todas as ## 
iptables -A

INPUT -m state --state NEW -p tcp --dport  80  -j ACEITAR 
iptables -A INPUT -m state --state NEW -p tcp --dport  443  -j ACCEPT ## abrir a porta tcp 110 (pop3) para todos ## 
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT ## abra a porta tcp 143 (imap) para todos os ## 
iptables -A INPUT -m

state --state NEW -p tcp --dport  143  -j ACCEPT ## acesso aberto ao servidor de arquivos Samba apenas para usuários de lan ## 
iptables -A INPUT -s 192.168.1.0 / 24 -m state --state NEW -p tcp --dport 137 -j ACEITAR 
iptables -A INPUT -s 192.168.1.0 / 24 -m state --state NEW -p tcp --dport 138 -j ACCEPT

iptables -A INPUT -s 192.168.1.0 / 24  -m state --state NEW -p tcp --dport  139  -j ACEITAR 
iptables -A INPUT -s 192.168.1.0 / 24  -m state --state NEW -p tcp - -dport  445  -j ACEITAR ## acesso aberto ao servidor proxy apenas para usuários de lan ## 
iptables -A INPUT -s 192.168.1.0 / 24 -m state --state

 NEW -p tcp --dport  3128  -j ACCEPT ## abre acesso ao servidor mysql apenas para usuários de lan ## 
iptables -I INPUT -I INPUT -p tcp --dport 3306 -j ACCEPT

20. Restrinja o número de conexões paralelas a um servidor por IP do cliente

Você pode usar o módulo connlimit para colocar essas restrições. Para permitir três conexões ssh por host do cliente, digite:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Defina solicitações HTTP como 20:

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
  1. --connlimit-above 3 : corresponde se o número de conexões existentes for superior a 3.

  2. --connlimit-mask 24 : agrupa hosts usando o tamanho do prefixo. Para IPv4, este deve ser um número entre (incluindo) 0 e 32.

  3. Listar regras NAT
    A sintaxe é

iptables -t nat -L -n -v

Amostra de saídas:

Chain PREROUTING (policy ACCEPT 496K packets, 29M bytes)
 pkts bytes target     prot opt in     out     source               destination         
43557 2613K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:443 to:10.105.28.42:443
68700 4122K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:80 to:10.105.28.42:80
15855  951K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:444 to:10.105.28.45:444
16009  961K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:81 to:10.105.28.45:81
63495 3810K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:445 to:10.105.28.44:445
19615 1177K DNAT       tcp  --  *      *       0.0.0.0/0            192.168.184.8        tcp dpt:82 to:10.105.28.44:82

Chain INPUT (policy ACCEPT 488K packets, 29M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3280 packets, 207K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 231K packets, 14M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 3832  230K MASQUERADE  all  --  *      *       10.105.28.0/24      !10.105.28.0/24       /* generated for LXD network lxdbr0 */

Outra opção:

iptables -t nat -v -L -n --line-number

22. Excluir regras NAT

A sintaxe é a seguinte para listar as regras NAT no Linux : Para excluir a regra PREROUTING, execute: Para excluir a regra POSTROUTING , execute:

iptables -t nat -v -L -n --line-number
iptables -t nat -v -L PREROUTING -n --line-number
iptables -t nat -v -L POSTROUTING -n --line-number

iptables -t nat -D PREROUTING {number-here}
iptables -t nat -D PREROUTING 42

iptables -t nat -D POSTROUTING {number-here}
 iptables -t nat -D POSTROUTING 42

23. Como redirecionar a porta A para o B

A sintaxe é a seguinte :

iptables -t nat -A PREROUTING -i $interfaceName -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumber

Para redirecionar todo o tráfego de entrada na porta 80, redirecione para a porta 8080

iptables -t nat -I PREROUTING --src 0/0 --dst 192.168.1.5 -p tcp --dport 80 -j REDIRECT --to-ports 8080

24. Como redefinir contadores de pacotes

Para ver os contadores do iptables executados:

iptables -L -n -v

Para limpar / redefinir os contadores de todas as regras: Para redefinir os contadores apenas da cadeia INPUT: Para redefinir os contadores da regra 13 da cadeia INPUT:

iptables -Z
iptables -L -n -v

iptables -Z INPUT

iptables -Z INPUT 13

25. Use o iptables como um profissional

Para obter mais informações sobre o iptables, consulte a página de manual digitando man iptables na linha de comando:

man iptables

Você também pode ver a ajuda usando a seguinte sintaxe:

iptables -h

Para obter ajuda com comandos e destinos específicos, digite:

iptables -j DROP -h

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *