IPCHAINS
Section: (8)
Updated: 8 Febrero 1998
Index Return to Main
Contents
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
ipfw(4)
AUTOR
Rusty Russell <[email protected]>
Index
- NAME
- SINOPSIS
- DESCRIPCIÓN
- OBJETIVOS
- OPCIONES
-
- MANDATOS
- PARÁMETROS
- OTRAS OPCIONES
- FICHEROS
- BUGS
- FALLOS
- VÉASE TAMBIÉN
- AUTOR
This document was created by man2html, using
the manual pages.
Time: 20:28:08 GMT, January 21, 2005