Ejemplos de iptables

Actualizado el domingo, 19 junio, 2016

IPtables es un sistema de firewall vinculado al kernel de linux. Al contrario de lo que pueda parecer unas iptables no son como un servidor que lo iniciamos o detenemos, Ha habido alguna vulnerabilidad que a permitido un DdoS, pero siempre sera mas efectivo que las aplicaciones que escuchan en determinado puerto TCP. Iptables esta integrado con el kernel, es parte del sistema operativo. Podemos crear, modificar, borrar todo tipo de reglas, aquí propondremos unos ejemplos.

Reset iptables firewall rules

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -t nat -F

Ver el estado de tu firewall y listar reglas
Type the following command as root:

iptables -L -n -v
iptables -n -L -v --line-numbers  
 
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

Eliminar reglas de Firewall

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.54.1.1

Se puede eliminar por número de regla

iptables -D INPUT 4

O especificar una regla que coincida

iptables -D INPUT -s 202.54.1.1 -j DROP

Establecer las políticas de firewall por defecto para eliminar todo el tráfico:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -L -v -n

Sólo a bloquear el tráfico entrante

Para eliminar todos los paquetes entrantes / enviado, pero permitir el tráfico saliente, escriba:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -L -v -n

Eliminar direcciones de red privada en la interfaz pública (Suponiendo eth1 como interfaz pública)

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Bloquear IP:

iptables -A INPUT -s 192.168.1.5 -j DROP
iptables -A INPUT -s 192.114.71.13 -j DROP

Guardar reglas:

iptables-save > /root/iptables.fw

En CentOS / RHEL / Fedora Linux,:

service iptables save

Restaurar reglas:

iptables-restore < /root/iptables.fw

Restaurar en CentOS / RHEL / Fedora Linux:

service iptables restart

Puedes recargar las reglas automáticamente al reiniciar el servidor:

vi /etc/rc.local
# Reload IPTABLES Rules automatically on restart
/sbin/iptables-restore < /root/iptables.fw

En CentOS puedes guardar las reglas para recargarlas automáticamente:

/etc/sysconfig/iptables

Permitir todo el tráfico de loopback, y eliminar todo el tráfico a 127/8 que no usa lo0

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

Eliminar cualquier paquete TCP que no se ha iniciado con el Flag SYN activo

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Aceptar todas las conexiones entrantes establecidas

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Eliminar cualquier paquete inválido que no pueda ser identificado

iptables -A INPUT -m state --state INVALID -j DROP
Drop all inbound telnet traffic
iptables -I INPUT -p tcp --dport 23 -j DROP
Drop all outbound web traffic
iptables -I OUTPUT -p tcp --dport 80 -j DROP
Drop all outbound traffic to 192.168.0.1
iptables -I OUTPUT -p tcp --dest 192.168.0.1 -j DROP
Allow all inbound web traffic
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Allow inbound port traffic for localhost
iptables -I INPUT -s 12.0.0.1 -p tcp --dport 2003 -j ACCEPT
Allow inbound HTTPS traffic from 10.2.2.4
iptables -I INPUT -s 10.2.2.4 -p tcp -m tcp --dport 443 -j DROP
Deny outbound traffic to 192.2.4.0-192.2.4.255
iptables -I OUTPUT -d 192.2.4.6.0/24 -j DROP

Bloquear tráfico al dominio facebook.com, miramos la IP de facebook.com y luego su RANGO DE IPs

host -t a www.facebook.com
whois 69.171.228.40 | grep CIDR

Creamos la regla para no permitir acceso

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

También por nombre de dominio, pero no es 100% efectivo.

iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
iptables -A OUTPUT -p tcp -d facebook.com -j DROP

Permitir conexiones entrantes al puerto 21 desde una la IP 11.22.33.44

iptables -A INPUT -p tcp -m state --state NEW --dport 21 --source 11.22.33.44

Permitir todo el tráfico entrante SSH

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Permitir SSH saliente

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Permitir tráfico HTTP

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Permitir HTTPS saliente.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Combinar reglas con multipuerto

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

Denegar todas las conexiones entrantes al puerto 21.

iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j DROP

Eliminar la primera regla de entrada

