Tornando o iptables mais fácil de manter

12

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

# 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ê tem a ideia. 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

Acredito que isso seja possível, pois man iptables diz:

Address can be either a network name, a hostname (please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea), a network IP address (with /mask), or a plain IP address.

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

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

    
por David Kennedy 17.05.2013 / 17:35

5 respostas

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

Se o seu objetivo é bloquear o acesso HTTP, normalmente você está muito melhor na configuração de um software projetado para filtrar nesse nível (por exemplo, squid + squidquard).

    
por 17.05.2013 / 17:43
9

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

  • Pesquisas de DNS em grandes volumes podem causar latência.
  • Alterações no DNS não se propagam instantaneamente. Então o seu firewall pode ser usando IPs em cache.
  • O DNS pode ser falsificado, invadido, hackeado.
  • O DNS pode falhar - o que significa que o seu firewall falha.
  • Suas regras de firewall agora são controladas por terceiros.

Se você usar nomes de host e não controlar o DNS, outra pessoa efetivamente controlará suas regras de IPtables. Erros, erros ou problemas de segurança no seu final se tornam problemas para você.

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

    
por 17.05.2013 / 17:48
3

Você pode usar um wrapper em volta do iptables como o shorewall para tornar suas regras mais fáceis de manter.

    
por 17.05.2013 / 17:39
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 adicionaria que seu DNS pode falhar ou pode estar inacessível no momento em que o serviço iptables está iniciando. Nesse caso, a regra não será adicionada e todo um novo tipo de problemas pode acontecer (como perder o acesso ssh após o reinício).

O que você pode fazer é:

  1. Use cadeias personalizadas para separar logicamente as regras
  2. Use ipset s para agrupar e separar endereços das regras
  3. Adicione comentários às regras

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

    
por 17.05.2013 / 19:22
1

Eu pessoalmente atribuo um nome de host a um ip manualmente em / etc / hosts e uso-o no iptables.

Desta forma você

  1. Não descarregue suas regras de firewall para uma entidade externa
  2. Possuem iptables fáceis de manter
por 14.11.2014 / 19:59