Está en la página 1de 27

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 1 de 27

KRIPTPOLIS
Contacto Descifrar Retos Foros
Inicio Contenido

Criptografa y Seguridad
GO

TrueCrypt

Cortafuegos

iptables

Trminos de uso

ATENCIN: Este sitio ha dejado de actualizarse el 15 de Abril de 2012 y se mantiene como archivo histrico de los contenidos publicados entre 2004 y 2012. Por favor, visita nuestro nuevo sitio para acceder a informacin actualizada. Muchas gracias. Andy

SOBRE EL AUTOR

IPTABLES (1) - IPTABLES Bsico


OCT

25

Por Andy |
Desconectado Se le vio por aqu: hace 51 semanas 4 das Ingres: 23/08/2008

Por Andy
En ste primer artculo de la serie, construiremos un script que crear un conjunto de reglas bsicas apropiadas para todo equipo Linux, independientemente de la configuracin de red del mismo, como ser cantidad o tipo de tarjetas de red, nombre de los dispositivos, direcciones IP, etc. Si bien hay muchos ejemplos de scripts IPTABLES por la red, lo interesante de ste es que se puede llevar a cualquier equipo sin cambiar nada, con lo que cubriremos lo bsico con total facilidad... Este script es apropiado para mquinas con "ip forwarding" deshabilitado. Esto quiere decir que aunque el equipo tenga ms de una interfaz de red, slo utilizar las mismas para enviar y recibir trfico propio y no para enrutar trfico de otros equipos entre redes distintas. Tambin mencionar que slo se tratar el caso de IPv4, dejando IPv6 como ejercicio para el lector (siempre he querido decir eso).

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 2 de 27

Para ejecutar IPTABLES o scripts que invoquen a IPTABLES debemos lanzar una shell como root o de lo contrario utilizar "sudo" delante de cada invocacin. Finalmente volver a mencionar que no se explicar aqu la sintaxis de IPTABLES. La misma se puede consultar aqu y est disponible en varios idiomas y formatos. Comencemos.

Inicializacin
#!/bin/bash ##################################################################### # Basic Firewall Script # Written by Andy # Published in Kriptopolis.net during October 2010 ##################################################################### ##################################################################### # Initialization Section ##################################################################### LOGGER="/usr/bin/logger -p kern.info -t FIREWALL" $LOGGER Initializing #---- Functions to set the file to one or zero enable () { for file in $@; do echo 1 > $file; $LOGGER enabled $file; done } disable () { for file in $@; do echo 0 > $file; $LOGGER disabled $file; done } #---- Binary files location IPTABLES="/sbin/iptables"

No hay mucho para comentar aqu. Se definen un par de funciones que utilizaremos ms adelante con ficheros de "/proc", se asigna una variable para informar de las acciones realizadas en el log del sistema (tambin se podra haber hecho un alias) y se definen variables para invocar a los ficheros ejecutables. Lo de definir variables para invocar a los ejecutables tiene varias ventajas: Ahorra al sistema tener que buscar al ejecutable en el PATH.

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 3 de 27

Permite cambiar de ejecutable en caso de preferir otro alternativo (por ejemplo: utilizar "egrep" en vez de "grep") con solo cambiar la asignacin de la variable en vez de cambiar cada utilizacin. Permite adecuar ms fcilmente el script a distribuciones que guarden sus ejecutables en otro sitio. Estoy acostumbrado a hacerlo asi en todos mis scripts. Las rutas de los ejecutables de ste y otros scripts de la presente serie de artculos corresponden a las que se pueden encontrar en distribuciones Debian y derivados. Revisad vuestro sistema y haced los cambios necesarios.

Subsistema de red
Al principio del script se configuran algunas directivas del subsistema de red utilizando el filesystem "/proc" y las funciones "enable" y "disable" definidas en la seccin anterior. Notar que tambin se podra haber utilizado el programa "/sbin/sysctl" para lograr el mismo efecto, aunque se hace bastante ms difcil al no poder utilizar "*" para cambiar varios valores -desconocidos- de una vez, como debe ser en un script genrico.
##################################################################### # Network subsystem configuration ##################################################################### $LOGGER net config start #---- Disable IP forwarding disable /proc/sys/net/ipv4/ip_forward #---- Disable response to broadcasts. You don't want yourself becoming a Smurf amplifier enable /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #---- Enable bad error message protection enable /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses #---- Turn on reverse path filtering. Safer, but breaks asymetric routing and/or IPSEC enable /proc/sys/net/ipv4/conf/*/rp_filter #---- Don't accept source routed packets. Source routing is rarely used for legitimate purposes disable /proc/sys/net/ipv4/conf/*/accept_source_route #---- Disable ICMP redirect acceptance which can be used to alter your routing tables disable /proc/sys/net/ipv4/conf/*/accept_redirects

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 4 de 27

#---- As we don't accept redirects, don't send Redirect messages either disable /proc/sys/net/ipv4/conf/*/send_redirects #---- Ignore packets with impossible addresses disable /proc/sys/net/ipv4/conf/*/log_martians #---- Protect against wrapping sequence numbers and aid round trip time measurement enable /proc/sys/net/ipv4/tcp_timestamps #---- Help against syn-flood DoS or DDoS attacks using particular choices of initial TCP sequence numbers enable /proc/sys/net/ipv4/tcp_syncookies #---- Use Selective ACK which can be used to signify that specific packets are missing disable /proc/sys/net/ipv4/tcp_sack $LOGGER net config end

Veamos las directivas una a una.

