Tornando o iptables mais fácil de manter

13

Minha rede está completamente bloqueada, exceto por alguns sites que estão na lista de permissões. Tudo isso é feito através do iptables, que se parece com isso:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

Obviamente, esses endereços são hipotéticos, mas você entendeu. Meu firewall está se tornando enorme. Seria muito mais fácil manter se eu pudesse fazer isso:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

Eu acredito que isso é possível, pois man iptablesdiz:

O endereço pode ser um nome de rede, um nome de host (observe que especificar um nome a ser resolvido com uma consulta remota como DNS é uma péssima idéia), um endereço IP de rede (com / mask) ou um endereço IP simples.

Mas o que me preocupa é a parte que diz "especificar qualquer nome a ser resolvido com ... DNS é uma péssima idéia". Por que isso é uma má ideia? Isso apenas atrasa tudo?

Se realmente não devo usar nomes de host nas regras do iptables, o que devo fazer para simplificar meu firewall?

David Kennedy
fonte
Você obterá uma resposta melhor em security.stackexchange.com
Jim B
Você pode estar certo de que essa pergunta pertence a esse site, mas se você tiver um problema com a resposta aceita, explique o motivo.
David Kennedy
Se você deseja saber como bloquear sua rede e como fazê-lo, pergunte sobre segurança. Se você deseja usar o iptables (em vez de usar o IPtables), este é o local.
Jim B

Respostas:

27
  • Os nomes DNS são resolvidos quando as regras são adicionadas, não quando os pacotes são verificados. Isso viola as expectativas da maioria das pessoas.
    • A regra não é atualizada para refletir os resultados alterados do DNS. É resolvido quando adicionado e é isso. Você precisará recarregar as regras periodicamente, ou alguns sites podem quebrar.
  • Há um problema de segurança em que você basicamente está delegando o controle de suas regras de firewall para uma entidade externa.
    • E se o servidor DNS pai estiver comprometido e retornar dados falsos.

Se seu objetivo é bloquear o acesso HTTP, geralmente é melhor configurar um software projetado para filtrar nesse nível (por exemplo, squid + squidquard).

Zoredache
fonte
1) Vejo como isso pode ser um problema - o google.com pode ser resolvido para a 1.2.3.4 hoje, mas amanhã esse endereço é inválido. Simplesmente reiniciar o firewall resolveria isso? 2) Ainda é um problema de segurança se o servidor DNS é bem conhecido - como o DNS do Google ou o OpenDNS?
David Kennedy
Marquei isso como a resposta, porque explica por que não devo usar nomes de host nas regras do iptables e fornece um curso de ação para simplificar meu firewall.
David Kennedy
Eu gostaria de adicionar meu suporte ao Squid. Eu implementei o Squid para o meu escritório e, uma vez configurado, é muito fácil manter os hosts na lista de permissões (embora eu o use na lista negra). Parece que você tem um empreendimento monumental em suas mãos; Eu nem saberia por onde começar a colocar o Google na lista branca, por exemplo. O www.google.com resolve apenas cinco IPs, o que não significa nada para ssl.gstatic.com e todos os outros hosts envolvidos na autenticação, G +, etc., que provavelmente resolvem vários IPs cada.
s.co.tt
Monumental é uma boa maneira de colocá-lo. Mas eu estava apenas usando o Google como exemplo. Um esboço básico do meu firewall é mais ou menos assim: se o destino do pacote estiver na lista de permissões, aceite-o. Caso contrário, envie-o através de um servidor proxy.
David Kennedy
Há também o problema de sistemas que usam DNS para balanceamento de carga. Você pode não obter os mesmos resultados se procurar um domínio desse tipo duas vezes seguidas, portanto, uma única pesquisa não fornecerá uma lista exaustiva de endereços IP que o domínio poderia resolver.
Cdhowie
9

Se você usa nomes de host em seu firewall, seu firewall agora depende do DNS. Isso abre o firewall para vários problemas:

  • As pesquisas de DNS em volumes altos podem causar latência.
  • As alterações no DNS não se propagam instantaneamente. Portanto, seu firewall pode estar usando IPs em cache.
  • O DNS pode ser falsificado, seqüestrado, hackeado.
  • O DNS pode falhar - o que significa que seu firewall falha.
  • Suas regras de firewall agora são controladas por terceiros.

Se você usa nomes de host e não controla o DNS, alguém controla efetivamente suas regras de tabelas de IP. Erros, erros ou questões de segurança acabam se tornando problemas para você.

A única vez que vi nomes de host bem utilizados é para operações internas. Eu trabalhei em um escritório onde IPs e nomes de host foram atribuídos via DHCP. Os firewalls usavam nomes de host para colocar barreiras entre diferentes grupos. Como tudo era controlado internamente, funcionou bem.

jeffatrackaid
fonte
2
Essa é uma boa resposta, mas está faltando a parte que me ajudaria a simplificar o firewall.
David Kennedy
3

Você pode usar um invólucro em torno de iptables como shorewall para tornar suas regras mais fáceis de manter.

Jure1873
fonte
É uma boa ideia, mas você não me disse por que não devo usar nomes de host nas regras do iptables.
David Kennedy
Não sei muito sobre o Shorewall, mas tenho a impressão de que o davidkennedy85 ainda precisará manter listas de todos os endereços IP de um serviço que ele deseja permitir nas configurações do Shorewall. Isso pode facilitar o gerenciamento do netfilter [& etc], mas não resolveria o problema principal, que é uma lista enorme de IPs.
s.co.tt
1

Como os outros já disseram, você não deve usar nomes resolvíveis de DNS nas regras do iptables. Eles são imprecisos, controlados por terceiros e geralmente são uma coisa ruim (tm). Eu também acrescentaria que seu DNS pode falhar ou estar inacessível no momento em que o serviço iptables está sendo iniciado. Nesse caso, a regra não será adicionada e um novo tipo de problema poderá ocorrer (como perder o acesso ssh após a reinicialização).

O que você pode fazer é:

  1. Use cadeias personalizadas para separar logicamente as regras
  2. Use ipsets para ter endereços agrupados e separados das regras
  3. Adicionar comentários às regras

Também ninguém disse nada de ruim sobre nomes de host que não são resolvidos pelo DNS (ou seja, estão especificados em hosts. Você pode usá-los se realmente precisar.

skarap
fonte
1

Pessoalmente, atribuo um nome de host a um ip manualmente em / etc / hosts e depois o uso em iptables.

Assim você

  1. Não descarregue suas regras de firewall para uma entidade externa
  2. Possui iptables de fácil manutenção
T4cC0re
fonte