Hay algunas opciones para cortafuegos en Linux, pero la mayoría son en realidad sólo envolturas alrededor de iptables. Para esta guía le mostraremos cómo trabajar con iptables directamente.
¿Qué es Iptables?
Iptables es el cortafuegos del núcleo 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 del equipo.
Iptables tiene la reputación de ser complejo, y puede serlo. Sin embargo, no necesita saberlo todo sobre iptables para utilizarlo eficazmente en su escritorio. Sólo se necesita un conocimiento básico de cómo funciona y cómo están estructuradas sus reglas.
Relacionado Cómo manejar y configurar el cortafuegos en Linux
Estructura de Comando
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 dice cómo manejar el tráfico en un puerto específico. Echa un vistazo al ejemplo de abajo:
Eso puede parecer mucho, pero es muy simple cuando lo rompes. Primero, esta regla comienza con -A porque se añadirá a las reglas de su iptables.
A continuación, el indicador -i especifica la interfaz para la que está diseñada 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.
La bandera -m es un poco diferente. Se utiliza para afirmar que existe una condición que debe cumplirse para que no se rechace el tráfico. La condición en esta regla es el estado.
El estado es en realidad la siguiente bandera. Necesita dar a –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 “source port” (puerto fuente), y le dice a iptables de dónde viene el tráfico. También hay una bandera de puerto que significa “puerto de destino”. Se utiliza para las reglas OUTPUT para el manejo de qué tráfico portuario está llegando.
Por último, está la bandera -j. Le dice a iptable a qué acción “saltar”. En este caso debe ACEPTAR el tráfico que cumpla las condiciones anteriores.
Uso de un archivo
Puede introducir 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 puede importar a iptables de una sola vez.
No importa dónde cree el archivo. La gente incluso los hace en el directorio /tmp porque iptables almacena el resultado después de ser importado.
Cree su archivo. Esta guía va a usar /tmp/iptables-ip4. En el archivo agregue las siguientes dos líneas. Todas tus reglas se interpondrán entre ellas.
filtro *filtro
# Tus reglas aquí
COMMIT> COMPROMISO
Crear sus reglas
Puedes empezar a establecer tus reglas. Estas son sólo sugerencias. Obviamente, si está ejecutando otros servicios o necesita que se abran otros puertos, puede ajustar algunas cosas o añadir sus propias reglas.
Loopback
La interfaz loopback es una interfaz interna que utiliza Linux.
>A -A OUTPUT -o lo -j ACCEPT
Ping
Esta es una cuestión de preferencia. A mucha gente no le gusta permitir el ping en sus escritorios. Sin embargo, puede ser útil tenerlo para probar las conexiones. Si desea permitir el ping, añada las siguientes reglas. Si no lo haces, exclúyelos.
-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 quieres poder conectarte a la Web. Por otro lado, no es conveniente permitir las conexiones que se originan en Internet.
-A ENTRADA -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 ACEPTAR
-A OUTPUT -o eth0 -p tcp -m tcp –dport 443 -j ACCEPT
También va a necesitar permitir conexiones DNS para que su computadora pueda usar URLs en lugar de sólo direcciones IP porque eso no sería muy conveniente. Sustituya la dirección IP de su router por la que se utiliza aquí.
-A ENTRADA -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
Hora
La mayoría de los escritorios Linux utilizan NTP para establecer y mantener la hora del sistema desde Internet. Debe permitir que el equipo se conecte a un servidor NTP para obtener la hora.
Impresión
A menos que utilice 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 ACEPTAR
-A INPUT -p tcp -m tcp –dport 631 -j ACCEPT
-A OUTPUT -p udp -m udp –sport 631 -j ACEPTAR
-A OUTPUT -p tcp -m tcp –sport 631 -j ACCEPT
Correo electrónico
Es probable que también desee poder enviar y recibir correo electrónico. El correo electrónico puede ser complicado. Los puertos permitidos aquí son los puertos de correo electrónico SSL. Si necesita utilizar 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 poder utilizar completamente las conexiones SSH, es necesario permitir tanto la entrada como la salida a través de SSH.
# Entrada -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 # Salida -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 utilizan DHCP para recibir automáticamente una dirección IP de un enrutador. DHCP utiliza sus propios puertos, por lo que también deben ser accesibles. Si está utilizando una IP estática, no necesita estas reglas.
-A ENTRADA -i eth0 -p udp -m state –state ESTABLISHED,RELATED –sport 67:68 -j ACEPTAR
-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 haya permitido explícitamente en las reglas anteriores.
-A INPUT -j RECHAZAR -A ADELANTE J RECHAZAR -A OUTPUT -j REJECT
>Respuesta
Después de todo, sus reglas deberían ser algo así.
Importación de sus reglas
Ahora tiene una lista de reglas de iptables totalmente funcional. Sólo tienes que entregarlo a iptables para que lo use.
En caso de que se hayan añadido algunas reglas con el tiempo, elimínelas. Después de estos comandos, verá los valores predeterminados que permiten todo.
sudo iptables -F && sudo iptables -X
Una vez eliminadas, puede restaurar las nuevas desde el archivo que creó.
sudo iptables-restore < /tmp/itpables-ip4
Su ordenador está usando las nuevas reglas de iptables. Puedes comprobarlo.
sudo iptables -S
Sin embargo, aún no son permanentes. Si reinicia su ordenador ahora, va a tener un realmente mal momento.
Cómo hacerlos permanentes
Hay varias maneras 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, llamadoiptables-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. Selecciona “Sí”.
En el futuro, si desea añadir reglas, puede volver a guardarlas ejecutando el siguiente comando.
Sudo service netfilter-persistent save
Ahora usted tiene el control del tráfico que fluye a través de su computadora. Hay ciertamente más que usted puede hacer con iptables, pero usted debe sentirse seguro con los fundamentos primero.