disable Es para evitar enrutar paquetes entre distintas interfaces de red. Como se ip_forward mencion antes, este script est destinado a mquinas sin "ip forwarding". enable Con sto hacemos que el sistema ignore los pedidos de PING a direcciones de broadcast. Los mismos no tienen sentido y pueden ser utilizados para ataques icmp_echo_ignore_broadcasts
smurf.

enable Esto protege al sistema de errores esprios que algn atacante puede estar envindonos. Sin esta directiva, el sistema enviara a syslog este tipo de errores, icmp_ignore_bogus_error_responses
llenar la particin de log. Con esta directiva estos errores son ignorados silenciosamente.

generando carga en CPU, disco, posiblemente red y pudiendo llegar al extremo de

enable rp_filter Mediante esta directiva se filtran paquetes que entran por una interfaz, pero con
enrutara el paquete si el mismo fuese de salida y si la interfaz resultante es

un IP de origen que est enrutado por otra interfaz. El kernel consulta por dnde distinta a la que est entrando, el paquete se descarta silencionsamente. IPSEC se queja si se utiliza esta directiva sobre interfaces de red fsicas.

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 5 de 27

disable Aqu le decimos al sistema operativo que no acepte paquetes que indiquen desde origen por dnde se deben enrutar, sino que confiamos en las tablas de routing del accept_source_route
sistema operativo.

disable Esto instruye al sistema para que ignore paquetes ICMP del tipo "redirect". accept_redirects Independientemente de si estos paquetes sean bloqueados o no luego por
IPTABLES, el sistema los ignorar y no cambiar sus tablas de routing.

disable Asimismo se pide que el sistema no enve este tipo de paquetes, que de todos send_redirects modos slo deberan enviarlos los routers (y, como ya se ha dicho antes, este script es para sistemas sin "ip forwarding"). disable Esta directiva indica que se deben ignorar silenciosamente los paquetes con IPs log_martians "imposibles". Hay otra lnea de pensamiento segn la cual se debe alertar por syslog de la presencia de estos paquetes en la red (utilizando "enable" en vez de "disable"). Sin embargo, considero que ignorarlos al menos es coherente con la
no ver estos paquetes en el log del sistema, especialmente en instalaciones con mquinas Windows mal configuradas ya que a menudo estas se "autoconfiguran" con IPs del rango 169.254.0.0/16 en segmentos de red con otra numeracin, hacindolos candidatos ideales a IPs "imposibles".

recomendacin anterior de ignorar los paquetes esprios. Personalmente prefiero

enable Mediante esta directiva, se habilita la utilizacin de timestamps tal y como est tcp_timestamps documentado en la RFC 1323. Esto ayuda a calcular el tiempo total de ida y vuelta
desde que se enva un paquete TCP al servidor remoto y se recibe su correspondiente ACK. Este tiempo es muy importante para determinar con

precisin el timeout de retransmisin, evitando retransmisiones innecesarias y

aumentando as el ancho de banda percibido. Tambin esto agrega 12 bytes al encabezado TCP, por lo que no se recomienda su utilizacin en conexiones muy etc.

lentas, como por ejemplo vnculos satelitales lentos, leased lines, mdems de 56K, Hay opiniones encontradas sobre la seguridad y la utilidad de los timestamps. Por

un lado, tienen la "vulnerabilidad" de que es tericamente posible descubrir el

uptime de una mquina que utilice TCP timestamps. Tambin hay gente que ha

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 6 de 27

reportado problemas con esta opcin. Sin embargo, por otro lado se hace prcticamente imprescindible con redes muy rpidas, pero que tengan altas latencias, o que puedan sufrir congestiones o retrasos. Los paquetes TCP de una conexin tienen un nmero de secuencia de 32 bits para el caso que lleguen a destino desordenados o que lleguen duplicados. Una transmisin sostenida a 1Gbps utilizar todos los nmeros de secuencia en poco ms de 30 segundos. Si un paquete se demora debido a una congestin momentnea puede darse el caso de tener 2 paquetes distintos en trnsito con el mismo nmero de secuencia, algo determinar cul paquete es cul, evitando confusiones. que hay que evitar por todos los medios. Si se utiliza tcp_timestamps se puede

enable Con esta directiva el sistema operativo se protege contra un ataque de denegacin tcp_syncookies de servicio consistente en llenar la cola de conexiones semi-abiertas (usualmente
unos pocos cientos de entradas, consultar /proc/sys/net/ipv4/tcp_max_syn_backlog en vuestra instalacin). El ataque puede hacerse muy fcilmente enviando muchos paquetes SYN, pero no completando el protocolo incial de conexin, lo que llena rpidamente la cola de conexiones semi-abiertas de la mquina atacada. En contraste, el o los atacantes no necesitan guardar ningn tipo de cola o tabla, ya que slo se dedican a enviar paquetes SYN, posiblemente desde direcciones IP falsas. Si la mquina atacada no cola, posiblemente rechazando conexiones vlidas, denegando el servicio. est utilizando tcp_syncookies comenzar a rechazar conexiones al llenarse dicha Al utilizar tcp_syncookies, una mquina con la cola de conexiones semi-abiertas llena sigue sin poder guardar ms conexiones all, pero en vez de eso enva un paquete de respuesta SYN/ACK especial al equipo que solicita la conexin. Dicho paquete contiene un nmero de secuencia especial (calculado a partir de los nmeros IP y puertos origen y destino, adems de una marca horaria) y si el o los atacantes estaban utilizando IPs falsos nunca lo recibirn ni respondern. Por el contrario, en un intento vlido de conexin se recibir y responder correctamente este paquete, incluyendo el nmero de secuencia y completando as el protocolo inicial de conexin (la mquina permite la conexin aunque no haya una entrada en la cola de conexiones semi-abiertas ya que es capaz de recuperar la

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 7 de 27

informacin que se guardara all desde el nmero de secuencia cuidadosamente calculado). En todo caso, este mecanismo respeta todos los protocolos (la eleccin del nmero de secuencia inicial es responsabilidad de la mquina que recibe el pedido de conexin y puede seleccionar cualquier nmero, ya sea aleatorio o calculado) y normales.

