Hacer que iptables sea más fácil de mantener

13

Mi red está completamente bloqueada, excepto por algunos sitios que están en la lista blanca. Todo esto se hace a través de iptables, que se parece a esto:

# 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 esas direcciones son hipotéticas, pero entiendes la idea. Mi firewall se está volviendo enorme. Sería mucho más fácil de mantener si pudiera hacer esto:

# 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

Creo que esto es posible, ya que man iptablesdice:

La dirección puede ser un nombre de red, un nombre de host (tenga en cuenta que especificar un nombre para resolver con una consulta remota como DNS es una muy mala idea), una dirección IP de red (con / máscara) o una dirección IP simple.

Pero lo que me preocupa es la parte que dice "especificar cualquier nombre para resolver ... DNS es una muy mala idea". ¿Por qué es una mala idea? ¿Simplemente ralentiza todo?

Si realmente no debería usar nombres de host en las reglas de iptables, ¿qué debo hacer para simplificar mi firewall?

Big McLargeHuge
fuente
Obtendrá una mejor respuesta en security.stackexchange.com
Jim B
Puede tener razón en que esta pregunta pertenece a ese sitio, pero si tiene un problema con la respuesta aceptada, explique por qué.
Big McLargeHuge
Si desea saber sobre el bloqueo de su red y cómo hacerlo, pregunte por seguridad, si desea usar iptables (en lugar de usar IPtables), este es el lugar.
Jim B

Respuestas:

27
  • Los nombres DNS se resuelven cuando se agregan las reglas, no cuando se comprueban los paquetes. Esto viola las expectativas de la mayoría de las personas.
    • La regla no se actualiza para reflejar los resultados de DNS modificados. Se resuelve cuando se agrega y eso es todo. Deberá volver a cargar periódicamente las reglas, o algunos sitios pueden romperse.
  • Hay un pequeño problema de seguridad en que básicamente está delegando el control de las reglas de su firewall a una entidad externa.
    • ¿Qué sucede si su servidor DNS principal se ve comprometido y devuelve datos falsos?

Si su propósito es bloquear el acceso a HTTP, generalmente es mucho mejor configurar un software diseñado para filtrar a ese nivel (por ejemplo, calamar + calamar).

Zoredache
fuente
1) Veo cómo esto podría ser un problema: google.com podría resolver a 1.2.3.4 hoy pero mañana esa dirección no es válida. ¿Simplemente reiniciar el firewall se encargaría de esto? 2) ¿Sigue siendo un problema de seguridad si el servidor DNS es bien conocido, como el DNS de Google o OpenDNS?
Big McLargeHuge
Marqué esto como la respuesta porque explica por qué no debería usar nombres de host en las reglas de iptables y me da un curso de acción para simplificar mi firewall.
Big McLargeHuge
Me gustaría agregar mi apoyo para Squid. Implementé Squid para mi oficina, y una vez configurado, es muy fácil de mantener para los hosts de la lista blanca (aunque lo uso para la lista negra). Parece que tienes una empresa monumental en tus manos; Ni siquiera sabría por dónde empezar a incluir en la lista blanca de Google, por ejemplo. www.google.com resuelve solo 5 IP, lo que significa nada para ssl.gstatic.com, y todos los demás hosts involucrados en autenticación, G +, etc., que probablemente resuelven en múltiples IP cada uno.
s.co.tt
Monumental es una buena forma de decirlo. Pero solo estaba usando Google como ejemplo. Un resumen básico de mi primer firewall es el siguiente: si el destino del paquete está en la lista blanca, acéptelo. De lo contrario, envíelo a través de un servidor proxy.
Big McLargeHuge
También está el problema de los sistemas que usan DNS para el equilibrio de carga. Es posible que no obtenga los mismos resultados si busca dicho dominio dos veces seguidas, por lo que una sola búsqueda ni siquiera le dará una lista exhaustiva de direcciones IP que el dominio podría resolver.
cdhowie
9

Si usa nombres de host en su firewall, su firewall ahora depende de DNS. Esto abre el firewall a una serie de problemas:

  • Las búsquedas de DNS en grandes volúmenes pueden causar latencia.
  • Los cambios de DNS no se propagan instantáneamente. Por lo tanto, su firewall podría estar usando IP en caché.
  • DNS puede ser falsificado, secuestrado, pirateado.
  • DNS puede fallar, lo que significa que su firewall falla.
  • Sus reglas de firewall ahora están controladas por un tercero.

Si usa nombres de host y no controla el DNS, alguien más controla efectivamente sus reglas de IPtables. Los errores, errores o problemas de seguridad por su parte se convierten en problemas para usted.

La única vez que he visto que los nombres de host se usan bien es para operaciones internas. He trabajado en una oficina donde las direcciones IP y los nombres de host se asignaron a través de DHCP. Los cortafuegos utilizaron nombres de host para poner barreras entre diferentes grupos. Como todo esto estaba controlado internamente, funcionó bien.

jeffatrackaid
fuente
2
Esta es una buena respuesta, pero le falta la parte que me ayudaría a simplificar el firewall.
Big McLargeHuge
3

Podrías usar un contenedor alrededor de iptables como shorewall para hacer que tus reglas sean más fáciles de mantener.

Jure1873
fuente
Esta es una buena idea, pero no me dijiste por qué no debería usar nombres de host en las reglas de iptables.
Big McLargeHuge
No sé mucho sobre Shorewall, pero tengo la impresión de que davidkennedy85 aún necesitaría mantener listas de cada dirección IP de un servicio que quisiera permitir dentro de las configuraciones de Shorewall. Podría facilitar un poco la administración de netfilter [& etc], pero no resolvería su problema central, que es una lista masiva de IP.
s.co.tt
1

Como los otros ya han dicho, no debes usar nombres resolubles DNS en las reglas de iptables. Son inexactos, controlados por terceros y generalmente son una mala cosa (tm). También agregaría que su DNS puede fallar o ser inaccesible en el momento en que se inicia el servicio de iptables. En cuyo caso, la regla no se agregará en absoluto y puede ocurrir un tipo completamente nuevo de problemas (como perder el acceso ssh después del reinicio).

Lo que puedes hacer es:

  1. Use cadenas personalizadas para separar lógicamente las reglas
  2. Use ipsets para tener direcciones agrupadas y separadas de las reglas
  3. Agregar comentarios a las reglas

Además, nadie dijo nada malo sobre los nombres de host que DNS no resuelve (es decir, se especifican en hosts. Puede usarlos si realmente lo necesita).

skarap
fuente
1

Personalmente asigno un nombre de host a una ip manualmente en / etc / hosts y luego lo uso en iptables.

De esta manera tu

  1. No descargue sus reglas de firewall a una entidad externa
  2. Tener iptables fácilmente mantenibles
T4cC0re
fuente