GNU/Linux >> Tutoriales Linux >  >> Debian

Asegurando su VPS basado en Ubuntu/Debian usando IPTABLES/Netfilter firewall

En el siguiente artículo, le mostraremos cómo puede asegurar y proteger su servidor virtual basado en Ubuntu o Debian usando un firewall aplicación, llamada iptables.

¿Qué es iptables?

Es un programa de aplicación de espacio de usuario que permite a un administrador del sistema configurar las tablas proporcionadas por el firewall del kernel de Linux (implementado como diferentes módulos de Netfilter ) y las cadenas y reglas que almacena.

Para reducir el número de intentos de intrusión y filtrar los puertos abiertos en su servidor virtual, es necesario configurar correctamente su cortafuegos. .

Para facilitar la administración de las reglas de firewall de su servidor, proporcionaremos un script de shell simple que lo ayudará con la administración de las reglas de firewall. Básicamente, cada vez que necesite cambiar las reglas de su cortafuegos, usará este script para agregar/eliminar las reglas deseadas.

CONFIGURAR REGLAS DE FIREWALL

Antes de envolver las reglas en un script, dividámoslo en secciones para que pueda conocer el diseño del firewall y qué reglas se implementarán.

ELIMINAR LAS REGLAS ANTIGUAS

Las reglas del cortafuegos se pueden vaciar con los siguientes comandos:

## iptables --flush
## iptables --delete-chain
## iptables --table nat --flush
## iptables --table nat --delete-chain

DETERMINAR PUERTOS DE SERVICIO

Debe saber qué servicios ha expuesto al público para poder establecer reglas apropiadas para ellos. Una forma de encontrar qué servicios están escuchando en qué puertos es usar netstat o ss comandos como en:

## netstat -tunlp

or

## ss -tunlp

por ejemplo, estamos usando uno de nuestros servidores virtuales Ubuntu 12.04 LTS y el siguiente es el resultado de netstat comando:

## netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      296/mysqld
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 209.135.140.77:53       0.0.0.0:*               LISTEN      353/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      173/vsftpd
tcp        0      0 0.0.0.0:5622            0.0.0.0:*               LISTEN      630/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      261/dovecot
udp        0      0 209.135.140.77:53       0.0.0.0:*                           353/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           353/named

entonces esto significa que tenemos los siguientes puertos abiertos al público:

  • 25 (smtp)
  • 587 (envío SMTP)
  • 110 (pop3)
  • 143 (mapa)
  • 993 (imáfono SSL)
  • 995 (pop3 ssl)
  • 80 (http)
  • 443 (https)
  • 53 (DNS)
  • 21 (ftp)
  • 5622 (ssh)

CONFIGURAR POLÍTICAS PREDETERMINADAS

ok, ahora podemos configurar las políticas de nuestro cortafuegos para DROP todo en la ENTRADA y ADELANTE cadenas y permitir el tráfico en la SALIDA cadena.

la tabla predeterminada filter contiene tres cadenas integradas:

  1. El tráfico entrante dirigido a la propia máquina llega a la cadena INPUT.
  2. El tráfico saliente generado localmente llega a la cadena de SALIDA.
  3. El tráfico enrutado que no debe entregarse localmente llega a la cadena FORWARD.

verifique man 8 iptables para más información sobre esto

Las políticas predeterminadas se pueden aplicar mediante los siguientes comandos:

## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out
## iptables -P FORWARD DROP
## iptables -P OUTPUT ACCEPT

CONFIGURACIÓN DE REGLAS DE FIREWALL

Lo siguiente que debe hacer es configurar las reglas de firewall para nuestros servicios. Como la cadena de ENTRADA está CAÍDA, necesitaremos incluir en la lista blanca los servicios que están escuchando en los puertos públicos, por lo que:

lo primero es habilitar el uso gratuito de las loopback interfaces , para garantizar que todas las sesiones TCP comiencen con SYN y para permitir paquetes establecidos y relacionados:

## iptables -A INPUT -i lo -j ACCEPT
## iptables -A OUTPUT -o lo -j ACCEPT
## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

a continuación, abramos nuestros puertos de servicio usando reglas de firewall como:

### SSH
## iptables -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

### HTTP
## iptables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

### SMTP
## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

y así. Una vez que todos los servicios están en la lista blanca, es una buena idea permitir los paquetes ICMP y REGISTRAR y DESCARTAR todo lo demás en la cadena de ENTRADA.

## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
## iptables -A INPUT -j LOG
## iptables -A INPUT -j DROP

GUARDAR/RESTAURAR LAS REGLAS DEL FIREWALL