slo entra en funcionamiento en caso de ataque o sobrecarga, no en situaciones

disable tcp_sack Esta facilidad, definida en la RFC 2018, se utiliza para aumentar el rendimiento
evitando largas retransmisiones ya que permite identificar selectivamente los paquetes que se deben retransmitir (de all su nombre). Sin embargo, un atacante puede utilizarla para forzar a la mquina vctima a hacer costosas bsquedas dentro de la cola de paquetes en vuelo. Dichas bsquedas pueden consumir bastante CPU, denegando su utilizacin para otras aplicaciones y clientes en la mquina atacada. Tambin se puede alargar muchsimo el tiempo de transferencia pidiendo constantes retransmisiones, durante todo el cual tendremos un alto consumo de CPU. La mquina del atacante no necesita tener grandes cantidades de memoria ni consumir mucha CPU. Si multiplicamos este tipo de ataques por varios clientes maliciosos, tenemos un ataque distribudo de denegacin de servicio en toda regla. Por este motivo se recomienda no activar esta opcin.

Mdulos

En la siguiente seccin se cargarn los mdulos dinmicos necesarios para el correcto funcionamiento de IPTABLES. La mayora de los mdulos tienen que ver con el Connection Tracking y ayudan al sistema a relacionar flujos de datos que a veces no tienen relacin a simple vista. Por ejemplo: el trfico FTP se cursa por 2 puertos: el 20 y el 21, uno para datos y el otro para control, que es necesario tratar en conjunto para que las transferencias funcionen correctamente.
##################################################################### # Dynamic modules section #####################################################################

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 8 de 27

$LOGGER module loading start #---- Load needed modules - comment and uncomment as needed modprobe nf_conntrack modprobe nf_conntrack_ipv4 modprobe nf_nat # modprobe nf_conntrack_ipv6 # modprobe nf_conntrack_amanda # modprobe nf_nat_amanda modprobe nf_conntrack_h323 modprobe nf_nat_h323 modprobe nf_conntrack_ftp modprobe nf_nat_ftp # modprobe nf_conntrack_netbios_ns # modprobe nf_conntrack_irc # modprobe nf_nat_irc # modprobe nf_conntrack_proto_dccp # modprobe nf_nat_proto_dccp modprobe nf_conntrack_netlink # modprobe nf_conntrack_pptp # modprobe nf_nat_pptp # modprobe nf_conntrack_proto_udplite # modprobe nf_nat_proto_udplite # modprobe nf_conntrack_proto_gre # modprobe nf_nat_proto_gre # modprobe nf_conntrack_proto_sctp # modprobe nf_nat_proto_sctp # modprobe nf_conntrack_sane modprobe nf_conntrack_sip modprobe nf_nat_sip # modprobe nf_conntrack_tftp # modprobe nf_nat_tftp # modprobe nf_nat_snmp_basic $LOGGER module loading end

Los mdulos que estn comentados no son necesarios en muchas de las instalaciones "normales", aunque conviene que los revisis uno a uno para determinar si debis cargarlos en las vuestras. Asimismo, quizs haya mdulos que aparecen aqu cargados por utilizarlos yo (por ejemplo el de SIP) pero que en vuestra instalacin no sean necesarios.

Filtrado

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 9 de 27

Despus de inicializar el subsistema de red estamos en condiciones de comenzar con el filtrado. Como antes, procederemos presentando el script por partes y explicando el funcionamiento de cada una. Recordar que es necesaria cierta familiaridad con el funcionamiento de netfilter y con la sintaxis de IPTABLES, que no se explica aqu. Podis leer la documentacin "oficial" que est disponible en varios idiomas.

Definicin de reglas - Inicializacin


El siguiente trozo de cdigo elimina todos los filtros preexistentes (quita todas las reglas para comenzar con una "hoja en blanco") e inicializa las polticas de cada tabla. Dichas polticas dictaminan qu se hace con un paquete que haya "pasado" por todas las reglas, pero que no haya coincidido con ninguna accin terminal. Utilizarlo nicamente si sois los nicos administradores del equipo o si os ponis de acuerdo entre todos los administradores. Este trozo de cdigo borra todo lo definido por IPTABLES, incluso lo que pueda haber definido otro administrador mediante otro script...
##################################################################### # Filtering Section ##################################################################### #---- Clear the filter tables. Set default policy to drop $IPTABLES -t filter -F $IPTABLES -t filter -X $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P OUTPUT DROP $IPTABLES -t filter -P FORWARD DROP $LOGGER Cleared the filter tables $LOGGER Set default filter policy to DROP #---- Clear the nat $IPTABLES -t nat -F $IPTABLES -t nat -X $IPTABLES -t nat -P $IPTABLES -t nat -P $IPTABLES -t nat -P $LOGGER Cleared the $LOGGER Set default tables. Set default policy to accept

PREROUTING ACCEPT OUTPUT ACCEPT POSTROUTING ACCEPT nat tables nat policy to ACCEPT

#---- Clear the mangle tables. Set default policy to accept $IPTABLES -t mangle -F $IPTABLES -t mangle -X

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 10 de 27

$IPTABLES -t mangle $IPTABLES -t mangle $IPTABLES -t mangle $IPTABLES -t mangle $IPTABLES -t mangle $LOGGER Cleared the $LOGGER Set default

