Está en la página 1de 6

#!

/bin/sh ## SCRIPT de IPTABLES – ejemplo del manual de iptables ## Ejemplo de script para firewall entre red-local e internet echo -n Aplicando Reglas de Firewall… ## FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F ## Establecemos politica por defecto iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT ## Empezamos a filtrar ## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN # El localhost se deja (por ejemplo conexiones locales a mysql) /sbin/iptables -A INPUT -i lo -j ACCEPT # Al firewall tenemos acceso desde la red local iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j ACCEPT #en caso de tener apache funcionando abrir port 80 iptables -A INPUT -s 0.0.0.0/0 -p tcp –dport 80 -j ACCEPT # bloquear posibles ICMP extraños iptables -A INPUT -p icmp –icmp-type echo-request -j DROP ## Y ahora cerramos los accesos indeseados del exterior: # Nota: 0.0.0.0/0 significa: cualquier red # Cerramos el rango de puerto bien conocido iptables -A INPUT -s 0.0.0.0/0 -p tcp –dport 1:1024 -j DROP iptables -A INPUT -s 0.0.0.0/0 -p udp –dport 1:1024 -j DROP #cerrar webproxy iptables -A INPUT -s 0.0.0.0/0 -p tcp –dport 8080 -j DROP # Cerramos un puerto de gestión: webmin iptables -A INPUT -s 0.0.0.0/0 -p tcp –dport 10000 -j DROP echo ” OK . Verifique que lo que se aplica con: iptables -L -n” # Fin del script #1: Mostrando el estado de nuestro firewall Teclea el siguiente comando como root: iptables -L -n -v Ejemplos de salidas: Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination destination destination

El resultado de arriba indica que el firewall no está activo. La siguiente salida es la del firewall activado: Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 1 142 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)

No usa DNS para resolver nombres.pkts bytes target prot opt in Chain wanin (1 references) pkts bytes target prot opt in Chain wanout (1 references) pkts bytes target prot opt in out out out source source source destination destination destination Donde.0/0 state RELATED.0.0.0.0.0/0 0.0.1:Para Inspeccionar el firewall con número de lineas: iptables -n -L -v --line-numbers Salida: Chain INPUT (policy DROP) num target prot opt source 1 DROP all -.0.0.0.0.0.0/0 state RELATED.  -X : Borra cadenas  -t table_name : Selecciona una tabla y elimina reglas  -P : Establece la política por defecto (como DROP.0/0 state INVALID 0.ESTABLISHED 0.0.0.0.0.0.0.0/0 2 DROP all -.0/0 5 wanin all -.0/0 state INVALID 0.0. Esto acelera la lista.0.0. REJECT o ACCEPT) #3: Borrar reglas del firewall Para mostrar los números de línea junto a otra información para reglas existentes: .0/0 Chain OUTPUT (policy ACCEPT) num target prot opt source Chain wanin (1 references) num target prot opt source Chain wanout (1 references) num target prot opt source destination 0.  -L : Muestra las reglas.0.0.0.0/0 0.0. #1.0.  -n : Muestra la dirección ip y puerto en formato numérico.0.0/0 6 wanout all -.0/0 destination 0.0/0 4 ACCEPT all -.0.0.0.0.0/0 3 ACCEPT all -.0.0.0.0.0.0/0 0.0.0.0.0/0 3 TCPMSS tcp -.0/0 Chain FORWARD (policy DROP) num target prot opt source 1 ACCEPT all -.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0.0/0 destination destination destination Podemos usar los números de línea para borrar o añadir nuevas reglas al firewall.0/0 0.0.2: Mostrar las reglas de cadena de entrada y salida: iptables -L INPUT -n -v iptables -L OUTPUT -n -v --line-numbers #2: Parar / Iniciar / Reiniciar el firewall Si usas CentOS / RHEL / Fedora linux: service iptables stop service iptables start service iptables restart También se puede usar propio comando iptables para detenerlo y borrar todas las reglas.0.  -v : Muestra información detallada.0.0. #1.0.0.0.0.0.0/0 7 ACCEPT all -. iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT Donde:  -F : Borra todas las reglas.0.0.0.0.0.ESTABLISHED 0.0.0/0 2 ACCEPT all -.0.0.0/0 4 ACCEPT all -.

