¿Cuál es la forma canónica de almacenar las reglas de iptables?


8

iptables, el firewall estándar de Linux, no guarda las reglas entre reinicios. Tienes que ocuparte de esto tú mismo. Hay muchas maneras de hacer esto. ¿Cuál es la forma canónica de hacer esto? ¿Cuáles son las mejores prácticas?

Contestaré con mi propia solución, pero estoy interesado en otras / mejores soluciones.


Respuestas:


6

Aquí hay algunos ejemplos de reglas. Guárdelos en /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

agregue esta línea al final de / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules

1
Señalaré que esto es específico de Ubuntu. Para las variantes de Red Hat y Fedora, buscará / etc / sysconfig / iptables en su lugar.
esm

¿Quieres decir en lugar de /etc/iptables.rules? Eso no está determinado por Ubuntu, lo elegí yo mismo.
amarillion

44
Me refería a la adición a / etc / network / interfaces; Mis disculpas, debería haber sido más claro. Fedora y RHEL tienen un initscript (ingeniosamente llamado "iptables";) que, si está habilitado, esencialmente hace una restauración de iptables de / etc / sysconfig / iptables.
esm

3

Usamos muchas reglas de iptables , por lo que para facilitar la administración hacemos lo siguiente:

  • Todas las reglas se invocan desde scripts: los scripts se invocan desde /etc/init.d/firewall (script personalizado)
  • Se mantiene un archivo de nombres de servidor / nombres de red (variables de dirección IP), que se incluye en cada script de iptables para mantener la coherencia.
  • Se guardan secuencias de comandos separadas para cada subred (es decir, privada / DMZ / VPN, etc.) para que las cosas sean más fáciles de encontrar. Las reglas que pertenecen a 2 scripts (como las que restringen la comunicación b / w private y DMZ) se colocan en el script de la red más "segura"
  • siempre que sea posible, se utilizan bucles y bucles anidados para mantener los scripts lo más cortos posible.
  • cada nueva regla o cambio se documenta con comentarios que preceden a la sección correspondiente del script.

No sé si esta es la mejor manera de hacerlo, pero nos ha funcionado bien.


3

Si bien es cierto que esto depende del entorno y la plataforma, he visto dos buenos enfoques, dependiendo de la plataforma:

  • RHEL / CentOS: almacene todas las reglas en un solo archivo / etc / sysconfig / iptables que se lee en el script de inicio de iptables.

  • Debian / Ubuntu: almacene todas las reglas en archivos separados específicos del servicio en el directorio /etc/iptables.d/. Por ejemplo, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, donde port_service se asigna a un nombre de servicio en / etc / services.

En cualquier caso, el archivo o los archivos son administrados por una herramienta de configuración como Chef o Puppet, y son leídos por el script de inicio 'maestro' para iptables que se ejecuta en el momento del arranque.


2
Sería muy cuidadoso con su nombre en su ejemplo de Debian / Ubuntu. Este es el tipo de lugar donde desea prefijar sus nombres de regla con 00, 04, 22, etc. Hay muchas reglas de iptables que dependen del orden, y si las carga en el orden incorrecto, tendrá cosas rotas Sugeriría almacenarlos en un solo archivo a menos que realmente sepa lo que está haciendo.
Christopher Cashell

1

Además de iptables-save(y iptables-restore), los esquemas de firewall complicados se manejan mejor con programas dedicados. Por ejemplo, hemos utilizado shorewall("iptables hecho fácil") para configurar iptables.

Herramientas más simples también están disponibles, como Firestarter y KMyFirewall .


66
Estoy en desacuerdo. Los casos simples se pueden manejar fácilmente con los programas dedicados, pero para una regla compleja, no puedo pensar en nada más claro que iptables (más claro significa no ambiguo, no es necesario para principiantes)
Mikeage

2
Depende de por qué quieres simplificar las reglas. Creo que el archivo iptables.rules puede ser perfectamente legible. Es importante aprovechar los argumentos de los comentarios para que todo tenga sentido.
spoulson

No estoy de acuerdo con tu desacuerdo. Si se enfoca en hacer que sus comandos de iptables sean legibles, no los ordenará ni usará cadenas, por lo que las reglas son tan eficientes como podrían ser.
Zoredache

1
Zoredache - Creo que Mikeage está más bien que mal aquí Las reglas de iptables pueden ser bastante inequívocas, aunque serían (para una persona menos experta como yo) difíciles de leer. No creo que Mikeage fuera fácil de leer.
Michael Kohne

1

Esto depende de la distribución que use. Algunas distribuciones, especialmente aquellas basadas en una distribución de Red Hat, mantienen las reglas de iptables automáticamente pero en su propio directorio especial. Estoy más familiarizado con RHEL y las reglas de iptables se pueden encontrar en / etc / sysconfig / iptables. Familiarizarse con la sintaxis de las reglas de iptables puede ser complicado al principio, pero es bastante fácil una vez que se acostumbra.

El sitio web netfilter tiene mucha documentación sobre iptables, incluidas algunas introducciones. Si está dispuesto a leer un poco, puede encontrar mucha buena información aquí: http://www.netfilter.org/documentation/


En redhat también es posible que desee mantener actualizado / etc / sysconfig / system-config-securitylevel. Aquí es donde system-config-securitylevel-tui obtiene sus reglas al inicio. Si no mantiene actualizado / etc / sysconfig / system-config-securitylevel, si alguien ejecuta system-config-securitylevel-tui puede perder Las reglas almacenadas en / etc / sysconfig / iptables.
Jason Tan

1

Esta pregunta está muy cerca de ser un dup de 4934 y está relacionada con 397 .

Utilizo firehol combinado con una interfaz web que desarrollé para administrar el archivo de configuración.

Realmente me gusta Firehol, proporciona una sintaxis más simple que usar iptables directamente.

  • Puede usar el comando de depuración firehol para saber exactamente qué comandos de iptables se generan
  • Si tiene un error en su configuración e inicia el firewall, firehol detecta el error y vuelve al estado anterior.
  • Firehol tiene un comando 'probar' que puede usar para iniciar el firewall de forma remota, si sus cambios eliminan su conexión, firehol volverá al estado anterior, si no eliminó su conexión, le pedirá que confirme el cambio.
  • Firehol tiene un gran conjunto de servicios predefinidos para que no tenga que recordar exactamente qué puertos debe tener para abrir algún protocolo oscuro.

1

Usamos un guión de inicio personalizado, por supuesto. Puedo usar for-loops para iterar sobre una lista de puertos, analizar otros archivos de configuración como vpn-users, etc. ¡Excelente!

Y iptables-restore es seguramente la forma más "canónica" de guardarlo.

Lo que quiero agregar:

Tenga en cuenta que la versión actual de iptables para cada invocación le pedirá al núcleo que le devuelva la lista completa de cadenas. Luego hará el cambio que le pidas que haga. Luego cargará la lista nuevamente.

Esto es lento (O (n ^ 2)), para nosotros necesita 5 segundos, que es demasiado largo ;-)

Si usa iptables-restore, todo se realiza en una operación rápida.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.