NAME
ipchains − IP administración de cortafuegos
SINOPSIS
ipchains
-[ADC] cadena especificación-de-regla [opciones]
ipchains -[RI] cadena numero-regla
especificación-de-regla [opciones]
ipchains -D cadena numero-regla [opciones]
ipchains -[LFZNX] [cadena] [opciones]
ipchains -P cadena objetivo [opciones]
ipchains -M [ -L | -S ] [opciones]
DESCRIPCIÓN
Ipchains se usa para configurar, mantener e inspeccioar las reglas de cortafuegos IP del núcleo Linux. Estas reglas se pueden dividir en 4 categorías diferentes: la cadena de entrada IP, la cadena de salida IP, la cadena de reenvío IP y las cadenas definidas por el usuario.
Para cada una de estas categorías se mantiene una tabla de reglas separada, cualquiera de las cuales podría remitir a una de las cadenas definidas por el usuario.
Váease ipfw(4) para más detalles.
OBJETIVOS
Una regla de
cortafuegos especifica citerios para un paquete y un
objetivo. Si el paquete no concuerda se examina la siguiente
regla de la cadena; si concuerda, la siguiente regla se
especifica por el valor del objetivo, que puede ser el
nombre de una cadena definida por el usuario o uno de los
valores especiales ACCEPT, DENY,
REJECT, MASQ, REDIRECT o RETURN.
ACCEPT significa dejar pasar el paquete. DENY
significa tirar el paquete al suelo (denegar). REJECT
significa lo mismo que denegar, pero más educado y
fácil de depurar, ya que devuelve en mensaje ICMP al
remitente indicando que el paquete fue elliminado. (Observe
que DENY y REJECT son lo mismo para paquetes
ICMP).
MASQ es sólo legal para reenvío y cadenas
definidas por el usuario, y sólo se puede usar cuando
el núcleo está compilado con
CONFIG_IP_MASQUERADE definida. Con esto, los paquetes
se enmascaran como si estuvieran originados desde el host
local. Más aún, los paquetes devueltos
serán reconocidos y desenmascarados
automáticamente y entonces pasados a la cadena de
reenvío.
REDIRECT es sólo legal para las cadenas de
entrada y definidas por el usuario, y sólo se puede
usar cuando en núcleo linux está compilado con
CONFIG_IP_TRANSPARENT_PROXY definido. Con esto, los
paquetes se redirigen al socket local, incluso si son
enviados a un host remoto. Si el puerto de
redirección especificado es 0, que es el valor por
defecto, el puerto objetivo de un paquete se usa como puerto
de redirección. Cuando se usa este objetivo, se puede
suministrar un argumento extra, el número de puerto.
Si se llega al final de una cadena definida por el usuario,
o se concuerda con una regla con objetivo RETURN, se
examina la siguiente regla de la cadena previa (llamada). Si
se llega al final de una cadena predefinida o se concuerda
con una regla de la cadena predefinida con el objetivo
RETURN el objetivo especificado por la
política de la cadena determina el destino del
paquete.
OPCIONES
Las opciones que reconoce ipchains se pueden dividir en varios grupos diferentes.
MANDATOS
Estas opciones indican la acción específica
que hay que realizar; sólo se puede especificar una
de ellas en la línea de mandatos, salvo que
más abajo se especifique lo contrario. En todas las
versiones largas de los nombres de mandatos y nombres de
opciones, sólo es necesario especificar suficientes
letras para asegurarse de que ipchains puede
distinguirla de las otras opciones.
-A, --append
Añade una o más reglas al final de la cadena seleccionada. Cuando los nombres origen y/o destino se resuelven a más de una dirección, se añade una nueva regla para cada posible combinación de dirección.
-D, --delete
Elimina una o más reglas de la cadena seleccionada. Hay dos versiones de este comando: la regla se puede especificar como el número de la cadena (empezando en 1 para la primera regla) o como una regla que concuerde.
-R, --replace
Sustituye una regla de la cadena seleccionada. Si los nombres origen y/o destino se resuelven a múltiples direcciones, el mandato fallará. Las reglas se numeran comenzando por 1.
-I, --insert
Inserta una o más reglas en la cadena seleccionada con el número indicado de regla. Así, si la regla tiene el número 1 la regla o reglas se insertan al principio de la cadena.
-L, --list
Muestra todas las reglas de la cadena seleccionada. Si no hay cadena seleccionada, se listan todas las cadenas. Es legal especificar la opción -Z (cero) también, en cuyo caso no se puede especificar cadena. La salida exacta está determinada por los otros argumentos indicados.
-F, --flush
Vacía la cadena seleccionada. Es equivalente a borrar todas las reglas una a una.
-Z, --zero
Pone a cero los contadores de octetos y paquetes de todas las cadenas. Es legal specificar la opción -L, --list (list) también, para ver los contadores inmediatamente antes de que sean borrados; si se hace esto no se puede indicar una cadena específica. (Esto mostrará y borrará todo).
-N, --new-chain
Crea una nueva cadena definida por el usuario con el nombre dado. No puede haber un objetivo con ese nombre existente.
-X, --delete-chain
Borra la cadena definida por el usuario especificada. No pueden haber referencias a la cadena (si hay tiene que borrar o sustituir las referidas reglas antes de poder borrar la cadena). Si no se dan argumentos, intentará eliminar todas las cadenas no predefinidas.
-P, --policy
Fija la política para la cadena con un destino dado. Véase la sección OBJETIVOS para los objetivos legles. Sólo las cadenas no definidas por el usuario pueden tener políticas, y ni las cadenas predefinidas ni las definidas por el usuario pueden ser objetivos de política.
-M, --masquerading
Esta opción permite ver las conexiones enmascaradas actualmente (en conjunción con la opción -L) o fija los parámetros de enmascaramiento del núcleo (con la opción -S).
-S, --set tcp tcpfin udp
Cambia los plazos de tiempo (timeouts) usados para enmascaramiento Este comando siempre toma 3 parámetros, que representan los valores de los temporizadores (en segundos) para sesiones TCP, sesiones TCP tras recibir un paquete FIN, y paquetes UDP respectivamente. Un valor de temporizador 0 significa que se conserva el valor correspondiente de la entrada. Esta opción sólo está permitida en combinación con la bandera -M.
-C, --check
Verifica el paquete dado con la regla seleccionada. Es extremadamente útil para comprobar, ya que se usan las mismas rutinas del núcleo para verificar paquetes "reales" se usan para verificar este paquete. Se puede usar para verificar cadenas definidas por el usuario y cadenas predefinidas. Los mismos argumentos que se usan para especificar reglas de cortafuegos son los que se usan para construir el paquete el paquete que se quiere comprobar. En particular son obligatorias las banderas -s (origen), -d (destino), -p (protocolo) y -i (interfaz).
-h |
Ayuda. Da una descripción (actualmente breve) de la sintaxis del mandato. |
PARÁMETROS
Los siguientes parámetros afectan las
especificaciones de reglas (como se usan en los mandatos
add, delete, replace, append y check).
-p, --protocol[!] protocol
El protocolo de la regla del paquete que se quiere verificar. El protocolo especificado puede ser uno de los siguientes: tcp, udp, icmp o all, o puede ser un valor numérico, que representa uno de estos protocolos u otro diferente. También está permitido un protocolo de nombre de /etc/protocols. Un argumento "!" antes del protocolo invierte el test. El número cero es equivalente a all. Protocolo all concordará con cualquier protocolo y es tomado por defecto cuando se omite esta opción. All no se puede usar en combinación con el mandato check.
-s, --source [!] dirección/máscara] [!] [puerto[:puerto]]
Especificación de
origen. Dirección puede ser un nombre de host,
un nombre de red o una simple dirección IP. La
máscara puede ser una máscara de red o
un simple número que especifique el número de
unos (1) a la izquierda en la máscara de red.
Así, una máscara de 24 es equivalente a
255.255.255.0. Un argumento "!" antes de la
especificación de dirección invierto el
sentido de la dirección.
El origen puede incluir especificaciones de puertos o tipo
ICMP. Esto puede ser bien un nombre de servicio, un
número de puerto, un tipo numérico ICMP o uno
de los nombres de tipo ICMP mostrados por el mandato
ipchains -h icmp. Observe que muchos de estos nombres
ICMP se refieren al tipo y código, lo que significa
que un código ICMP tras la bandera -d es
ilegal. En el resto de este párrafo, un port
significa bien una especificación de puerto o un tipo
ICMP. Se puede especificar un rango usando el formato
puerto:puerto. Si se omite el primer puerto se
supone "0"; si se omite el último, se
supone "65535".
Los puertos se pueden especificar sólo en
combinación con los protocolos tcp, udp
o icmp Un "!" antes de la
especificación de puerto invierte el sentido. Cuando
se especifica el mandato check, se requiere sólo un
puerto, y si se especifica la bandera -f (fragmento)
no se permiten puertos. La bandera --src es un alias
para esta opción.
--source-port [!] [puerto[:puerto]]
Esto permite separar las especificaciones del puerto origen o rango de puertos. Véase la descripción anterior de la bandera -s para más detalles. La bandera --sport es un alias de esta opción.
-d, --destination [!] dirección[/máscara] [!] [puerto[:puerto]]
Especificación de destino. Véase la descripción de la bandera -s (origen) para una detallada descripción de la sintaxis. Para ICMP, que no tiene puertos un "puerto destino" se refiere a un código numérico ICMP. La bandera --dst es un alias de esta opción.
--destination-port [!] [puerto[:puerto]]
Esto permite separar especificacioens de puertos. Véase la descripción de la bandera -s para los detalles. la bandera --dport es un alias de esta opción.
--icmp-type [!] nombre-de tipo
Esto permite especificaciones de tipo ICMP This allows specification of the ICMP type (use la opción -h icmp para ver los nombres de tipo ICMP válidos). Con frecuencia es más conveniente añadirlo a las especificacones de destino.
-j, --jump objetivo
Esto especifica el objetivo de la regla; i.e., qué hacer con el paquete si concuerda con la regla. El objetivo puede ser una cadena definida por el usuario (no en la que está la regla) o uno de los objetivos especiales que decide el destino del paquete de forma inmediata. Si omitimos esta opción en una regla, entonces la concordancia no tendrá efecto sobre el destino del paquete, pero se incremnetarán los contadores de la regla.
-i, --interface [!] nombre
Nombre opcional de un interfaz a través del cual se reciben los paquetes, o mediante el cual salen los paquetes se envían. Cuando se omite esta opción se supone una cadena vacía, que tiene un significado especial, y concordará con cualquier nombre de interfaz. Cuando se usa el argumento "!" antes del nombre de interfaz, se invierte el sentido. Si el nombre de interfaz termina en un "+" entonces concordará cualquier nombre de interfaz que empiece con ese nombre.
[!] -f, --fragment
Esto significa que la regla sólo se refiere al segundo o siguientes fragmentos de paquetes fragmentados. Como no hay forma de indicar los puertos origen y destino de tales paquetes (o tipo ICMP), esos paquetes, tales paquetes no verificarán ninguna regla que los especifique. Cuando el argumento "!" precede a la bandera -f, se invierte el sentido.
OTRAS
OPCIONES
Se pueden especificar las siguientes opciones adicionales:
-b, --bidirectional
Modo bidireccional. La regla concordará con los paquetes IP en ambas direcciones; esto tiene los mismos efectos que repetir la regla cambiando origen y destino.
-v, --verbose
Salida documentada. Esta opción hace que el mantato list muestre la driección del interfaz, las opciones de la regla (si hay) y las máscaras TOS. Los contadores también se muestran con los sufijos ’K’, ’M’ o ’G’ para multiplicadores 1000, 1,000,000 y 1,000,000,000 respectivamente (pero vea la bandera -x para cambiar esto). Cuando se usa en combinación con -M, la información relativa a los núeros de secuencia delta también se mostrarán. Para añadir, insertar, borrar y sustituir, esto hace que se muestre inforamción detallada sobre la regla.
-n, --numeric
Salida numérica Las direcciones IP y los números de puertos se imprimirán en formato numérico. Por defecto, el programa intentará mostrarlos como nombres de hosts, nombres de redes o servicios (cuando sea aplicable).
-l, --log
Activa el registro del núcleo de los paquetes que concuerden. Cuando esta opción está activa para una regla, el núcleo Linux imprimirá cierta información de todos los paquetes que concuerden (como la mayoría de los campos de cabeceras IP) mediante printk().
-o, --output [tamaño-máximo]
Copia los paquetes al dispositivo espacio de usuario. Esto es en la actualidad principalmente para desarrolladores que quieren jugar con efectos de cortafuegos en su espacio. El argumento opcional tamaño-máximo se puede usar para limitar el máximo número de bytes del paquete que se van a copiar. Esta opción sólo es válida si el núcleo se ha compilado con CONFIG_IP_FIREWALL_NETLINK activo.
-m, --mark valor-marca
Marca paquetes concordados. Los paquetes se pueden marcar con un valor entero sin signo de 32 bits que (algún día) puede cambiar su manejo interno. Si no es un "kernel hacker" no es probable que tenga que preocuparse por esto. Si la cadena valor-marca empieza con + o -, este valor se añade o resta del valor actual del valor de marca de paquetes (que empieza en cero).
-t, --TOS andmask xormask
Máscara usada para modificar el campo TOS de la cabecera IP. Cuando un paquete concuerda con una regla, a su campo TOS, priemero se hace un and con la primera máscara y al resultado de esto se le hace un xor con la segunda máscara. Las máscaras se tiene que especificar como valores hexadecimales de 8-bit. Como el LSB del campo TOS debe quedar inalterado (RFC 1349), los valores TOS, que hicieran que se alterase, se rechazan, como es cualquier regla que siempre ponga más que el bit TOS. Las reglas que podrían poner múltiples bits TOS para ciertos paquetes originan avisos (enviados a stdout) que se pueden ignorar si sabe que paquetes con valores TOS nuncan alcanzarán esta regla. Obviamente manipular el TOS es un gesto sin sentido si el objetivo de la regla es DENY o REJECT.
-x, --exact
Expande números. Muestra el valor exacto de los contadores de bytes y paquetes en lugar de sólo los números redondeados en K (múltiplos de 1000) M (múltiplos de 1000K) o G (múltiplss de 1000M). Esta opción sólo es relevante para el mandato -L.
[!] -y, --syn
Sólo concuerda con paquetes TCP con el bit SYN activo y los bits ACK y FIN limpios. Tales paquetes se usan para las solicitudes de inicio de conexión TCP; por ejemplo, bloqueando tales paquetes entrantes en un interfaz, prevendrá las conexiones TCP, pero las conexioenes salientes no se verán afectadas. Esta opción sólo tiene sentido cuando el tipo de protocolo está como TCP. Si la bandera "!" flag precede al "-y", el sentido de la opción se invierte.
FICHEROS
/proc/net/ip_fwchains
/proc/net/ip_masquerade
BUGS
No hay forma de reiniciar los contadores de paquetes y bytes en una única cadena. Es una limitación del núcleo.
No se realiza la detección de bucles en ipchains; los paquetes en un bucle se eliminan y se registran, pero esto será lo primero que encontrará sobre esto si accidentalmente crea un bucle.
La explicación de qué efectos tiene marcar un paquete es vaga intencianlamente hasta que se publique la documentación del núcleo que describe las rutinas de secuenciación de paquetes del núcleo.
No hay forma de poner a cero los contadores de política (i.e. las cadenas predefinidas).
FALLOS
Este ipchains es muy diferente al ipfwadm by Jos Vos, ya que usa los nuevos árboles de cortafuegos IP. Su funcionalidad incluye ipfwadm, y hay normalmente una aplicación 1:1 de los mandatos. Hay, sin embargo, algunos cambios con los que debería tener cuidado.
Los fragmentos se manejan de diferente forma. Todos los fragmentos tras el primero usado se dejan pasar (que normalmente es seguro); ahora se pueden filtrar. Esto significa que probablemente añadirá una regla específica para aceptar fragmentos si los está convirtiendo. También busque las antiguas reglas de contabilidad que verifican los puertos origen y destino de 0xFFFF (0xFF para paquetes ICMP) que era la anterior forma de contabilizar los fragmentos.
La reglas de
contabilidad ahora simplemente están integradas en
las cadenas de entrada y salidad; puede simular el anterior
comportamiento como:
ipchains -N acctin
ipchains -N acctout
ipchains -N acctio
ipchains -I input -j acctio
ipchains -I input -j acctin
ipchains -I output -j acctio
ipchains -I output -j acctout
Esto crea tres cadenas definidas acctin,
acctout y acctio, que son para contener
cualquier regla de contabilidad (estas reglas se
deberían especificar sin una bandera -j para
que los paquetes simplemente lo pasen sin perjudicar
nada).
A MASQ o REDIRECT objetivos encontrados por el núcleo fuera de lugar (i.e. no durante una regla de reenvío o de entrada respectivamente) ocasionarán un mensaje a syslog y que el paquete sea descartado.
El anterior comportamiento de concordancias con SYN y ACK (que era previamente ignorado para paquetes no TCP) ha cambiado; la opción SYN no es válida para reglas no específicas TCP.
La opción de concordancia ACK ( -k) ya no se soporta; la combinación de ! y -y proporcionan la equivalencia).
Ahora es ilegal especificar una máscara TOS que acitve o modifique el bit TOS menos significativo; previamente las máscaras TOS eran modificadas silenciosamente por el núcleo si intentaban hacer esto.
La bandera -b ahora se gestiona simplemente insertando o borrando un par de reglas, una con las especificaciones de origen y destino intercambiadas.
No hay forma de especificar un interfaz por dirección: use su nombre.
VÉASE TAMBIÉN
AUTOR
Rusty Russell <Paul.Russell [AT] rustcorp.au>