active.1 -j DROP Donde:  -D : Elimina una o más reglas de la cadena seleccionada.1.0/0 Para insertar una regla entre 1 y 2.5.0.1 Obtendrendremos la lista de IPs.54.1 2 ACCEPT all -.active.0. iptables -I INPUT 2 -s 202.0. Primero encontramos el número de línea: iptables -L INPUT -n --line-numbers Salida: Chain INPUT (policy DROP) num target prot opt source 1 DROP all -.54.1 2 DROP all -.rules cat /root/my.0.1. #4: Insertar reglas: Para insertar una o más reglas en la cadena seleccionada como el número de cadena dada usamos la siguiente sintaxis.rules #6: Restaurar reglas Para restaurar reglas desde un archivo llamado /root/my.0/0 state NEW.1. eliminamos una ip y guardamos las reglas del firewall: iptables -A INPUT -s 202.1.0/0 0. Miramos el número de la izquierda y lo usamos para borrarla. Por ejemplo para borrar la línea 4: iptables -D INPUT 4 O para encontrar una ip de origen y borrarla de la regla iptables -D INPUT -s 202.0.54.0.ESTABLISHED #5: Guardar reglas Para guardar reglas en CentOS / RHEL / Fedora Linux: service iptables save En este ejemplo.0/0 destination 0.2 -j DROP Para ver las reglas actualizadas iptables -L INPUT -n --line-numbers Salida: Chain INPUT (policy DROP) num target prot opt source 1 DROP all -.0.1.firewall.0.0.202.iptables -L INPUT -n --line-numbers iptables -L OUTPUT -n --line-numbers iptables -L OUTPUT -n --line-numbers | less iptables -L OUTPUT -n --line-numbers | grep 202.rules: iptables-restore < /root/my.active.54.1 -j DROP service iptables save Para todas las demás distros usamos: iptables-save > /root/my.rules Bajo CentOS / RHEL / Fedora Linux: service iptables restart #7: Estableces políticas de firewall por defecto Para borrar todo el tráfico: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -L -v -n .202.0/0 0.202.54.firewall.firewall.active.0.0.2 3 ACCEPT all -.0/0 state NEW.0.4.0/0 0.0.54.1.ESTABLISHED destination 0.0.0.0.firewall.

168.org/pub/linux/kernel/v3.0/24 --dport 80 -j DROP #11: Bloquear ips de salida Para bloquear el tráfico saliente a un host o dominio en concreto como por ejemplo cyberciti.kernel.40 Buscar el CIDR para 69.153.224. bloqueamos todo el tráfico saliente para dicha ip así: iptables -A OUTPUT -d 75.40: whois 69.com host -t a www.kernel.com has address 69. encontrar la dirección ip de facebook.0/19 Para prevenir el acceso externo a facebook.1.## you will not able to connect anywhere as all traffic is dropped ### ping cyberciti.2-rc5.bz2 #7.206 -j DROP Se puede usar una subred como la siguiente: iptables -A OUTPUT -d 192.4: iptables -A INPUT -s 1.40 | grep CIDR Salida: CIDR: 69.biz wget http://www.3.228.0.171.168. Los paquetes con direcciones de origen no enrutables deben rechazarse mediante la siguiente sintaxis: iptables -A INPUT -i eth1 -s 192.0.org/pub/linux/kernel/v3.ESTABLISHED -j ACCEPT iptables -L -v -n # *** now ping and wget should work *** ### ping cyberciti.tar.228.2-rc5.0/testing/linux-3.com Primero.3.2.0/testing/linux-3.1: Solo tráfico entrante bloqueado Para borrar todos los paquetes entrantes / enviados pero permitir el tráfico saliente: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state NEW.biz Salida: cyberciti.com Salida: www.com: .0.biz wget http://www.4 --dport 80 -j DROP iptables -A INPUT -i eth1 -p tcp -s 192.168.biz has address 75.0/24 -j DROP #11.168.0/24 -j DROP iptables -A OUTPUT -o eth1 -d 192.228.0/24 -j DROP iptables -A INPUT -i eth1 -s 10.1: Ejemplo – Bloquear el dominio facebook.171.0/8 -j DROP #9: Bloqueando una direción IP (BLOCK IP) PAra bloquear una ip atacante llamada 1.facebook.0/24 -j DROP #10: Bloquear peticiones entrantes de un puerto (BLOCK PORT) Para bloquear todas las solicitudes de servicio en el puerto 80: iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP Para bloquear el puerto 80 para una ip: iptables -A INPUT -p tcp -s 1.1.206 Una vez conocida la dirección ip.4 -j DROP iptables -A INPUT -s 192.126.2.1.3.facebook.171.biz: host -t a cyberciti.2.126.tar.153.0.171.bz2 #8: Borrar direcciones de red privadas en la interfaz pública IP Spoofing es nada más que para detener los siguientes rangos de direcciones IPv4 para redes privadas en sus interfaces públicas.168.

