Uno de los marcos de seguridad más utilizados en Linux Netfilter, esta funcionalidad se encuentra dentro del kernel de Linux y brinda flexibilidad para que varias operaciones relacionadas con la red se implementen en forma de controladores personalizados.
Netfilter ofrece varias opciones para filtrado de paquetes, resolución de direcciones de red y puertos de resolución. Estas funciones brindan la funcionalidad necesaria para dirigir los paquetes a través de una red, así como para proporcionar la capacidad de prohibir que los paquetes lleguen a ubicaciones confidenciales dentro de una red informática.
Netfilter es un conjunto de herramientas dentro del kernel de Linux, que permite que módulos específicos del kernel registren transacciones de red de funciones de devolución de llamada dentro del kernel.
Estas funciones generalmente se aplican en forma de reglas de filtrado de tráfico, se invocan cuando cada nueva transacción o cada paquete de datos pasa por el sistema de filtrado respectivo dentro de la red, este sistema es un filtro de firewall.
El firewall es responsable de interceptar y manipular paquetes de red. También permite el manejo de paquetes en diferentes etapas de procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de proporcionar herramientas gratuitas para cortafuegos o cortafuegos basados en Linux.
El componente más popular construido sobre Netfilter es la herramienta iptables firewall o cortafuegos que permite filtrar paquetes y también realizar resolución de direcciones de red o mantener registros de lo que está sucediendo. El proyecto Netfilter no solo ofrece componentes disponibles como núcleo de módulos, sino que también ofrece herramientas para uso de usuarios y bibliotecas para desarrolladores.
A continuación se explica cómo configurar un cortafuegos mediante iptables. Primero vemos si iptables está activo, para hacerlo desde una ventana de terminal escribe lo siguiente:
sudo iptables -L
Si no lo hubiésemos instalado podemos instalarlo con el siguiente comunicado:
sudo apt-get install iptables
También podemos usar el comando:
whereis iptables
Devolveremos la ubicación de Iptables, algo como lo siguiente:
iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz
Para iniciar en el caso de Debian/Ubuntu y derivados ejecute el comando:
sudo ufw enable // iniciar
sudo ufw disable //detener
Si usamos CentOS/RHEL/Fedora ejecute el siguiente comando:
service iptables stop
service iptables start
service iptables restart
Cómo aplicar reglas Iptables
Las reglas para filtrar paquetes se establecen mediante el comando iptables. El tipo de sintaxis responde al siguiente enunciado.
Ejemplo Para insertar reglas para permitir el acceso al puerto 80 que utilizan los servicios web:
iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
Explicamos los parámetros definidos por la regla:
-A =Indica anexar esta regla a un filtro de cadena. La cadena donde indicamos que estamos haciendo, la mayoría de las veces nos ocupamos del tráfico entrante o saliente ENTRADA y SALIDA, permitiendo o no cierto puerto o ip específico para el tráfico de datos.
-m =para indicar que la regla de filtrado debe coincidir con el medio o protocolo de conexión y transmisión, por ejemplo en este caso permitimos tráfico de datos pero solo para tcp y udp u otro nº de protocolo.
-s =indica el tráfico de direcciones IP de origen permitido, el rango de direcciones usando [/netmask] o especificando el puerto de origen.
ip =-d indica la dirección de destino del tráfico permitido, el rango de direcciones usando [/netmask] o especificando el puerto de destino.
j – =indica que la acción tendrá lugar si coincide con la regla de filtrado de paquetes. Por defecto, iptables permite cuatro acciones posibles:
ACCEPT indica que el paquete es aceptado y puede continuar.
REJECT indica que el paquete es rechazado y notifica a la fuente que no es aceptado, deja de procesar el paquete.
DROP indica que rechaza e ignora el paquete, no produce ninguna advertencia y deja de procesar el paquete.
LOG indica que el paquete es aceptado y continúa procesando más reglas en esta cadena, se puede ver un registro de lo sucedido.
Ejemplo:cierre el puerto 22 Acceso remoto SSH:
iptables -A INPUT -p tcp --dport 22 -j DROP
Lo que queremos decir es rechazar cualquier entrada o tráfico de datos que ingrese o intente conectarse al puerto 22.
Ejemplo:si queremos que un desarrollador o diseñador tenga acceso ftp desde una computadora pero nadie más, entonces podemos usar la siguiente regla, que acepto FTP, puerto 21 para una ip dada.
iptables -A INPUT -s Your_IP_Address -p tcp -dport 21 -j ACCEPT
Ejemplo:los administradores de la base de datos pueden tener su propio acceso desde una computadora. Luego habilitamos el puerto de conexión o base de datos Mysql que tenemos.
iptables -A INPUT -s Your_IP_Address -p tcp --dport 3306 -j ACCEPT
Ejemplo:la mayoría de los administradores de servidores mantienen cerrado el puerto 25 (SMTP) por generar spam y facilidad de los spammers para utilizarlo para envíos masivos, por lo que podemos bloquearlo para que cualquiera lo utilice de una forma fácil y sencilla.
iptables -A INPUT -p tcp --dport 22 -j DROP
Ejemplo:si necesita permitir el acceso a sitios web seguros utilizando el formato https://www.miweb.com, debemos permitir el acceso al puerto 443 que es el HTTPS/SSL utilizado para la transferencia segura de páginas web.
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
Atención administradores de sistemas
Todos los administradores y usuarios de Linux deben ser conscientes de que es importante considerar esta herramienta como una primera línea de defensa de seguridad, saber cómo utilizarnos para servirnos en muchos casos ya que impide el acceso a nuestro sistema, pero también sirve para detener un posible ataque en curso.
Una forma de personalizar fácilmente iptables según nuestras necesidades para minimizar posibles problemas de seguridad y vulnerabilidades.
Si necesitas saber todos los puertos que tenemos en nuestro sistema podemos utilizar la siguiente guía de los puertos más utilizados y a considerar protegidos.
Puertos de Internet a tener en cuenta
20 Transferencia de archivos y datos FTP
21 FTP
22 Acceso remoto SSH, SFTP
23 Equipo de manejo remoto Telnet, es un protocolo inseguro
25 El correo electrónico SMTP no es seguro Envío
53 Sistema de resolución de nombres de dominio DNS
67 BOOTP (Servidor) utilizado por direcciones IP dinámicas de DHCP
68 BOOTP (Cliente), también utilizado por DHCP
80 Protocolo de transferencia de hipertexto HTTP. Servicio WWW
110 Protocolo de oficina de correos POP3. Recepción de correos electrónicos
143 Aplicación de protocolo IMAP que permite el acceso a mensajes almacenados en un servidor de correo
389 Protocolo LDAP Acceso ligero a bases de datos
443 Protocolo HTTPS/SSL para la transferencia segura de páginas web
465 SMTP de forma segura y encriptada con SSL. Se utiliza para enviar correos electrónicos
631 Sistema de impresión CUPS Linux y derivados
993 IMAP con seguridad SSL y encriptación se usa para recibir correos electrónicos
995 POP3 con seguridad SSL y encriptación se usa para recibir correos electrónicos
Port Server 1433 base de datos SQLServer
1434 Port SQLServer monitoreo de servidor con SQLMonitor
1521 Server Port Oracle base de datos
2082 puerto de acceso CPanel panel de control para administrar Web
2083 CPanel puerto acceso seguro con SSL.
Puerto de acceso 3306 Bases de datos del servidor MySQL MYSQL
3389 RDP Remote Desktop o Terminal Server
3396 Puerto de servicio Novell Novell Print
3690 Apache Subversion es una herramienta de control de versiones, también conocida como SVN
5000 Port de plug-and-play es un conjunto universal de protocolos de comunicación que permite que computadoras, impresoras, puntos de acceso Wi-Fi y dispositivos móviles, se encuentren en una red
5222 Jabber / XMPP es el protocolo utilizado hoy Facebook, Tuenti, entre otros WhatsApp
5223 Jabber / XMPP puerto por defecto para SSL c conexiones cliente
5269 Conexión al servidor Jabber / XMPP
5432 Bases de datos del sistema de administración PostgreSQL
5400 Protocolo de escritorio remoto VNC usando el protocolo HTTP.
8080 es el puerto usado por el servidor web Tomcat con JSP.