-P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT mangle tables mangle policy to ACCEPT

Definicin de reglas - TCPFLAGS

TCPFLAGS es una cadena que verifica que el campo FLAGS de los paquetes IP sean correctos. Primero veremos la definicin de la cadena "aislada" y luego cmo se llega a invocar la misma.
#---- Jump here from TCPFLAGS -- log and drop packets with bad flags $IPTABLES -N BADFLAGS $IPTABLES -A BADFLAGS -j LOG --log-level WARNING --log-prefix "IPT TCPFLAGS: " $IPTABLES -A BADFLAGS -j DROP #---- Create new chain for checking TCP flags $IPTABLES -N TCPFLAGS #---- Log and discard packets with invalid state $IPTABLES -A TCPFLAGS -p tcp -m state --state INVALID -j LOG --log-level WARNING --logprefix "IPT INVALID: " $IPTABLES -A TCPFLAGS -p tcp -m state --state INVALID -j DROP #---- Discard if first packet on a conversation and no SYN flag $IPTABLES -A TCPFLAGS -p tcp ! --syn -m state --state NEW -j BADFLAGS #---- Help to prevent TCP spoofing by sequence number prediction attack $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT -reject-with tcp-reset #---- FIN, PSH or URG should always be accompained by ACK $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,FIN FIN -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,PSH PSH -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,URG URG -j BADFLAGS #---- FIN, SYN and RST are mutually exclusive $IPTABLES -A TCPFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j BADFLAGS #---- Packets with no flags are invalid $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j BADFLAGS

La primera cadena, BADFLAGS, es invocada por TCPFLAGS cuando encuentra un paquete TCP con el campo FLAGS errneo. Slo escribe en el log la aparicin del paquete y luego lo descarta

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 11 de 27

silenciosamente (DROP). Si no se desea registrar la aparicin stos tipos de paquetes en el log del sistema os podis ahorrar completamente la tabla BADFLAGS y reemplazar ms abajo cada "-j BADFLAGS" por "-j DROP". La cadena TCPFLAGS verifica varias combinaciones entre el estado del paquete y el campo FLAGS para asegurar que el paquete IP est bin formado. Los paquetes con estado INVALID son descartados, previo registro en el log del sistema (no he hecho una cadena separada, como en el caso de BADFLAGS, porque se utiliza una sola vez). Los paquetes nuevos deben venir con el flag SYN activado. En caso contrario descartarlos invocando a BADFLAGS. Hay una clase de ataques de TCP spoofing en el cual el atacante pretende ser nuestro host (enva paquetes utilizando nuestro IP) y enva un paquete SYN a la vctima. La vctima responder con SYN/ACK como corresponde y si todo va bin (por ejemplo: si la vctima no hace caso de sourcerouting) el paquete llegar a nuestro host en vez de al atacante. Si no lo respondemos, el atacante puede continuar enviando paqutes y posiblemente comandos maliciosos a la vctima utilizando nuestra direccin IP (aunque sin poder leer sus respuestas). Para sto deber ser capaz de predecir el nmero de secuencia que utiliza la vctima en la respuesta SYN/ACK, cosa posible en algunos casos. Por eso es que si recibimos un paquete SYN/ACK que no sea respuesta a un SYN enviado por cerrando la conexin e impidiendo al atacante enviar ms paquetes en nuestro nombre. nosotros (o sea un paquete con state=NEW) debemos responder a la vctima con TCP RESET

Otros casos "patolgicos" son por ejemplo que los flags FIN, PSH o URG siempre deben ir acompaados del flag ACK, as como tambin que los flags FIN, SYN y RST son mutuamente excluyentes entre s, Por ltimo, un paquete con todos los bits del campo FLAGS en 0 tambin es invlido. Cualquier paquete en stas condiciones ser enviado a BADFLAGS y por lo tanto descartado. Hasta ahora, TCPFLAGS es como una subrutina de cdigo de programacin: intil si no se invoca desde ningn sitio. El siguiente fragmento de script muestra cmo se llega del procesamiento principal de paquetes a TCPFLAGS.
#---- Perform tcp flags checking for every packet $IPTABLES -A INPUT -p tcp -j TCPFLAGS $IPTABLES -A OUTPUT -p tcp -j TCPFLAGS

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 12 de 27

Vemos que absolutamente todos los paqutes TCP de entrada y de salida son verificados por TCPFLAGS antes de aceptarse. Esto incluye paquetes que utilicen cualquier interfaz de red (includa la de loopback) y desde cualquier IP. Tambin vemos que la invocacin a TCPFLAGS es la primera de las reglas de nuestro script IPTABLES. De esta forma nos aseguramos que los paquetes que sobrevivan tendrn el campo FLAGS en rden y no podrn "confundir" a aplicaciones o servicios que los reciban luego. Tambin se analizan los paquetes salientes, lo que obliga a todas las aplicaciones a enviar paquetes "correctos". Esto es algo deseable en la mayora de los casos, pero puede interferir, por ejemplo, con el uso de herramientas tales como "nmap" que pueden generar paquetes que no se ajusten a este filtrado.

Las tcnicas utilizadas por TCPFLAGS


