Regras IPTable para restringir o acesso eth1 às portas 80 e 443

1

Eu tenho um serviço (Elasticsearch atrás do proxy) ouvindo o tráfego do cliente nas portas 80 e 443 da eth1. Os servidores que hospedam o meu serviço também hospedam outro conteúdo de acesso privilegiado / administrador em eth0 e localhost

Estou tentando configurar regras iptable para bloquear a eth1 em servidores que estão na mesma rede que os clientes (bloquear coisas como ssh através de eth1 / acessar serviços internos em execução na porta 9904 etc.). Também quero ter certeza de que as regras não proíbe o acesso regular a eth1: 80 e eth1: 443. Eu criei as regras abaixo, mas queria revisar com gurus do iptable sobre possíveis problemas com essa regra.

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth1 -j DROP
  • As regras acima são suficientes
  • Como o acima é diferente das regras encontradas quando pesquisando
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -i eth1 -p tcp -j ACCEPT
-A INPUT -i eth1 -j DROP
    
por dejavu013 23.02.2017 / 19:00

1 resposta

0

O primeiro conjunto de regras primeiro permite todos os pacotes de entrada em suas portas 80 e 443. Em seguida, ele descarta TODOS os outros pacotes de entrada (exceto aqueles já aceitos).

O segundo conjunto de regras primeiro permite todos os pacotes de entrada nas portas 80 e 443. Em seguida, descarta conexões de entrada (excluindo 80 e 443 que já são aceitas), que são pacotes com somente o sinalizador SYN conjunto. Então, ele permite todos os pacotes recebidos.

A diferença aqui é o que acontece com suas conexões OUTGOING. No primeiro conjunto de regras, se você tentar se conectar a outro servidor, todos os pacotes enviados pelo servidor em resposta serão descartados para que você nunca receba dados. No segundo caso, esses pacotes serão permitidos, já que o primeiro pacote do servidor remoto terá SYN e ACK definidos e, portanto, passarão no teste SYN, e os pacotes a seguir não terão nenhum conjunto SYN e, portanto, passarão no teste.

Isso tem sido feito tradicionalmente usando conntrack , que requer que o kernel rastreie todas as conexões no firewall, com um comando como

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

que corresponde ao pacote de entrada a uma conexão existente ou a uma conexão relacionada a alguma outra conexão existente (por exemplo, conexões de dados FTP). Se você não estiver usando FTP ou outros protocolos que usam várias portas aleatórias, o segundo conjunto de regras obtém basicamente o mesmo resultado sem a sobrecarga de rastrear e inspecionar essas conexões.

    
por 23.02.2017 / 20:02