Reglas de Iptables para firewall basado en Ubuntu 16.04

Reglas de Iptables para firewall basado en Ubuntu 16.04

Estoy intentando establecer reglas de iptables en mi servidor para usarlo como firewall basado en Ubuntu 16.04. Tengo conocimientos justos en Ubuntu. Hice una búsqueda en el sitio de ayuda de Ubuntu y en Askubuntu. Se me ocurrieron las siguientes reglas que se pueden guardar en un archivo y ejecutar como root (archivo sudo sh):

#!/bin/bash

WAN_IF="enp2s0"
WAN_IP=$(/sbin/ip addr show dev "$WAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
LAN_IF="enp4s9"
LAN_IP=$(/sbin/ip addr show dev "$LAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
##### Internal network address (in CIDR notation)
LAN_NET="192.168.17.0/24"

echo
echo "[WAN Interface: $WAN_IF] [WAN IP: $WAN_IP]"
echo "[LAN Interface: $LAN_IF] [LAN IP: $LAN_IP] [Network: $LAN_NET]"
echo
echo -n "Enabling IP Forwarding...\n"

##### Enabling IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

echo
echo -n "Loading Firewall Rules...\n"
echo -n "Enabling NAT Rewriting on IN/OUT Packets...\n"

/sbin/iptables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

##### INPUT RULES
-A INPUT -i lo -j ACCEPT
-A INPUT -i $LAN_IF -j ACCEPT
-A INPUT -i $WAN_IF -s $LAN_NET -j DROP
-A INPUT -i $WAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### FORWARD RULES
-A FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT
-A FORWARD -i $WAN_IF -o $LAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### OUTPUT RULES
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o $WAN_IF -d $LAN_NET -j DROP
-A OUTPUT -o $LAN_IF -s $LAN_IP -d $LAN_NET -j ACCEPT
-A OUTPUT -o $WAN_IF -s $WAN_IP -j ACCEPT

##### All Other Requests are DROPPED
-A OUTPUT -j DROP
-A INPUT -j DROP
COMMIT


##### NAT Rewriting on IN/OUT Packets
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o $WAN_IF -j MASQUERADE
COMMIT
EOF


echo -n "Bloacking IP6...\n"
/sbin/ip6tables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
EOF

echo
echo "Done!"
echo

Mis preguntas son:

Tengo la siguiente topología de red:

Internet >>>>> [ WAN <<<>>> SERVIDOR <<<>>> LAN ] <<<<< Usuarios locales

  1. En mi servidor, quiero bloquear todo el tráfico entrante en WAN (incluidos pings y otras solicitudes de descubrimiento y/o piratería), pero permitir que el tráfico de Internet pase para el SERVIDOR y para los usuarios locales en LAN. ¿El código anterior está bien con tales reglas?

  2. Tengo algunos servicios en mi SERVIDOR (como MYSQL y SSH) que administro directamente desde el SERVIDOR. Quiero impedir que los usuarios locales en LAN e Internet en WAN accedan o se conecten a los servicios y todo en mi SERVIDOR. ¿Está bien el código anterior con dicha regla?

  3. ¿Existen notas o fallas de seguridad que puedan deberse a las reglas anteriores?

  4. ¿Es seguro abrir el puerto SSH a Internet en WAN si uso la siguiente regla? (Nota: utilizaré únicamente autenticación de clave pública ssh, no contraseñas de texto claro).

    -A INPUT -i $WAN_IF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -d $WAN_IP --dport 22 -j ACCEPT
    

Muchas gracias chicos.

información relacionada