En estas pequeas cadenas hay un par de tcnicas dignas de mencin: Separacin de verificacin y accin La cadena TCPFLAGS verifica que el paquete sea correcto examinando distintas combinaciones del campo FLAGS. Pero si encuentra que el paquete es invlido transfiere el control a la cadena BADFLAGS, que es la que toma las acciones. Esto tambin permite que la cadena BADFLAGS sea invocada desde varios sitios, ya que no analiza el estado del paquete sino que simplemente toma acciones. Evitar mltiples verificaciones La cadena BADFLAGS hace varias cosas: enviar un mensaje al log del sistema y descartar el paquete. Tener las acciones separadas permite verificar el estado del paquete una sola vez, evitando mltiples verificaciones idnticas. Consideremos el siguiente cdigo:
#---- Code extract from the TCPFLAGS sample above $IPTABLES -A TCPFLAGS -p tcp ! --syn -m state --state NEW -j BADFLAGS #---- Alternative rules with no BADFLAGS chain $IPTABLES -A TCPFLAGS -p tcp ! --syn -m state --state NEW -j LOG --log-level WARNING --log -prefix "IPT TCPFLAGS: " $IPTABLES -A TCPFLAGS -p tcp ! --syn -m state --state NEW -j DROP

Las ltimas 2 reglas hacen lo mismo que la primera sin necesidad de definir la cadena BADGLAGS. Pero tiene que verificar 2 veces el estado del paquete haciendo 2 comparaciones idnticas. Los paquetes que

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 13 de 27

no cumplan la condicin (por ejemplo los paquetes bien formados) debern transitar por 2 reglas antes de ser aceptados en vez de slo 1 en el caso de la primera regla.

Definicin de reglas - Seccin de Allow (permitir)


Lo siguiente es permitir algunos paquetes "genricos" que son necesarios para el funcionamiento de cualquier sistema.
#---- Allow anything incomming over loopback $IPTABLES -A INPUT -i lo -j ACCEPT $LOGGER Allowed anything incomming over the loopback interface #---- Allow outgoing packets generated in this machine $IPTABLES -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -p udp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #---- Allow ongoing conversations (stateful $IPTABLES -A INPUT -p tcp -m state --state $IPTABLES -A INPUT -p udp -m state --state $IPTABLES -A INPUT -p icmp -m state --state filtering) RELATED,ESTABLISHED -j ACCEPT RELATED,ESTABLISHED -j ACCEPT RELATED,ESTABLISHED -j ACCEPT

A cualquier paquete que intente llegar a la interfaz de loopback (lo) se le permite hacerlo. Esto es necesario para la comunicacin interna entre los distintos daemons y procesos del sistema. Tener en cuenta que para poder llegar a la interfaz de loopback el paquete debe ser generado internamente. No se puede llegar a lo desde el exterior. Acto seguido, se permite la salida de cualquier paquete ICMP, TCP y UDP generado por el sistema (state=NEW) y tambin "conversaciones" TCP/IP en curso (con state=ESTABLISHED o state=RELATED). Para el caso de la entrada, se permiten nicamente las respuestas a conversaciones ya en curso (stateful filtering) y no intentos de conexin nuevos... por ahora. Entre las reglas anteriores de INPUT y de OUTPUT ya hemos cubierto todos los casos de filtrado genrico. De ahora en adelante, para cualquier conexin entrante que querramos aceptar bastar con permitir el paso del primer paquete (state=NEW) mediante el cual se establecer la conversacin y luego las reglas anteriores permitirn que la misma contine sin inconvenientes.

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 14 de 27

Definicin de reglas - Aceptacin de servicios


#---- Accept (and answer) PING requests, but no faster than 1 per second. Comment if not needed $IPTABLES -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT

Esta regla permite la llegada de nuevos paquetes ICMP del tipo "echo-request" (ping), lo que provoca la generacin y envo automtico de paquetes ICMP del tipo "echo-response". Aunque dichos paquetes salientes son de una clase distinta, se consideran RELATED y se permiten por las reglas anteriores. Los paquetes ICMP entrantes se limitan aqu a 1 por segundo y los dems se descartan de forma implcita por la poltica general de DROP. Por supuesto, lo de la limitacin es opcional y se pueden cambiar sus valores lmite o directamente se puede eliminar, permitiendo la entrada de ping a cualquier ritmo. Al no mencionar ninguna placa de red o direccin IP, se aceptan paquetes de ping provenientes desde cualquier origen y entrando por cualquier interfaz de red. Agregando los parmetros adecuados se puede restringir por interfaz de red de entrada (-i), por direccin IP de origen (-s), direccin IP de destino (-d), etc. Para aceptar cualquier servicio TCP se puede proceder como en el ejemplo siguiente, correspondiente a SSH. Para ello, se crea una cadena para el tratamiento de paquetes entrantes SSH. Tambin aqu se utiliza limitacin de nuevas conexiones por unidad de tiempo. En mi caso, lo estoy limitando a 3 nuevos intentos de conexin por minuto lo cual es muy poco para algunas instalaciones, pero adecuado para mi humilde mquina personal. Si se intenta ms rpido, se descartan los paquetes silencionsamente. Dicha limitacin no afecta a los paquetes pertenecientes a sesiones ya establecidas, slo a los intentos de abrir conexiones nuevas.
#---- Create a new chain for SSH packets $IPTABLES -N SSH #---- Allow only 3 new incoming ssh connections per minute $IPTABLES -A SSH -m limit --limit 3/minute --limit-burst 1 -j ACCEPT #---- Log and drop faster connection attempts $IPTABLES -A SSH -j LOG --log-level WARNING --log-prefix "IPT SSH connection too fast: " $IPTABLES -A SSH -j DROP #---- Allow incoming ssh $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH

Tener muchsimo cuidado con limitaciones como esta, ya que pueden conducir a una denegacin de servicio (DoS) accidental. Por ejemplo: si alguien intenta acceder por SSH contnuamente (pongamos 1 vez por segundo), se descartarn paquetes (y por ende, intentos de conexin) por la limitacin de 3 por minuto. No slo se descartarn los del atacante, sino tambin los mos, y me ser muy difcil establecer

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 15 de 27

