UFW para OpenVPN

17

Quiero configurar ufw (firewall sin complicaciones) para OpenVPN.

Las conexiones solo se permiten a través de OpenVPN. Todo lo demás debe estar bloqueado. Entonces, si OpenVPN está desconectado, ¡no hay internet! Encontré este script en línea y quiero saber si es lo suficientemente bueno. ¿O tengo que agregar más reglas?

#!/bin/bash
###########################################
#          Created by Thomas Butz         #
#   E-Mail: btom1990(at)googlemail.com    #
#  Feel free to copy & share this script  #
###########################################

# Adapt this value to your config!
VPN_DST_PORT=3478

# Don't change anything beyond this point
###########################################

# Check for root priviliges
if [[ $EUID -ne 0 ]]; then
   printf "Please run as root:\nsudo %s\n" "${0}"
   exit 1
fi


# Reset the ufw config
ufw --force reset

# let all incoming traffic pass
ufw default allow incoming
# and block outgoing by default
ufw default deny outgoing

# Every communiction via VPN is considered to be safe
ufw allow out on tun0

# Don't block the creation of the VPN tunnel
ufw allow out $VPN_DST_PORT
# Don't block DNS queries
ufw allow out 53

# Allow local IPv4 connections
ufw allow out to 10.0.0.0/8
ufw allow out to 172.16.0.0/12
ufw allow out to 192.168.0.0/16
# Allow IPv4 local multicasts
ufw allow out to 224.0.0.0/24
ufw allow out to 239.0.0.0/8

# Allow local IPv6 connections
ufw allow out to fe80::/64
# Allow IPv6 link-local multicasts
ufw allow out to ff01::/16
# Allow IPv6 site-local multicasts
ufw allow out to ff02::/16
ufw allow out to ff05::/16

# Enable the firewall
ufw enable

Fuente: http://pastebin.com/AUHh6KnV

Alex M.
fuente
¡Se ve bien! Simplemente intente y vea si funciona, si hay algún problema que siempre pueda deshabilitar ufwusando sudo ufw disabley elimine todas las reglas de firewall sudo ufw --force reset. ¿Qué podría salir mal? ;-)
ntninja
2
Podría evitar permitir todo el tráfico entrante, ya que solo eso permitirá que openvpn funcione.
JVE999
2
siempre debe denegar las conexiones entrantes por defecto ...
n00dl3
Este script está claramente hecho para compartir archivos. Negar las conexiones entrantes anula el propósito. Le proporciona el comportamiento de "interrupción de la muerte" de las aplicaciones VPN comerciales: ni más ni menos.
emk2203
@ emk2203 no, niega el tráfico entrante fuera del túnel.
berbt

Respuestas:

8

La configuración puede ser más restrictiva.

ufw --force reset

ufw default deny incoming # Use the VPN tunnel for all traffic
ufw default deny outgoing

ufw allow out on tun0
ufw allow in on tun0

ufw allow out $port/$protocol # e.g. 1234/udp, depending on your OpenVPN client config

# Prefer resolved hosts to connect to your VPN, enable only if your VPN provider doesn't give you that option
#ufw allow out 53

# Allow local IPv4 connections, enable as needed, set specific IPs or tighter subnet masks if possible
#ufw allow out to 10.0.0.0/8
#ufw allow out to 172.16.0.0/12
#ufw allow out to 192.168.0.0/16
# Allow IPv4 local multicasts
#ufw allow out to 224.0.0.0/24
#ufw allow out to 239.0.0.0/8
# Allow local IPv6 connections
#ufw allow out to fe80::/64
# Allow IPv6 link-local multicasts
#ufw allow out to ff01::/16
# Allow IPv6 site-local multicasts
#ufw allow out to ff02::/16
#ufw allow out to ff05::/16

# Enable the firewall
ufw enable
berbt
fuente
Todavía estoy tratando de entender la jerga del cortafuegos, pero ¿hipotéticamente no querrías permitirlo tun0como un medio para bloquear las conexiones entrantes desde la VPN? Como en ufw deny in on tun0,?
Matt
@MattBorja si usted ufw default deny incomingy ufw deny in on tun0usted no obtendrán ninguna conexión entrante. Algunas interfaces deberían permitir el tráfico entrante, en este caso queremos que sean las VPN tun0.
berbt
Tienes razón, de alguna manera no vi eso. Desprecio :)
Matt
En realidad, parece que lo que estaba "cuestionando" era la ufw allow in on tun0línea.
Matt
7

Una recomendación fuerte es que NO uses estos dos comandos :

ufw allow incoming
ufw default allow in on tun0

Permitir derrota el propósito de tener un firewall. Es incorrecto que necesite "permitir en tun0" para recibir los paquetes de devolución. Solo desea recibir las conexiones que solicitó, en lugar de permitir que todo el mundo se conecte a usted. Permitirlo hará esto. Pruebe la configuración propuesta a continuación y vea.

Aquí hay un ejemplo de una serie de comandos UFW para usar con un firewall:

sudo ufw enable
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw allow out on tun0
sudo ufw allow out on eth0 to any port 53,1197 proto udp
sudo ufw allow out on wlan0 to any port 53,1197 proto udp
sudo ufw status verbose

Resultado de ejemplo:

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
Anywhere                   ALLOW OUT   Anywhere on tun0          
53,1197/udp                ALLOW OUT   Anywhere on eth0
53,1197/udp                ALLOW OUT   Anywhere on wlan0
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on tun0
53,1197/udp (v6)           ALLOW OUT   Anywhere (v6) on eth0
53,1197/udp (v6)           ALLOW OUT   Anywhere (v6) on wlan0

NOTA: -Sus interfaces pueden ser diferentes, por ejemplo, ubuntu 16.12 usa eno1 y wlp3s0b1. Use el comando "ifconfig" para ver sus interfaces reales. -1197 UDP es bastante predeterminado, pero es posible que deba cambiarlo para su VPN (por ejemplo, 443 TCP). -Por lo general, elimino ipv6 (sudo ufw delete 4, repita x3)

Lo que esto hace: -Permite conexiones salientes a través del túnel VPN, mientras bloquea todo menos el túnel VPN y las conexiones DNS en ethernet / wifi. Advertencia a continuación sobre el problema de DNS.

Advertencia: Este ejemplo permite 53 solicitudes DNS para que openvpn (por ejemplo, vpn.somevpnprovider.com) pueda solicitar la dirección IP y establecer una conexión. La compensación es la posibilidad de fuga de DNS. Use dnsleaktest.com para asegurarse de que su configuración de VPN canalice sus solicitudes de DNS. Para los cautelosos / paranoicos, omita el permiso en 53 y en su lugar apague su firewall para conectarse, luego vuelva a encenderlo una vez conectado. Por mis razones de VPN, elijo no hacerlo, ya que es más probable que olvide el firewall por completo (por ejemplo, DNS se filtrará de todos modos si openvpn está mal configurado).

MARACA_MAGICIAN
fuente