iptables -D INPUT 1

Bloquear o Permitir solicitud de ICMP Ping

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP  
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
/// 
A continuación sólo acepta tipo limitado 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

 
Permitir ping de fuera hacia adentro

iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp –icmp-type echo-reply -j ACCEPT

Permitir PING de dentro a fuera.

iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT

Permitir tráfico DNS saliente.

iptables -A OUTPUT -p udp -o eth0 –dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 –sport 53 -j ACCEPT

Abrir un rango de puertos de entrada

iptables -A INPUT -m state state NEW -m tcp -p tcp dport 7000:7010 -j ACCEPT

Abrir un rango de IPs

## only accept connection to tcp port 80 (Apache) if ip is between 192.168.1.100 and 192.168.1.200 ## iptables -A INPUT -p tcp destination-port 80 -m iprange src-range 192.168.1.100-192.168.1.200 -j ACCEPT

## nat example ## iptables -t nat -A POSTROUTING -j SNAT –to-source 192.168.1.20-192.168.1.25

%%%

Restringir el número de conexiones concurrentes a un servidor por IP
%%%

Puedes utilizar el módulo connlimit para crear estas restricciones. Permitir 3 conexiones SSH por cliente:

iptables -A INPUT -p tcp syn dport 22 -m connlimit –connlimit-above 3 -j REJECT

Limitar el número de conexiones HTTP a 20:

iptables -p tcp syn dport 80 -m connlimit connlimit-above 20 connlimit-mask 24 -j DROP

Donde:
* --connlimit-above 3 : Match if the number of existing connections is above 3.
* --connlimit-mask 24 : Group hosts using the prefix length. For IPv4, this must be a number between (including) 0 and 32.

%%%

Eliminar o aceptar paquetes desde una MAC Address

iptables -A INPUT -m mac –mac-source 00:0F:EA:91:04:08 -j DROP
## *only accept traffic for TCP port # 22 from mac 00:0F:EA:91:04:07 * ## iptables -A INPUT -p tcpdestination-port 22 -m mac mac-source 00:0F:EA:91:04:07 -j ACCEPT

%%%

Prevenir ataques DoS
* -Limit 25/minute : Limita a sólo 25 conexiones por minuto.
* -Limit-burst 100: Indica que el valor de limit/minute será forzado sólo después del número de conexiones en este nivel

iptables -A INPUT -p tcp dport 80 -m limit limit 25/minute –limit-burst 100 -j ACCEPT

%%%

Permitir redirección de puertos.
* Ejemplo puerto 422 redirigimos al 22, con lo que podemos tener conexiones al puerto 22 y al puerto 422 por ssh.

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dport 422 -j DNAT to 192.168.102.37:22 iptables -A INPUT -i eth0 -p tcp dport 422 -m state state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcpsport 422 -m state state ESTABLISHED -j ACCEPT

Logar y eliminar paquetes:

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG –log-prefix «IP_SPOOF A: » iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Logar y eliminar paquetes limitando el número de entradas repetidas en el LOG

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit limit 5/m limit-burst 7 -j LOG –log-prefix «IP_SPOOF A: » iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Sacar en el log los paquetes caídos.
* Primero creamos una cadena llamada LOGGING:

iptables -N LOGGING

Luego todas las conexiones entrantes vayan por la cadena LOGGING

iptables -A INPUT -j LOGGING

Logueamos paquetes con un log-prefix

iptables -A LOGGING -m limit limit 2/min -j LOG log-prefix «IPTables Packet Dropped: » –log-level 7

Y los bloqueamos:

iptables -A LOGGING -j DROP

%%%


Listado de reglas ejemplo para puertos TCP/UDP 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.168.1.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.168.1.0/24 -p udp -m udp –dport 631 -j ACCEPT iptables -A INPUT -s 192.168.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.168.1.0/24 -m statestate 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

  1. 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 tcpdport 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.168.1.0/24 -m state state NEW -p tcp dport 137 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state state NEW -p tcp dport 138 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state state NEW -p tcp dport 139 -j ACCEPT iptables -A INPUT -s 192.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.168.1.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 ///

 

Una respuesta

  1. Ruth
    02/06/2016

Agregar comentario