una conexin. Utilizar "recent" en vez de "limit" ayuda si nos estn bombardenado desde un mismo IP, pero no en caso de un ataque de denegacin de servicio distribudo (DDoS). Adems "recent" es ms difcil de usar. En caso que no se necesite o no se desee tener PING o acceso SSH, se pueden comentar u omitir las reglas anteriores sin afectar al resto del script. Si se necesita abrir algn otro puerto (por ejemplo: puerto TCP 80 si estamos ejecutando un servidor Apache en nuestro equipo) y no interesa limitar la cantidad de conexiones o tener una lnea de log personalizada para el mismo, se pueden agregar reglas ms simples:
#---- Feel free to open any other needed incoming port #$IPTABLES -A INPUT -p [tcp|udp] --dport YOUR_PORT -m state --state NEW -j ACCEPT

Definicin de reglas - Final


Una vez que se han permitido todos los puertos deseados, las ltimas relgas son de registrar que un paquete ha pasado por todas las cadenas y no ha sido aceptado por ninguna, por lo que se descartar (recordar que la poltica por defecto era descartar).
#---- Log (and drop by default) any other packet $IPTABLES -A INPUT -j LOG --log-level WARNING --log-prefix "IPT INPUT packet died: " $IPTABLES -A OUTPUT -j LOG --log-level WARNING --log-prefix "IPT OUTPUT packet died: " $IPTABLES -A FORWARD -j LOG --log-level WARNING --log-prefix "IPT FORWARD packet died: " $LOGGER Log and drop any other packet exit 0

Script completo
El script bsico completo queda entonces:
#!/bin/bash ##################################################################### # Basic Firewall Script # Written by Andy # Published in Kriptopolis.net during October 2010

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 16 de 27

##################################################################### ##################################################################### # Initialization Section ##################################################################### LOGGER="/usr/bin/logger -p kern.info -t FIREWALL" $LOGGER Initializing #---- Functions to set the file to one or zero enable () { for file in $@; do echo 1 > $file; $LOGGER enabled $file; done } disable () { for file in $@; do echo 0 > $file; $LOGGER disabled $file; done } #---- Binary files location IPTABLES="/sbin/iptables" ##################################################################### # Network subsystem configuration ##################################################################### $LOGGER net config start #---- Disable IP forwarding disable /proc/sys/net/ipv4/ip_forward #---- Disable response to broadcasts. You don't want yourself becoming a Smurf amplifier enable /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #---- Enable bad error message protection enable /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses #---- Turn on reverse path filtering. Safer, but breaks asymetric routing and/or IPSEC enable /proc/sys/net/ipv4/conf/*/rp_filter #---- Don't accept source routed packets. Source routing is rarely used for legitimate purposes disable /proc/sys/net/ipv4/conf/*/accept_source_route #---- Disable ICMP redirect acceptance which can be used to alter your routing tables disable /proc/sys/net/ipv4/conf/*/accept_redirects #---- As we don't accept redirects, don't send Redirect messages either disable /proc/sys/net/ipv4/conf/*/send_redirects #---- Ignore packets with impossible addresses disable /proc/sys/net/ipv4/conf/*/log_martians

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 17 de 27

#---- Protect against wrapping sequence numbers and aid round trip time measurement enable /proc/sys/net/ipv4/tcp_timestamps #---- Help against syn-flood DoS or DDoS attacks using particular choices of initial TCP sequence numbers enable /proc/sys/net/ipv4/tcp_syncookies #---- Use Selective ACK which can be used to signify that specific packets are missing disable /proc/sys/net/ipv4/tcp_sack $LOGGER net config end ##################################################################### # Dynamic modules section ##################################################################### $LOGGER module loading start #---- Load needed modules - comment and uncomment as needed modprobe nf_conntrack modprobe nf_conntrack_ipv4 modprobe nf_nat # modprobe nf_conntrack_ipv6 # modprobe nf_conntrack_amanda # modprobe nf_nat_amanda modprobe nf_conntrack_h323 modprobe nf_nat_h323 modprobe nf_conntrack_ftp modprobe nf_nat_ftp # modprobe nf_conntrack_netbios_ns # modprobe nf_conntrack_irc # modprobe nf_nat_irc # modprobe nf_conntrack_proto_dccp # modprobe nf_nat_proto_dccp modprobe nf_conntrack_netlink # modprobe nf_conntrack_pptp # modprobe nf_nat_pptp # modprobe nf_conntrack_proto_udplite # modprobe nf_nat_proto_udplite # modprobe nf_conntrack_proto_gre # modprobe nf_nat_proto_gre # modprobe nf_conntrack_proto_sctp # modprobe nf_nat_proto_sctp # modprobe nf_conntrack_sane modprobe nf_conntrack_sip modprobe nf_nat_sip # modprobe nf_conntrack_tftp

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 18 de 27

# modprobe nf_nat_tftp # modprobe nf_nat_snmp_basic $LOGGER module loading end ##################################################################### # Filtering Section ##################################################################### #---- Clear the filter tables. Set default policy to drop $IPTABLES -t filter -F $IPTABLES -t filter -X $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P OUTPUT DROP $IPTABLES -t filter -P FORWARD DROP $LOGGER Cleared the filter tables $LOGGER Set default filter policy to DROP #---- Clear the nat $IPTABLES -t nat -F $IPTABLES -t nat -X $IPTABLES -t nat -P $IPTABLES -t nat -P $IPTABLES -t nat -P $LOGGER Cleared the $LOGGER Set default tables. Set default policy to accept

PREROUTING ACCEPT OUTPUT ACCEPT POSTROUTING ACCEPT nat tables nat policy to ACCEPT