or a plain IP address … #12: Log y borrar paquetes Escribe lo siguiente para añadir al log y bloquear IP spoofing en una interfaz pública llamada eth1 iptables -A INPUT -i eth1 -s 10.0/19 -j DROP Podemos usar también nombres de dominio: iptables -A OUTPUT -p tcp -d www.1.100 and 192.20-192.1.100-192.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT ## open cups (printing service) udp/tcp port 631 for LAN users ## iptables -A INPUT -s 192.0.1.168.168.1.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10. Para añadir al log y elminar spoofing cada 5 minutos.168.168.0.com -j DROP De la página del man de iptables: … specifying any name to be resolved with a remote query such as DNS (e.0/24 -p udp -m udp --dport 631 -j ACCEPT .200 ## iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.g.224.1.200 -j ACCEPT ## nat example ## iptables -t nat -A POSTROUTING -j SNAT --to-source 192.1.1. facebook.0.168.com is a really bad idea). Se usa para prevenir que el archivo de log se inunde.0/8 -j DROP #14: Aceptar o denegar tráfico desde dirección MAC iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP ## *only accept traffic for TCP port # 8080 from mac 00:0F:EA:91:04:07 * ## iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT #15: Bloquear o permitir peticiones ping ICMP Para bloquear peticiones ping ICMP iptables -A INPUT -p icmp --icmp-type echo-request -j DROP iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP Las respuestas al ping también se puede limitar a ciertas redes o hosts.1.0/8 -j DROP Por defecto el log está en el archivo /var/log/messages tail -f /var/log/messages grep --color 'IP SPOOF' /var/log/messages #13: Log y borrar paquetes con un número limitado de entradas al log El módulo -m limit puede limitar el número de entradas al log creadas por tiempo.168.facebook..0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10. a network IP address (with /mask).0.0/24 -p icmp --icmp-type echo-request -j ACCEPT Lo siguiente solo acepta limitados tipos de peticiones ICMP: ### ** assumed that default INPUT policy set to DROP ** ############# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT ## ** all our server to respond to pings ** ## iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT #16: Abrir un rango de puertos iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT #17: Abrir un rango de direcciones ip ## only accept connection to tcp port 80 (Apache) if ip is between 192.0. iptables -A INPUT -s 192.iptables -A OUTPUT -p tcp -d 69. en ráfagas de 7 entradas: iptables -A INPUT -i eth1 -s 10.168.0.0.com -j DROP iptables -A OUTPUT -p tcp -d facebook.168.171.25 #19: Bloquear o abrir puertos comunes Replace ACCEPT with DROP to block port: ## open port ssh tcp port 22 ## iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.

Para IPv4.168.168.168.1. Se puede usar connlimit para crear algunas restricciones.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT iptables -A INPUT -s 192.1.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT ## allow time sync via NTP for lan users (open udp port 123) ## iptables -A INPUT -s 192.1: Probando nuestro firewall Conocer si hay puertos abiertos o no: netstat -tulpn .168. debe ser un número entre 0 y 32 (incluyéndolos.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT iptables -A INPUT -s 192.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT ## open access to mysql server for lan users only ## iptables -I INPUT -p tcp --dport 3306 -j ACCEPT #20: Restringir el número de conexiones paralelas a un servidor por direccion Ip del cliente.168.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT ## open access to proxy server for lan users only ## iptables -A INPUT -s 192. Para permitir 3 conexiones ssh por cliente: iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT Establecer las peticiones HTTP a 20: iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP donde:  –connlimit-above 3 : Coincide si el número de conexiones existentes está por encima de 3.168.iptables -A INPUT -s 192.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT ## open tcp port 25 (smtp) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # open dns server ports for all ## iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT ## open http/https (Apache) server port to all ## iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT ## open tcp port 110 (pop3) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT ## open tcp port 143 (imap) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT ## open access to Samba file server for lan users only ## iptables -A INPUT -s 192.1.) #21: HowTO: Use iptables Like a Pro Para más información sobre iptables.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT iptables -A INPUT -s 192.  –connlimit-mask 24 : Grupos de hosts usando el prefijo de longitud. échale un vistazo al manual: man iptables Para ver la ayuda en general o de un comando específico: iptables -h iptables -j DROP -h #21.1.