Configuración iptables

Iptables es un firewall incluido en el kernel de Linux y el uso es bastante complejo, vamos a hacer un resumen general.

Para Iniciar/Para/Reiniciar Iptables

  • sudo service iptables start
  • sudo service iptables stop
  • sudo service iptables restart

Los principales comandos de Iptables son los siguientes:

  • -A –append → agrega una regla a una cadena.
  • -D –delete → borra una regla de una cadena especificada.
  • -R –replace → reemplaza una regla.
  • -I –insert → inserta una regla en lugar de una cadena.
  • -L –list → muestra las reglas que le pasamos como argumento.
  • -F –flush → borra todas las reglas de una cadena.
  • -Z –zero → pone a cero todos los contadores de una cadena.
  • -N –new-chain → permite al usuario crear su propia cadena.
  • -X –delete-chain → borra la cadena especificada.
  • -P –policy → explica al kernel qué hacer con los paquetes que no coincidan con ninguna regla.
  • -E –rename-chain → cambia el orden de una cadena.

Condiciones TCP/UDP

  • -sport –source-port → selecciona o excluye puertos de un determinado puerto de origen.
  • -dport –destination-port → selecciona o excluye puertos de un determinado puerto de destino.

Existen muchas mas condiciones para una configuración avanzada del firewall, pero las elementales ya las tenemos listadas.

Configurar reglas por defecto

La configuración por defecto de un firewall debería ser, traducido al español, «bloquear todo excepto [reglas]». Para configurar el firewall para que bloquee todas las conexiones debemos teclear:

  • iptables -P INPUT DROP
  • iptables -P FORWARD DROP
  • iptables -P OUTPUT DROP

Con esto nos quedaremos sin internet, por lo que a continuación debemos empezar a crear reglas permisivas.

Para aplicar una regla que filtre un determinado puerto, debemos ejecutar:

  • iptables -A INPUT -p tcp –sport 22 22 → crea una regla para el puerto de origen tcp 2222

Para bloquear el tráfico procedente de una determinada IP, debemos ejecutar:

  • iptables -A INPUT -p tcp -m iprange –src-range 192.168.100.2-192.168.100.21 (ejemplo de IP)

También podríamos bloquear por MAC con la condición -mac- source.

  • iptables -A INPUT -m mac –mac-source 00:00:00:00:00:00

Una vez ejecutadas las reglas que queramos aplicar, debemos guardarlas tecleando sudo service iptables save

Ver el estado del firewall

  • iptables -L -n -v

El parámetro L muestra las líneas abiertas. V permite recibir más información sobre las conexiones y N nos devuelve las direcciones IP y sus correspondientes puertos sin pasar por un servidor DNS.

Eliminar las reglas existentes

Para borrar toda la configuración del firewall para volver a configurarlo de nuevo debemos teclear:

  • iptables -F

Permitir conexiones entrantes

Teclearemos los siguientes parámetros:

  • iptables -A INPUT -i [interface] -p [protocolo] –dport [puerto] -m state –state NEW,ESTABLISHED -j ACCEPT

-i: debemos configurar la interfaz, por ejemplo, eth0. Esto es útil en caso de tener varias tarjetas de red, si tenemos sólo una, no tenemos por qué especificar este parámetro.

-p: protocolo. Debemos especificar si el protocolo será TCP o UDP.

–dport: el puerto que queremos permitir, por ejemplo, en caso de HTTP sería el 80.

Un ejemplo para permitir las conexiones entrantes desde páginas web:

  • iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

Permitir las conexiones salientes

  • iptables -A OUTPUT -o [interfaz] -p [protocolo] –sport [puerto] -m state –state ESTABLISHED -j ACCEPT

-o: debemos configurar la interfaz, por ejemplo, eth0, al igual que en el caso anterior.

-p: protocolo. Debemos especificar si el protocolo será TCP o UDP.

–sport: el puerto que queremos permitir, por ejemplo, en caso de HTTPS sería el 443.

Un ejemplo para permitir el tráfico saliente hacia páginas web:

  • iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

Permitir los paquetes ICMP

Por defecto, el ping está deshabilitado. Debemos habilitarlo manualmente añadiendo las correspondientes entradas en iptables. Para ello teclearemos:

Para poder hacer ping a otros servidores:

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

Para permitir recibir solicitudes de ping de otros equipos:

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

Permitir que el tráfico interno salga a internet

En el caso de tener 2 tarjetas de red (eth0 en local y eth1 conectada a internet) podemos configurar el firewall para que reenvíe el tráfico de la red local a través de internet. Para ello escribiremos:

  • iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

Bloquear y prevenir ataques DDoS

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

Consultar los paquetes rechazados por iptables

Para saber los paquetes que iptables ha rechazado debemos teclear:

  • iptables -N LOGGING

Ejemplos prácticos

Cómo bloquear las conexiones entrantes por el puerto 5000:

  • iptables -A INPUT -p tcp –dport 5000 -j DROP
  • iptables -A INPUT -i eth1 -p tcp –dport 80 -j DROP → bloquea en la interfaz eth1

Bloquear una dirección IP:

  • iptables -A INPUT -s 192.168.1.0/24 -j DROP

Bloquear una dirección IP de salida:

  • iptables -A OUTPUT -d 83.226.352.196 -j DROP

También podemos bloquear una url, por ejemplo, facebook:

Bloquear el tráfico desde una direccion MAC:

  • iptables -A INPUT -m mac –mac-source 00:0F:EC:85:25:12 -j DROP

Bloquear peticiones ping:

  • iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

Documentación sacada de: https://www.redeszone.net/gnu-linux/iptables-configuracion-del-firewall-en-linux-con-iptables/

Comandos de interés

Eliminar ram cacheada

  • Con el comando => free -M podemos obtener la ram usada y la libre que tenemos en nuestro sistema operativo
  • En caso de necesitar liberar ram previamente cacheada usaremos el comando => sync && echo 3 > /proc/sys/vm/drop_caches

Colocar ip y gateway de forma manual

  • Para ver el gateway ==> route -n
  • Para colocar la ip de forma manual ==> ifconfig eth0 «ip_a_colocar» netmask «mascara de subred». Por ejemplo ifconfig eth0 10.0.201 netmask 255.255.255.0
  • Para colocar gateway ==> sudo route add default gw «ip_puerta_enlace»

Testear un disco duro con linux

badblocks

Con esta herramienta podemos hacer un chequeo completo del disco y ver la cantidad de sectores defectuosos que hay

1- Desmontar la partición a testear.

fdisk -l

sudo umount [ruta de la partición]

2- Uso básico

sudo badblocks [ruta de la partición]

3- Uso básico con Verbose

sudo badblocks -v [ruta de la partición]

4- Uso de lectura y escritura no destructivo

sudo badblocks -nsv [ruta patición]

e2fsck

1- Uso básico

sudo e2fsck /dev/sda1

2- Uso combinado con Badblocks

sudo e2fsck -c /dev/sda1

Hacer un formateo lento de un disco

Con este formateo se colocan todos los sectores de un disco a cero y se marcan y aíslan aquellos sectores dañados

sudo dd if=/dev/zero of=/dev/sdb

Al ir bloque a bloque es un proceso lento, pero esto se puede optimizar seleccionando el tamaño de bloque a utilizar

sudo dd if=/dev/zero of=/dev/sdb bs=4096