#---- Clear the mangle tables. Set default policy to accept $IPTABLES -t mangle -F $IPTABLES -t mangle -X $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P INPUT ACCEPT $IPTABLES -t mangle -P FORWARD ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT $IPTABLES -t mangle -P POSTROUTING ACCEPT $LOGGER Cleared the mangle tables $LOGGER Set default mangle policy to ACCEPT #---- Jump here from TCPFLAGS -- log and drop packets with bad flags $IPTABLES -N BADFLAGS $IPTABLES -A BADFLAGS -j LOG --log-level WARNING --log-prefix "IPT TCPFLAGS: " $IPTABLES -A BADFLAGS -j DROP #---- Create new chain for checking TCP flags $IPTABLES -N TCPFLAGS #---- Log and discard packets with invalid state $IPTABLES -A TCPFLAGS -p tcp -m state --state INVALID -j LOG --log-level WARNING --logprefix "IPT INVALID: "

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 19 de 27

$IPTABLES -A TCPFLAGS -p tcp -m state --state INVALID -j DROP #---- Discard if first packet on a conversation and no SYN flag $IPTABLES -A TCPFLAGS -p tcp ! --syn -m state --state NEW -j BADFLAGS #---- Help to prevent TCP spoofing by sequence number prediction attack $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT -reject-with tcp-reset #---- FIN, PSH or URG should always be accompained by ACK $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,FIN FIN -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,PSH PSH -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ACK,URG URG -j BADFLAGS #---- FIN, SYN and RST are mutually exclusive $IPTABLES -A TCPFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADFLAGS $IPTABLES -A TCPFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j BADFLAGS #---- Packets with no flags are invalid $IPTABLES -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j BADFLAGS #---- Perform tcp flags checking for every packet $IPTABLES -A INPUT -p tcp -j TCPFLAGS $IPTABLES -A OUTPUT -p tcp -j TCPFLAGS #---- Allow anything incomming over loopback $IPTABLES -A INPUT -i lo -j ACCEPT $LOGGER Allowed anything incomming over the loopback interface #---- Allow outgoing packets generated in this machine $IPTABLES -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -p udp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #---- Allow ongoing conversations (stateful $IPTABLES -A INPUT -p tcp -m state --state $IPTABLES -A INPUT -p udp -m state --state $IPTABLES -A INPUT -p icmp -m state --state filtering) RELATED,ESTABLISHED -j ACCEPT RELATED,ESTABLISHED -j ACCEPT RELATED,ESTABLISHED -j ACCEPT

#---- Accept (and answer) PING requests, but no faster than 1 per second. Comment if not needed $IPTABLES -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT #---- Create a new chain for SSH packets $IPTABLES -N SSH #---- Allow only 3 new incoming ssh connections per minute $IPTABLES -A SSH -m limit --limit 3/minute --limit-burst 1 -j ACCEPT #---- Log and drop faster connection attempts $IPTABLES -A SSH -j LOG --log-level WARNING --log-prefix "IPT SSH connection too fast: " $IPTABLES -A SSH -j DROP

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 20 de 27

#---- Allow incoming ssh $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH #---- Feel free to open any other needed incoming port #$IPTABLES -A INPUT -p [tcp|udp] --dport YOUR_PORT -m state --state NEW -j ACCEPT #---- Log (and drop by default) any other packet $IPTABLES -A INPUT -j LOG --log-level WARNING --log-prefix "IPT INPUT packet died: " $IPTABLES -A OUTPUT -j LOG --log-level WARNING --log-prefix "IPT OUTPUT packet died: " $IPTABLES -A FORWARD -j LOG --log-level WARNING --log-prefix "IPT FORWARD packet died: " $LOGGER Log and drop any other packet exit 0

Dicho script, aunque bsico, es genrico y funcional, lo que significa que se puede utilizar en cualquier instalacin Linux con cualquier nmero o tipo de interfaces de red. Para hacer pruebas con el mismo, os recomiendo, al menos al principio, utilizar algn PC al que tengis acceso local (por consola), ya que si tenis algn error en el script puede ser que perdis acceso remoto por red. Si os vis obligados a probar en forma remota, entonces una cosa que podis hacer es tener a mano un pequeo script slo con la parte de inicializacin del script de filtrado, a fin de "limpiar" todas las cadenas de todas las tablas y dejar el sistema sin ninguna regla de IPTABLES. Sera un script como el siguiente:
#!/bin/bash ##################################################################### # Script to clear all chains from all tables # Written by Andy # Published in Kriptopolis.net during October 2010 ##################################################################### LOGGER="/usr/bin/logger -p kern.info -t FIREWALL" #---- Clear the filter tables. Set default policy to drop $IPTABLES -t filter -F $IPTABLES -t filter -X $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P OUTPUT DROP $IPTABLES -t filter -P FORWARD DROP $LOGGER Cleared the filter tables $LOGGER Set default filter policy to DROP #---- Clear the nat tables. Set default policy to accept

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 21 de 27

$IPTABLES -t nat -F $IPTABLES -t nat -X $IPTABLES -t nat -P $IPTABLES -t nat -P $IPTABLES -t nat -P $LOGGER Cleared the $LOGGER Set default

PREROUTING ACCEPT OUTPUT ACCEPT POSTROUTING ACCEPT nat tables nat policy to ACCEPT

#---- Clear the mangle tables. Set default policy to accept $IPTABLES -t mangle -F $IPTABLES -t mangle -X $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P INPUT ACCEPT $IPTABLES -t mangle -P FORWARD ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT $IPTABLES -t mangle -P POSTROUTING ACCEPT $LOGGER Cleared the mangle tables $LOGGER Set default mangle policy to ACCEPT exit 0

