LinuxParty
NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Para poder trabajar con iptables, necesitamos privilegios de root.
En muchos sistemas, por defecto, se encuentra en /sbin/iptables o /usr/sbin/iptables
Ejemplos de reglas para IPTABLES:
Reiniciar las reglas del cortafuegos.
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
Escriba los siguientes comandos como root:
iptables -L -n
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
Lo primero que necesitamos es listarlas...
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
Para guardar las reglas del firewall en CentOS / RHEL / Fedora Linux, escriba:
service iptables save
Restaurar reglas:
iptables-restore < /root/iptables.fw
Para restaurar las reglas en CentOS / RHEL / Fedora Linux, escriba:
service iptables restart
Una forma de recargar 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 pueden almacenarse las reglas en el siguiente fichero 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 lo
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
Eliminar todo el tráfico de telnet entrante.
iptables -I INPUT -p tcp --dport 23 -j DROP
Eliminar todo el tráfico web saliente.
iptables -I OUTPUT -p tcp --dport 80 -j DROP
Eliminar todo el tráfico saliente a: 192.168.0.1
iptables -I OUTPUT -p tcp --dest 192.168.0.1 -j DROP
Permitir el tráfico web entrante.
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Permitir el tráfico de puerto entrante para 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
Permitir el tráfico HTTPS entrante desde 10.2.2.4
iptables -I OUTPUT -d 192.2.4.6.0/24 -j DROP
Bloquear tráfico al dominio facebook.com
Primero 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 es posible hacerlo por nombre de dominio, pero la ayuda ya dice que es una mala idea ;)
iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
iptables -A OUTPUT -p tcp -d facebook.com -j DROP
IPTABLES man page:
"... especificando cualquier nombre a resolver con una consulta remota como DNS (por ejemplo, facebook.com es una muy mala idea), una dirección IP de red (con / máscara) o una dirección IP simple ..."
Allow incoming connections to port 21 from one IP address 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 : Coincidir si el número de conexiones existentes es superior a 3.
--connlimit-mask 24 : Agrupe los hosts utilizando la longitud del prefijo. Para IPv4, debe ser un número entre (incluido) 0 y 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 tcp --destination-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 tcp --sport 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:
Reemplace ACCEPT con DROP para bloquear el puerto:
## Abrir el puerto ssh tcp por el puerto 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
## Abrir cups (servicio de impresión) udp / tcp puerto 631 para usuarios de LAN ##
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
## permitir la sincronización de tiempo a través de NTP para usuarios de lan (abra el puerto udp 123 ) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
## Abrir el puerto 25 (smtp) para todos ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
## Abrir los puertos del servidor dns, para todos ##
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
## Abrir http/https (Apache)sus puertos, para todos ##
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
## acceso abierto al servidor de archivos Samba solo para usuarios de lan ##
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
## acceso abierto al servidor proxy solo para usuarios de lan ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## acceso abierto al servidor mysql solo para usuarios de lan ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Conclusión:
Esta entrada es una lista básica de reglas para iptables. Puedes crear y construir reglas más complejas a partir de estas, e incluso crear sistemas para automatizar la adición o eliminación de reglas.
Para crear las reglas, es importante comprender y conocer bien TCP/IP.
Puede ser importante o necesario aplicar ciertas modificaciones al kernel mediante sysctl.conf

-
Seguridad
- Administración: Glances - herramienta de monitoreo y supervisión para Linux
- Cómo monitorear sistemas Linux remotos con Glances
- Los 5 mejores VPN del momento
- Cómo bloquear ataques de fuerza bruta SSH usando SSHGUARD en Linux
- Cómo purgar y limpiar tus discos y borrar archivos en forma segura
- Generar password aletorios en Linux
- LinuxParty 6 meses, estadísticas y crecimiento.
- 10 cortafuegos de seguridad de código abierto útiles para sistemas Linux
- Instalar Mod_Security y Mod_evasive para protegerse contra ataques de fuerza bruta o DDoS
- Malware relacionado con ChatGPT en aumento, dice Meta
- Configurar un Firewall básico en Linux con Iptables
- Traducir los permisos rwx a formato octal en Linux
- Winzo establece una estrategia de desarrollo de tecnología de código abierto para la ciberseguridad
- 4 consejos útiles para proteger la interfaz de inicio de sesión de PhpMyAdmin
- Añadir una capa adicional de seguridad en la interfaz de inicio de sesión de PhpMyAdmin