sábado, 16 de junio de 2012

Firewall: iptables y ufw

El mejor “firewall” que nos ofrece Linux son las iptables. Con ellas podemos abrir y cerrar puertos a voluntad, tanto a rangos de ips como a ips suelta, en uno o varios puertos. Como siempre, en linux las cosas más completas no son las más comodas de usar, pero existen formas alternativas de gestionarlas.
Como muestra un boton, vamos a bloquear el acceso al puerto 22 para ver la diferencia de usar uno u otro:
iptables:
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 22 -j DROP

ufw:
ufw deny 22/tcp
Como veis, la diferencia es enorme. Con ufw podemos usar un lenguaje natural y se encarga el programa de traducirlo a reglas de iptables. En ambos casos, tenemos el control total del firewall. Somos nosotros quienes tenemos que bloquear o aceptar las conexiones. Lo ideal es bloquear todo el tráfico e ir abriendo los puertos necesarios, así nos aseguramos que no haya ningún programa mandando datos sin nuestro consentimiento.
Para habilitar y deshabilitar el ufw, tenemos dos comandos:
ufw enable
ufw disable
En algunas distros como Ubuntu ya viene preinstalado, pero deshabilitado por defecto, en otras como Debian tendremos que instalarlo.
Como he comentado, vamos a cerrar todos los puertos y luego ir abriendolos uno a uno. Usaremos el comando ufw default deny para ello (ufw default allow para aceptar todo el tráfico). También podemos activar el log para ver qué está pasando con ufw loggin on.
Hay varias formas de abrir y cerrar puertos, podemos hacerlo por ip o por servicios. Para bloquear por servicios, estos tendrían que estar añadidos en el archivo /etc/services. Por ejemplo, para habilitar el ssh nos bastaría con ufw allow ssh (el puerto 22 se abre para acceder desde cualquier IP). Para abrir por puerto se usa ufw allow 22 (abre para acceder desde cuaquier ip al puerto 22 usando tanto tcp como udp). Si queremos que sólo acepte algun tipo de tráfico, tcp por ejemplo, podemos hacerlo así ufw allow 80/tcp que nos abriría el puerto 80 (web) con tráfico tcp.
Podemos hacer que nos acepte las conexiones desde una IP determinada, para ello usaremos ufw allow from 192.168.1.10 o por ejemplo un rango entero de IPs con ufw allow from 192.168.1.0/24 que daría acceso a toda nuestra red privada.
Podemos bloquear o aceptar también usando IP y puerto: ufw allow from 192.168.1.10 to any port 22.
Para bloquear específicamente puertos o ips, en vez de allow usaremos deny.
Repaso rápido:
ufw allow <port>/<optional: protocol>
ufw deny <port>/<optional: protocol>
ufw allow from <ip address>
ufw deny from <ip address>
u
fw allow from <ip address> to <protocol> port <port number>
Si aun así os resulta complicado, podeis usar el gufw, una interfaz gráfica sencilla para añadir las reglas.
¡Un saludo!

No hay comentarios:

Publicar un comentario