Configurar un Firewall Iptables Básico en CentOs

Actualizado el . Posteado en Blog. Visitado 9317 veces.

                                      Configurar un Firewall iptables Básico en Centos 2

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:

                      iptables

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

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (7 respuestas).
Publicado: 6 años 5 meses ago por Pipe Peña #499
Avatar de Pipe Peña
CARLOS
BUSCO INSTALAR UN SERVIDOR FIREWALL PARA MI RED LAN
11:44:25
Felipe Peña
Por favor espera un momento...
11:44:24System assistantFelipe Peña has accepted the chat!
System assistantVisitor has joined the chat!
11:44:47
Felipe Peña
Pues mira.
Tienes varias opciones.
Pero primero.
Tienes una red LAN dentro de un router?
Y quieres ponerle firewall a esa red?
Algun proposito en especial?
11:46:58
CARLOS
si he estado viendo en linux que es lo que prefiero hay versiones pagas y la otra que he visto es iptables pero me preguntaba si hay otras alternativas
bueno tengo informacion valiosa en mis equipos y he sufrido accesos no autorizados
y robo de informacion
11:49:14
Felipe Peña
Bueno, te hablo de las opciones:
11:50:01
CARLOS
si porfavor
11:50:02
Felipe Peña
1) Usando el router actual. Generalmente los routers tienen opciones de Firewall. Puedes explorarlo para ver como pones las reglas. Te podria servir leer su manual de usuario para Firewall o cortafuegos.
2) Usando un router especial. Puedes optar por router con capacidades de configuracion muy especificas, como por ejemplo Mikrotik...
los cuales tienen secciones de Firewall bien configurables. Es como tener iptables pero de forma grafica. Incluso el sistema operativo de estos aparatos son RouterOS que se basan en Linux.
3) Comprar un aparato que actue especificamente con Firewall.
En terminos de costos. La 1) no te valdria nada mas.
La 2) te podria costar unos 70 USD.
...dependiendo del equipo.
La 3) puede ser mucho mas costosa. Quizas unos 300 USD o mas.
Ahora bien, para usar IPTables en un equipo, por ejemplo en Centos, necesitarias que todo el trafico de tu red pasara por ese equipo, para lo cual necesitarias ajustar las interfaces de red acorde a eso. Esto podria resultar un poco engorroso. Y realmente podria serte mejor la Routerboard Mikrotik.
11:56:51
CARLOS
bueno tengo conociemientos de los equipos y sus precios en mi pais, pero en la empresa en la que laboro el presupuesto para el departamento de sistemas y redes es corto y tengo montar uno libre y la mejor opcion que veo es un linux
pero que la opcion que tome sea comprensible por otras personas
11:57:36
Felipe Peña
Pero has pensado en las interfaces de red que necesitaras para que todo el trafico de tu LAN pase por tu Linux.
Ademas del costo mensual del recibo de luz por ese equipo.
Realmente para un equipo Mikrotik no se requiere mucho presupuesto. Hay unas routerboards de unos 200 a 300 pesos colombianos.
Les arreglas el firewall...
Les conectas adecuadamente los routers actuales y listo.
11:59:40
CARLOS
bueno en realidad he estado viendo eso y el costo a largo plazo es superior al de un equipo con esa funcion especifica pero bueno hay gente cerrada de cabeza y bolsillo
11:59:41
Felipe Peña
Realmente bien comprensible y muy economico.
12:00:01
CARLOS
ps si
12:00:28
Felipe Peña
El asunto es que pienses como vas a enrutar todo el trafico por el computador..
Necesitaras por lo menos dos interfaces de red.
Uno entrante, otro saliente.
12:01:15
CARLOS
de escho eso lo tengo ya pensado el problema es que firewall usar
12:01:31
Felipe Peña
Puedes usar uno grafico y gratuito como...
12:01:35
CARLOS
de echo requiero 4 por los servidores en linea
tarfjetas de red
12:01:59
Felipe Peña
...pfsense.
Es open source gratis. Muy usado. Lo puedes usar en tu PC.
12:02:40
CARLOS
y como se la lleva con el trafico y las restricciones?
12:02:42
Felipe Peña
Y pues, bueno supongo que esas interfaces adicionales a tu PC pueden llegarte a costar mas que una routerboard.
Realmente creo que solo podrias necesitar 2 interfaces...
Uno de entrada y otro de salida.
12:03:27
CARLOS
bueno de echo tengo las partes y equipos necesarios para poder armar
12:03:34
Felipe Peña
El pfsense te ayudaria en firewall y ruteo.
Ok. Veo.
Puedes usar pfsense...
12:04:30
CARLOS
y tiene la opcion de administrador por plataforma web
12:04:32
Felipe Peña
Es como el RouterOS de Mikrotik.
Pero gratis.
12:04:47
CARLOS
interesante
12:05:13
Felipe Peña
Seria que leyeras del pfsense...
Lo implementaras..
Y luegos nos cuentes como te fue.
12:05:38
CARLOS
si claro ya lo investigo
de inmediato y con gusto les comento mi resultado
le agradesco la ayuda
12:06:10
Felipe Peña
Es que IPtables puede ser un poco mas engorros.
PFSense ya esta mas masticadito.
12:06:27
CARLOS
en que sentido
12:06:34
Felipe Peña
Permitame subo esta conversacion al foro respectivo.
12:06:35
CARLOS
(iptables)
si claro no problema amigo
12:06:56
Felipe Peña
Masticadito.
Mas intuitivo, acomodado.
12:07:21
CARLOS
mmmm entiendo
12:07:37
Felipe Peña
Mira y nos cuentas en el foro.
Ya lo paso para alla.
Espero te sirva la recomendacion.
12:07:54
CARLOS
claro cuente con ello
12:07:57
Felipe Peña
NO conocias pfSense?
12:08:29
CARLOS
sinceramente escuche algo pero no como firewall
12:09:02
Felipe Peña
pfSense® software includes the same features as most expensive commercial firewall solutions.
Publicado: 6 años 5 meses ago por Fututel #390
Avatar de Fututel
Gonzalo
las reglas del iptables ?
No me queda claro como se cargan las tablass
11:37:43
John Morales
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
11:39:42
John Morales
Mira, esa parte.
iptables-save | sudo tee /etc/sysconfig/iptables
Puede que el sudo no lo necesites colocar si ya estás como root.
11:40:56
John Morales
Listo. Mira, te invito a probar de nuevo...
Usar mis indicaciones...
11:41:17
Gonzalo
bueno, reviso e intento aplicar tus indicaciones.
11:41:27
John Morales
Cualquier cosa, el foro está abierto. No necesitas registrarte...
11:41:30
Gonzalo
Gracias por la información tan util
11:41:38
John Morales
Sólo dale en Responder y puedes postear allí.
Saludes :)
Publicado: 6 años 5 meses ago por Fututel #389
Avatar de Fututel
Gonzalo
Como puedo saber si iptables está funcionando y hace lo que yo configuré
11:28:45
John Morales
Por favor espera un momento...
11:28:50System assistantJohn Morales has accepted the chat!
System assistantVisitor has joined the chat!
11:30:00
John Morales
Un momento.
Mira, puedes usar -j LOG
para loguear por dónde pasa el tráfico...
Por ejemplo:
11:31:10
Gonzalo
aplico cada regla con -j LOG?
11:31:13
John Morales
iptables -A INPUT -j LOG – -log-prefix “Actividad del cortafuegos (INPUT)”
iptables -A OUTPUT -j LOG – -log-prefix “Actividad del cortafuegos (OUTPUT)”
iptables -A FORWARD -j LOG – -log-prefix ” Actividad del cortafuegos (FORWARD)”
11:31:38
Gonzalo
y genera un log en /var/log?
11:32:01
John Morales
Para poder visualizar la actividad se ejecuta la siguiente sintaxis;