Si guardis el script como "cleariptables.sh", por ejemplo, entonces podis ejecutar "(sleep 300;/path/to/script/cleariptables.sh)&" justo antes de ejecutar el script de filtrado. De esa forma sabris que al cabo de 5 minutos se eliminarn todas las reglas de IPTABLES y si habais perdido acceso al equipo por un error en el script de filtrado, podris volver a conectaros. Por otro lado, os deja slo 5 minutos para hacer pruebas. Recordar que es necesario ser root o utilizar "sudo" para poder ejecutar IPTABLES o scripts que invoquen a IPTABLES. Una vez terminadas las pruebas, si queremos que nuestro equipo est contnuamente protegido por las reglas de IPTABLES, habr que ejecutar el script durante el arranque del sistema, utilizando el mecanismo de autoejecucin que proporcione el mismo. Consultad la documentacin de vuestra distribucin. Anterior | Siguiente

En los prximos artculos veremos cmo extender y mejorar el script de filtrado para que sea algo ms que un conjunto de reglas estticas.

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 22 de 27

17 comentarios sobre IPTABLES (1) - IPTABLES Bsico

Muy interesante....
inedit00 (no verificado)
30 Octubre 2010 - 12:22pm

... el artculo, me ha encantado. Hasta ahora yo tan solo tena en los scripts de iptables la parte de borrar todas las reglas, y las de filtrado. Muy til lo de los logs, para debuguear. Aunque yo en los scripts con salida de logging, siempre uso una sintaxis parecida a esto ( en python, por ejemplo ) LOG=True def log(msg): if LOG: self.log(msg) log('Log de ejemplo') De modo que puedes poner todos los logs que quieras en el script, y hacer que se guarden o no cambiando el valor de LOG a True o False. Sobre los mdulos, se agradece la explicacin de cada uno de ellos. Un saludo, Jan. Nota: He escrito este comentario tres veces... definitivamente Control-W en un explorador no te borra una palabra como en bash, si no que te cierra la ventana :P

Muchas gracias
Andy
30 Octubre 2010 - 5:33pm

Muchas gracias por el aporte de los logs en python. En bash podra hacerse algo similar, aunque en los scripts de iptables, as como tambin los de arranque y parada de servicios, para mi el log es mandatorio. Un saludo, Andy

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 23 de 27

Seran cosas mias, pero...


car
28 Octubre 2010 - 9:17pm

..el tema en cuestin no trataba de Iptables?? Sin chistes please.

Claro que s
Sasha
30 Octubre 2010 - 2:19pm

Por supuesto, pero de vez en cuando un poco de humor no va mal. Entiendo yo. De momento estoy guardando todas las entregas para cuando saque tiempo.

Sugerencia
serhost2
27 Octubre 2010 - 12:15pm

Sugerencia para que digas sobre ipv6: comando ip6tables con misma sintaxis :) (o casi).

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 24 de 27

A la ltima fila
Sasha
26 Octubre 2010 - 2:36pm

Castigados Admin y Agustn por hablar. A la ltima fila. Estis estorbando a todos los que estn tomando apuntes, entre ellos ese que se duerme, el del zoidberg se.

(levantando la mano, para preguntar)


Agustn
26 Octubre 2010 - 8:03pm

=== Este espacio se ha dejado intencionadamente en blanco ===


No est en blanco, profe. Ceci n'est pas une pipe?

Como venga...
Sasha
27 Octubre 2010 - 9:19am

Una ms y desmonto el bic. Ser por hojas para hacer bolillas... A ver si me entero de la clase, lee. No hay una opcin de ver en modo de impresin, sin comentarios ni n de eso?

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 25 de 27

Fcil
admin
27 Octubre 2010 - 9:37am

Pulsa el icono de impresora que aparece abajo. Es pequeo pero funciona ;)

Vale profe
admin
26 Octubre 2010 - 3:09pm

Pa'maana le copiamos 100 veces: "No molestar a mis compaeros"

Sin copipaste
Sasha
26 Octubre 2010 - 3:15pm

Pero sin copipaste. Ah, y sin programarlo en C o similares, al estilo: #!/usr/bin/ksh n=0 ; while [ $n -le 100 ]; do echo "No volvere a programar para hacer trampas" let n=n+1 done

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 26 de 27

Hummm... eso lo imprime 101 veces


anv
27 Octubre 2010 - 11:15am

Hummm... eso lo imprime 101 veces. Empiezas por cero y entras con "-le 100", o sea con menor o igual que 100. O empiezas por 1 o le pones -lt en lugar de -le.

Susto!!
admin
27 Octubre 2010 - 11:23am

Pens que te referas al icono de "imprimir pgina" !

interesante pero...
anv
26 Octubre 2010 - 2:26pm

Interesante pero tal vez no sea suficientemente didctico para que quien no conozca esto se decida a apernderlo. Me qued la sensasin de que parece ms difcil de lo que es.

Silencio...
Agustn
26 Octubre 2010 - 1:36pm

http://www.kriptopolis.org/iptables-1

18/04/2013

IPTABLES (1) - IPTABLES Bsico | Kriptpolis

Pgina 27 de 27

Es preferible que te calles y algunos crean que eres imbcil, a que hables y todos estn seguros de ello. Adagio

Uhm... cuanto silencio


admin
26 Octubre 2010 - 1:10pm

Supongo que os estis estudiando el artculo antes de entrar a matar ;)

Dame tiempo
usrdxt
26 Octubre 2010 - 2:24pm

y una pantalla decente. En cuanto llegue a casa le pego un vistazo.

Kriptpolis 2013

http://www.kriptopolis.org/iptables-1

18/04/2013