Linux puede tener una reputación de seguridad, pero no es perfecto. Muchas distribuciones tampoco tienen los mejores valores predeterminados de seguridad, por lo que es mejor implementar algunas de las mejores prácticas de seguridad. Un ejemplo de ello es el uso de un cortafuegos.
Hay algunas opciones para los cortafuegos en Linux, pero la mayoría son solo envoltorios alrededor de iptables. Para esta guía, le mostraremos cómo trabajar directamente con iptables.
¿Qué es Iptables?
Iptables es el cortafuegos del kernel de Linux. Viene con todas las distribuciones de Linux y es la forma más directa de controlar el tráfico que entra y sale de su computadora.
Iptables tiene fama de ser complejo, y puede serlo. Sin embargo, no necesita saber todo sobre iptables para usarlo de manera efectiva en su escritorio. Solo necesita algunos conocimientos básicos de cómo funciona y cómo se estructuran sus reglas.
Estructura de mando
Todas las reglas de iptables siguen la misma estructura básica. Cada regla es un comando de una sola línea para iptables que le indica cómo manejar el tráfico en un puerto específico. Eche un vistazo al siguiente ejemplo:
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
Eso puede parecer mucho, pero es realmente simple cuando lo desglosas. En primer lugar, esta regla comienza con -A
porque se agregará a las reglas de iptables.
A continuación, el -i
flag especifica la interfaz para la que es la regla. En este caso, es eth0
. Cuando escriba sus propias reglas, asegúrese de saber a través de qué interfaz está conectado a su red.
La siguiente bandera, -p
, nombra el protocolo. Esta regla es para tcp
que es el tráfico web.
los -m
La bandera es un poco diferente. Se utiliza para afirmar que existe una condición que debe cumplirse para que el tráfico no sea rechazado. La condición en esta regla es el estado.
El estado es en realidad la siguiente bandera. tienes que dar --state
una lista de estados aceptables escritos en mayúsculas y separados por comas. Esta regla acepta tanto conexiones nuevas como establecidas.
La penúltima bandera aquí es --sport
. Significa «puerto de origen» y le dice a iptables de dónde proviene el tráfico. También hay una --dport
bandera que significa «puerto de destino». Es usado para OUTPUT
reglas para manejar de qué puerto llega el tráfico.
Finalmente, está el -j
bandera. Le dice a iptable a qué acción «saltar». En este caso debería ACCEPT
el tráfico que cumpla las condiciones anteriores.
Usando un archivo
Puede ingresar sus reglas en iptables manualmente una por una. Eso es increíblemente tedioso y es muy fácil perder la noción de dónde estás y qué estás haciendo. Es mucho mejor crear un archivo de reglas que pueda importar a iptables de una sola vez.
No importa dónde crees el archivo. La gente incluso los hace en el /tmp
porque iptables almacena el resultado después de importarlo.
Crea tu archivo. Esta guía va a utilizar /tmp/iptables-ip4
. En el archivo agregue las siguientes dos líneas. Todas sus reglas irán entre ellos.
*filter # Your Rules Here COMMIT
Crea tus reglas
Puede comenzar a configurar sus reglas. Estas son solo sugerencias. Obviamente, si está ejecutando otros servicios o necesita abrir otros puertos, ciertamente puede modificar algunas cosas o agregar sus propias reglas.
Bucle invertido
La interfaz loopback es una interfaz interna que utiliza Linux.
-A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT
Silbido
Esta es una cuestión de preferencia. A muchas personas no les gusta permitir ping en absoluto en sus escritorios. Sin embargo, puede ser útil tenerlo para probar las conexiones. Si desea permitir el ping, agregue las reglas a continuación. Si no lo hace, exclúyalos.
-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT -A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -o eth0 -p icmp -j ACCEPT
La web
Obviamente, desea poder conectarse a la Web. Por otro lado, no desea permitir conexiones que se originen en Internet.
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT
También necesitará permitir conexiones DNS para que su computadora pueda usar URL en lugar de solo direcciones IP porque eso no sería muy conveniente. Sustituya la dirección IP de su enrutador por la utilizada aquí.
-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -m udp -j ACCEPT
Tiempo
La mayoría de los escritorios Linux usan NTP para establecer y mantener la hora del sistema desde Internet. Debe permitir que su computadora se conecte a un servidor NTP para obtener la hora.
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --sport 123 -j ACCEPT
Impresión
A menos que esté utilizando una impresora USB o un servidor de impresión externo, debe habilitar las conexiones a CUPS.
-A INPUT -p udp -m udp --dport 631 -j ACCEPT -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A OUTPUT -p udp -m udp --sport 631 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT
Correo electrónico
Probablemente también desee poder enviar y recibir correos electrónicos. El correo electrónico puede ser complicado. Los puertos permitidos aquí son los puertos de correo electrónico SSL. Si necesita usar correo electrónico no seguro, sustituya esos puertos.
# IMAP -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j ACCEPT # POP3 -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j ACCEPT # SMTP -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 465 -j ACCEPT
SSH
Para utilizar completamente las conexiones SSH, debe permitir tanto la entrada como la salida a través de SSH.
# Input -A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT -A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT # Output -A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT -A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
DHCP
La mayoría de los escritorios Linux usan DHCP para recibir automáticamente una dirección IP de un enrutador. DHCP usa sus propios puertos, por lo que también deben ser accesibles. Si está utilizando una IP estática, no necesita estas reglas.
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --dport 67:68 -j ACCEPT
Rechazar todo lo demás
Finalmente, le dirá a iptables que rechace absolutamente todo lo que no permitió explícitamente en las reglas anteriores.
-A INPUT -j REJECT -A FORWARD -j REJECT -A OUTPUT -j REJECT
Después de todo, sus reglas deberían parecerse a estas.
Importación de sus reglas
Ahora tiene una lista de reglas de iptables totalmente funcional. Solo necesita pasarlo a iptables para usarlo.
En caso de que se hayan agregado algunas reglas con el tiempo, bórrelas. Después de estos comandos, verá los valores predeterminados que permiten todo.
sudo iptables -F && sudo iptables -X
Una vez que se hayan ido, puede restaurar los nuevos desde el archivo que creó.
sudo iptables-restore < /tmp/itpables-ip4
Su computadora ahora está usando las nuevas reglas de iptables. Puedes echarles un vistazo.
Sin embargo, aún no son permanentes. Si reinicia su computadora ahora, tendrá una De Verdad mal momento.
Hacerlos permanentes
Hay varias formas de hacer que las reglas sean permanentes. Son diferentes para cada distribución. Esta guía se centrará en los sistemas basados en Debian y Ubuntu, ya que son los más populares.
Hay un paquete disponible, llamado iptables-persistant
, que se encarga de guardar y restaurar iptables. Todo lo que tienes que hacer es instalarlo.
sudo apt install iptables-persistent
Durante la instalación, el paquete le preguntará si desea guardar su configuración. Seleccione «Sí».
En el futuro, si desea agregar reglas, puede guardar nuevamente ejecutando el siguiente comando.
sudo service netfilter-persistent save
Ahora tiene el control del tráfico que fluye a través de su computadora. Ciertamente hay más que puede hacer con iptables, pero primero debe sentirse seguro con lo básico.