tail -f /var/log/messages
Es decir, los puedes ver en /var/log/messages
11:32:47
Gonzalo
Muchas gracias, con wireshark también se podria hacer?
11:32:48
John Morales
Debees guardar las reglas.
Claro.
Puedes capturar tráfico con tcpdump....
11:33:13
Gonzalo
ahhh
11:33:18
John Morales
...guardándolo en un archivo...
Y luego lo analizas en WireShark.
11:33:54
Gonzalo
Yo creo un scripts con las reglas y como hago para que eso se cargue al inicio ?
11:34:10
John Morales
Las reglas de -j log...
se pueden colocar al final.
Qué se cargue qué cosa?
Publicado: 6 años 5 meses ago por Fututel #334
Avatar de Fututel
Ok. Entonces no necesitas hacerle nada al computador sino que donde debes hacer la redirección de puertos es en el router o módem. Busca la parte de Redirección de Puertos o Port Forwarding y busca colocar:

Que en la parte externa esté el puerto, puede ser el 8089 (puede ser otro también). Es por donde entrarás desde afuera de internet.

Y que en la parte interna esté la IP privada de la centralita Grandstream con el puerto 8089 (este debe ser el mismo que al entrar por la WAN al Grandstream; por ejemplo cuando entras con el computador cuando ambos están conectados a un mismo router, con el mismo segmento de red).

Recomendaciones.
- Recuerda habilitar la entrada por la WAN a la centralita si es que estuviera cerrada.
- Asegura que la IP privada que le dé el router a la centralita permanezca la misma con el objetivo de que se mantenga el ingreso con la regla de port forwarding escrita antes. Lo puedes hacer usando la función de DHCP con préstamo estático o directamente con IP estática en la centralita.
- Puede que el router no diga en la parte de Redirección de puertos interna o externa sino Inicial y Final, en cuyo caso probablemente serán la parte externa e interna respectivamente. Incluso puede usar otros términos. En todo caso analiza para que pongas los 3 datos anteriores: Puerto externo por donde entrar en la internet, e IP:Puerto privados.

Saludes!!!
Publicado: 6 años 5 meses ago por router #324
Avatar de router
La centralita es ta independependiente, si necesito abrir puertos para administrar y publicarla desde fuera,si estan en el mismo router.
Publicado: 6 años 5 meses ago por Forum - Fututel #321
Avatar de Forum - Fututel
Hola don Guillermo. Pero no te entendemos muy bien. La centralita Grandstream está independiente, verdad?
Necesitas abrir puertos para administrar la centralita desde afuera?
El servidor está bajo el mismo router de la centralita?
Publicado: 6 años 5 meses ago por Necesito abri puertos para una cent #320
Avatar de Necesito abri puertos para una cent
Guillermo Anchundia
ok gracias
tengo un servidor con dos tarjetas
la ip publica es 186.5.75.245
ip ip privada es la 192.168.10.200
necesito abri puertos para una centralita grandstream
el puerto para administrar la central es el 8089