Configurar un Firewall Iptables Básico en CentOs
Introducción
En este artículo se mostrará cómo crear un Firewall simple en un servidor Centos. Sólo abrirá los puertos que queremos y cerrará otros servicios. También mostraré cómo prevenir ataques más sencillos, y cómo dejarte volver al servidor si niegas el acceso a ti mismo por accidente.
El tutorial no es exhaustivo y solo muestra cómo abrir algunos puertos entrantes: para apache, SSH y correo electrónico y cerrar todos los demás. No bloquearemos ningún tráfico saliente y solo crearemos algunas reglas más comunes para bloquear los scripts y bots habituales que buscan servidores vulnerables.
Iptables es un Firewall simple instalado en la mayoría de las distribuciones linux. La página de manual de Linux para iptables dice que es una herramienta de administración para el filtrado de paquetes IPv4 y NAT , que, en traducción, significa que es una herramienta para filtrar y bloquear el tráfico de Internet.
Configuraremos el Firewall: Para simplificar: un Firewall tiene una lista de reglas , por lo que cuando una conexión entrante está abierta, si coincide con alguna de las reglas, esta regla puede aceptar esa conexión o rechazarla. Si no se cumplen las reglas, usamos la regla predeterminada.
Nota: Este tutorial cubre la seguridad IPv4.En Linux, la seguridad IPv6 se mantiene por separado de IPv4. Por ejemplo, "iptables" sólo mantiene reglas de Firewall para direcciones IPv4, pero tiene una contraparte IPv6 llamada "ip6tables", que se puede usar para mantener reglas de Firewall para direcciones de red IPv6.
Si su servidor está configurado para IPv6, recuerde que debe asegrar sus interfaces de red IPv4 e IPv6 con las herramientas apropiadas. Para obtener más información acerca de las herramientas de IPv6, consulte esta guía: Cómo configurar herramientas para utilizar IPv6 en un servidor de Linux
Decidir qué Puertos y Servicios Abrir
Para empezar, queremos saber qué servicios queremos abrir al público. Vamos a usar el típico servidor de alojamiento web: es un servidor web y de correo electrónico, y también tenemos que dejarnos entrar por el servidor SSH.
En primer lugar, queremos dejar el puerto SSH abierto para que podamos conectarnos al VPS de forma remota: es decir, el puerto 22.
Además, necesitamos el puerto 80 y 443 (puerto SSL) para el tráfico web. Para enviar correo electrónico, abriremos el puerto 25 (SMTP normal) y 465 (SMTP seguro). Para permitir que los usuarios reciban correo electrónico, abriremos el puerto habitual 110 (POP3) y 995 (puerto POP3 seguro).
Además, abriremos los puertos IMAP, si lo tenemos instalado: 143 para IMAP y 993 para IMAP sobre SSL. Nota: Se recomienda sólo permitir protocolos seguros, pero que no puede ser una opción, si no podemos influir en el Mail para cambiar sus clientes de correo electrónico.
Bloquear los Ataques más Comunes
Los servidores usualmente vienen con la configuración vacía: todo el tráfico está permitido. Sólo para asegurarnos de esto, podemos eliminar las reglas del Firewall, es decir, borrarlas todas:
iptables -F
A continuación, podemos agregar algunas reglas de Firewall simples para bloquear los ataques más comunes, para proteger nuestro servidor de script-kiddies. No podemos contar realmente con iptables solos para protegernos de un DDOS a gran escala o similar, pero al menos podemos poner fuera de los bots de escaneo de red habituales que eventualmente encontrarán en nuestro servidor y empezarán a buscar agujeros de seguridad para explotar. Primero, comenzamos los bloqueos de paquetes nulos.
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
Le dijimos al Firewall que tomara todos los paquetes entrantes con las banderas tcp NINGUNA y solo los DROP. Los paquetes nulos son simplemente paquetes de reconocimiento. Etos patrones de ataque utilizan estos para tratar de ver cómo hemos configurado el servidor y averiguar las debilidades. El siguiente patrón a rechazar es un ataque de inundación de syn.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
Syn-ataque de inundación significa que los atacantes abren una nueva conexión, pero no lo que quieren (es decir. SYN, ACK, lo que sea). Sólo quieren tomar los recursos de nuestros servidores. No aceptaremos dichos paquetes. Ahora pasamos a un patrón más común: paquetes XMAS , también un paquete de recon.
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
Hemos descartado al menos algunos de los patrones habituales que encuentran vulnerabilidades en nuestro servidor.
Abrir Puertos para Servicios Seleccionados
Ahora podemos comenzar a agregar servicios seleccionados a nuestro filtro de Firewall. La primera es una interfaz localhost:
iptables -A INPUT -i lo -j ACCEPT
Le decimos a iptables que agregue (-A) una regla a la tabla de filtro entrante (INPUT) cualquier tráfico que llegue a la interfaz localhost (-i lo) y que acepte (-j ACCEPT). Localhost se utiliza a menudo para dar un nombre el cual es reservao en un sitio web o servidor de correo electrónico y poder comunicarse con una base de datos instalada localmente. De esta manera nuestro servidor puede usar la base de datos, pero la base de datos está cerrada a exploits de Internet.
Ahora podemos permitir el tráfico del servidor web:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Añadimos los dos puertos (puerto HTTP 80 y puerto https 443) a la cadena ACCEPT, permitiendo el tráfico en esos puertos. Ahora, permitamos a los usuarios usar nuestros servidores SMTP:
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
Como se dijo antes, si podemos influenciar a nuestros usuarios, debemos usar la versión segura, pero a menudo no podemos dictar los términos y los clientes se conectarán mediante el puerto 25, que es mucho más fácil de tener las contraseñas. Ahora procedemos a permitir que los usuarios lean el correo electrónico en su servidor:
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
Esas dos reglas permitirán tráfico POP3. Una vez más, podríamos aumentar la seguridad de nuestro servidor de correo electrónico simplemente usando la versión segura del servicio. Ahora también necesitamos permitir el protocolo de correo IMAP:
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
Limitación del Acceso SSH
También debemos permitir el tráfico SSH, para que podamos conectarnos al servidor de forma remota. La manera simple de hacerlo sería con este comando:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Ahora le dijimos a iptables que agregara una regla para aceptar el tráfico tcp entrando en el puerto 22 (el puerto SSH predeterminado). Se aconseja cambiar la configuración de SSH a un puerto diferente, y este filtro de Firewall se debe cambiar en consecuencia, pero la configuración de SSH no forma parte de este artículo.
Sin embargo, podríamos hacer una cosa más sobre eso con el Firewall en sí. Si nuestra oficina tiene una dirección IP permanente, sólo podríamos permitir conexiones a SSH desde esta fuente. Esto permitiría que sólo personas de nuestra ubicación se conecten.
En primer lugar, averigüe su dirección IP externa. Asegúrese de que no es una dirección de su LAN, o no funcionará. Otra forma de encontrarlo es escribir:
w
En el terminal, deberíamos vernos conectados (si somos los únicos registrados) y nuestra dirección IP escrita.
La salida se parece a esto:
root@iptables# w
11:42:59 up 60 days, 11:21, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 213.191.xxx.xxx 09:27 0.00s 0.05s 0.00s w
Ahora, puede crear la regla de Firewall para permitir solamente tráfico al puerto SSH si procede de una fuente: su dirección IP:
iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT
Por supuesto, reemplace YOUR_IP_ADDRESS con la IP actual.
Podríamos abrir más puertos en nuestro Firewall según sea necesario cambiando los números de puerto. De esta manera, nuestro Firewall permitirá el acceso sólo a los servicios que deseamos. En este momento, necesitamos agregar una regla más que nos permita usar conexiones salientes (por ejemplo, ping del servidor o ejecutar actualizaciones de software);
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Permitirá que cualquier conexión saliente establecida reciba respuestas del servidor en el otro lado de esa conexión. Cuando lo tengamos todo configurado, bloquearemos todo lo demás y permitiremos todas las conexiones salientes.
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
Ahora tenemos nuestras reglas de Firewall en su lugar.
Guardar la Configuración
Ahora que tenemos toda la configuración, podemos listar las reglas para ver si falta algo.
iptables -L -n
El interruptor -n es porque sólo necesitamos direcciones IP, no nombres de dominio. Es decir. Si hay una IP en las reglas como esta: 69.55.48.33: el Firewall iría a buscarlo y vería que se trataba de un IP.com. No necesitamos eso, sólo la dirección en sí. Ahora podemos finalmente guardar nuestra configuración de Firewall:
iptables-save | sudo tee /etc/sysconfig/iptables
El archivo de configuración de iptables en CentOS se encuentra en / etc / sysconfig / iptables . El comando anterior guardó las reglas que creamos en ese archivo. Sólo para asegurarnos de que todo funcione, podemos reiniciar el Firewall:
service iptables restart
Las reglas guardadas se mantendrán incluso cuando se reinicie el SPV.
Flush para Desbloquearse
Si hemos cometido un accidente en nuestra configuración, es posible que nos hayamos bloqueado para acceder al servidor. Tal vez hemos puesto en la dirección IP incorrecta por lo que el Firewall no permite conexiones desde nuestra estación de trabajo. Ahora no podemos alcanzar esas reglas, y si las salvamos, ni siquiera un reinicio nos ayudará. Afortunadamente, la interfaz web de DO nos permite conectarnos al servidor a través de la consola:
Una vez conectados, ingresamos como root y emitimos el siguiente comando:
iptables -F
Esto descargará los filtros, podremos entrar en el servidor de nuevo.
Conclusión
Este artículo no es exhaustivo, tomamos algo senillo para poder de ejecutar un Firewall simple en una computadora Linux. Hará lo suficiente para un escenario típico de servidor web y de correo electrónico para un desarrollador que no esté familiarizado con Linux o iptables.
Sin embargo, mucho más podría hacerse. Hay buenos tutoriales y muestras en Internet para ayudarnos a proporcionar una configuración más robusta. Para entornos de producción, se recomienda crear una configuración más detallada o que un experto en seguridad prepare la configuración.
Esperemos que las instrucciones breves proporcionen seguridad básica a los nuevos servidores.
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian