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.