1 votos

límite del conjunto de reglas ipfw

Estamos usando ipfw en OSX 10.6 Server, 10.7 Server... todo funciona bien hasta que añadimos demasiadas reglas, creo.

ipfw seguirá funcionando, pero sólo procesará hasta cierto número de reglas.

Actualmente wc -l /etc/ipfilter/ipfw.conf da 10486.

ipfw está dando un Abort Trap después de procesar parcialmente el archivo /etc/ipfilter/ipfw.conf. Parece que el límite por defecto del número de reglas es inferior a 10486.

Buscamos la respuesta extensamente y llegamos a la conclusión de que para aumentar este límite debemos usar sysctl -w net.inet.ip.fw.dyn_max=UN NÚMERO MAYOR.

Lo intentamos:

sh-3.2# sysctl -w net.inet.ip.fw.dyn_max=32768
net.inet.ip.fw.dyn_max: 4096 -> 32768

pero el Abort Trap sigue ocurriendo en el mismo número de línea en /etc/ipfilter/ipfw.conf. No hay ninguna diferencia.

Esto es lo que hay en Console:

Process:         Line 9999 [92737]
Path:            /sbin/ipfw
Identifier:      Line 9999
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  running job [92734]

Date/Time:       2017-01-01 06:14:05.155 +0800
OS Version:      Mac OS X Server 10.6.4 (10F616)
Report Version:  6

Anonymous UUID:                      A34B328D-1392-4E66-AE5A-A1AAD361FB0F

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
__abort() called

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libSystem.B.dylib               0x00007fff818b83d6 __kill + 10
1   libSystem.B.dylib               0x00007fff81958913 __abort + 103
2   libSystem.B.dylib               0x00007fff8194d157 mach_msg_receive + 0
3   libSystem.B.dylib               0x00007fff818ab898 __sprintf_chk + 196
4   ipfw                            0x000000010000829c 0x100000000 + 33436
5   ipfw                            0x00000001000016a0 0x100000000 + 5792

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x00007fff5fbff830  rcx: 0x00007fff5fbff828  rdx: 0x0000000000000000
  rdi: 0x0000000000016a41  rsi: 0x0000000000000006  rbp: 0x00007fff5fbff850  rsp: 0x00007fff5fbff828
   r8: 0x0000000000000001   r9: 0x0000000100100ec0  r10: 0x00007fff818b4412  r11: 0x0000000000000206
  r12: 0x00007fff702d0ec0  r13: 0x00007fff5fbff9c0  r14: 0x00007fff702c25c0  r15: 0x00007fff5fbffdc0
  rip: 0x00007fff818b83d6  rfl: 0x0000000000000206  cr2: 0x000000002bcb1000

Binary Images:
       0x100000000 -        0x10000afff +ipfw ??? (???) <54351948-0FF7-75DA-5974-ECA1CE04565A> /sbin/ipfw
    0x7fff5fc00000 -     0x7fff5fc3bdef  dyld 132.1 (???) <B536F2F1-9DF1-3B6C-1C2C-9075EA219A06> /usr/lib/dyld
    0x7fff81869000 -     0x7fff81a29fef  libSystem.B.dylib 125.2.0 (compatibility 1.0.0) <95E02DD0-ADEA-745B-E7FA-ABA064E4658C> /usr/lib/libSystem.B.dylib
    0x7fff83937000 -     0x7fff8393bff7  libmathCommon.A.dylib 315.0.0 (compatibility 1.0.0) <95718673-FEEE-B6ED-B127-BCDBDB60D4E5> /usr/lib/system/libmathCommon.A.dylib
    0x7fffffe00000 -     0x7fffffe01fff  libSystem.B.dylib ??? (???) <95E02DD0-ADEA-745B-E7FA-ABA064E4658C> /usr/lib/libSystem.B.dylib

La salida de sysctl -a es la siguiente:

net.inet.ip.fw.enable: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.one_pass: 0
net.inet.ip.fw.debug: 0
net.inet.ip.fw.verbose: 0
net.inet.ip.fw.verbose_limit: 0
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_count: 0
net.inet.ip.fw.dyn_max: 24576
net.inet.ip.fw.static_count: 9964
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_keepalive: 1

Colocamos la siguiente línea en /etc/sysctl.conf y reiniciamos.

net.inet.ip.fw.dyn_max=24576

0 votos

¿En qué se basa para suponer que ipfw falla debido a demasiadas reglas (y no sólo a un error en la configuración)?

0 votos

Yo creo que sí...

1voto

klanomath Puntos 19587

Para aumentar el número de reglas dinámicas posibles hay que crear /etc/sysctl.conf con el contenido net.inet.ip.fw.dyn_max=32768 o si el archivo ya existe, añada la línea correspondiente.

No es suficiente con cambiar el valor temporalmente con (sudo) sysctl -w net.inet.ip.fw.dyn_max=32768 porque no sobrevivirá a un reinicio.

0 votos

Descubrí que poner lo anterior en el archivo sobrevive a los reinicios, pero no tiene efecto en el número de reglas dyn que ipfw puede almacenar. Descubrí que el número de reglas activas en ipfw es 9963, que coincide con el valor net.inet.ip.fw.static_count=9963 de sysctl. Pero tener un valor mayor almacenado en /etc/sysctl.conf no hará ninguna diferencia... después de reiniciar el valor activo sigue siendo 9963...

0 votos

@charleslcso el valor de *.static_count no se puede aumentar o disminuir porque simplemente representa el número de todas las reglas estáticas pero no las limita. Por favor, añade la salida de sysctl -A | grep net.inet.ip.fw a su pregunta. También obtendrá algunas entradas kern.* no relacionadas - elimínelas antes de añadir la salida.

0 votos

Editado la pregunta con la salida de sysctl -a

0voto

12padams Puntos 36

El problema podría ser un Ipfw.conf excesivamente grande.

Esto es lo que indica la salida del comando wc.

El ipfw probablemente fue escrito con la presunción de que el archivo de configuración sólo puede ser un archivo pequeño. Su conf probablemente sobrepasó la memoria asignada para la configuración.

A continuación, si necesita 10.000 reglas en su cortafuegos, entonces algo está mal en su enfoque. ¿Puede definir sucintamente las reglas necesarias en pseudocódigo o en la gramática real del ipfw? Entonces podemos diseñar un conjunto de reglas racionalizado.

F.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X