Las reglas del cortafuegos no son persistentes de forma predeterminada, lo que significa que se perderán si reinicia su servidor virtual, por ejemplo. Para guardar su cortafuegos actual en /etc/fwall.rules usarías algo como:

## iptables-save > /etc/fwall.rules

y para restaurar las reglas guardadas, usaría algo como:

## iptables-restore -c /etc/fwall.rules

para que las reglas se restablezcan automáticamente al iniciar el sistema, debe usar un paquete llamado iptables-persistent o simplemente puede crear un script en /etc/network/if-pre-up.d que cargará las reglas guardadas en /etc/fwall.rules , por ejemplo:

## vim /etc/network/if-pre-up.d/iptables

#!/bin/bash
test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules

## chmod +x /etc/network/if-pre-up.d/iptables

GUIÓN DE CORTAFUEGOS

guarde el script en /usr/local/bin/fwall-rules y hacerlo ejecutable

#!/bin/bash

IPTABLES=/sbin/iptables

echo " * flushing old rules"
${IPTABLES} --flush
${IPTABLES} --delete-chain
${IPTABLES} --table nat --flush
${IPTABLES} --table nat --delete-chain

echo " * setting default policies"
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT

echo " * allowing loopback devices"
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT

${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## BLOCK ABUSING IPs HERE ##
#echo " * BLACKLIST"
#${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP
#${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP

echo " * allowing ssh on port 5622"
${IPTABLES} -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

echo " * allowing ftp on port 21"
${IPTABLES} -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT

echo " * allowing dns on port 53 udp"
${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT

echo " * allowing dns on port 53 tcp"
${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

echo " * allowing http on port 80"
${IPTABLES} -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

echo " * allowing https on port 443"
${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

echo " * allowing smtp on port 25"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

echo " * allowing submission on port 587"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT

echo " * allowing imaps on port 993"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT

echo " * allowing pop3s on port 995"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

echo " * allowing imap on port 143"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

echo " * allowing pop3 on port 110"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

echo " * allowing ping responses"
${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

# DROP everything else and Log it
${IPTABLES} -A INPUT -j LOG
${IPTABLES} -A INPUT -j DROP

#
# Save settings
#
echo " * SAVING RULES"

if [[ -d /etc/network/if-pre-up.d ]]; then
    if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then
        echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables
        echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
fi

iptables-save > /etc/fwall.rules
iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules

para activar las reglas que ha preparado en el script, simplemente ejecute

## fwall-rules

desde la línea de comandos. Para agregar o eliminar una regla, solo necesita abrir el script, agregar o eliminar la regla deseada, guardarla y ejecutarla nuevamente, por ejemplo:

## fwall-rules
 * flushing old rules
 * setting default policies
 * allowing loopback devices
 * allowing ssh on port 5622
 * allowing ftp on port 21
 * allowing dns on port 53 udp
 * allowing dns on port 53 tcp
 * allowing http on port 80
 * allowing https on port 443
 * allowing smtp on port 25
 * allowing submission on port 587
 * allowing imaps on port 993
 * allowing pop3s on port 995
 * allowing imap on port 143
 * allowing pop3 on port 110
 * allowing ping responses
 * SAVING RULES

Por supuesto, no tiene que hacer nada de esto si utiliza uno de nuestros servicios de alojamiento VPS de Linux, en cuyo caso simplemente puede pedirle a nuestros administradores expertos de Linux que lo hagan por usted. Están disponibles las 24 horas del día, los 7 días de la semana y atenderán su solicitud de inmediato.

PD. Si te gustó esta publicación, compártela con tus amigos en las redes sociales usando los botones de la izquierda o simplemente deja una respuesta a continuación. Gracias.


Debian
  1. Ejemplo de uso del cortafuegos UFW en Debian/Ubuntu

  2. Debian – ¿Usar dos pantallas en Debian?

  3. Acelere sus sitios web basados ​​en PHP usando Zend Optimizer en un CentOS 6 VPS

  4. Script:Instalar WordPress en un VPS Debian/Ubuntu

  5. Cómo instalar SSHGuard en un Ubuntu VPS

Cómo encontrar su dirección IP pública en Ubuntu 20.04 LTS

Cómo habilitar/deshabilitar ping usando iptables en Debian 10

Cómo encontrar dispositivos conectados a su red usando Debian Linux

Cómo:asegurar su servidor Ubuntu o Debian con IPTables

Cambia tu puerto SSH en Ubuntu y Debian

Cómo configurar un cortafuegos en su servidor Linux