Anonim

Es 2017, y usar una VPN se ha convertido en una obviedad. Entre las cargas de preocupaciones de privacidad externas y su propio ISP que puede vender su historial de navegación, realmente no hay justificación para no usar uno.

Claro, puede pagar uno de los cientos de servicios VPN que existen, pero una vez más, depende de otra persona con sus datos. La mayoría son geniales, en realidad, pero si desea un control completo, puede construir su propia VPN en un servidor virtual privado (VPS) o alquilar su propio servidor privado, si tiene ganas de ser realmente duro con él.

Todo lo que necesita para construir una VPN es el software de código abierto OpenVPN y Linux (o BSD). La configuración puede estar involucrada, pero no es imposible con alguien con habilidades básicas de Linux para llevar a cabo una distribución como Ubuntu.

Para esta guía, necesitará un VPS con Ubuntu. Puede elegir uno fácilmente de alguien como DigitalOcean o Linode . Siga sus guías básicas de seguridad para configurarlo. Asegúrese de no cometer errores básicos como permitir el acceso de root a través de SSH.

Además, tenga en cuenta que esto va a hacer toda esta configuración en la línea de comando a través de SSH a su VPS. No hay nada que requiera una gran cantidad de conocimiento de Linux, pero prepárate para escribir en lugar de hacer clic.

Conseguir lo que necesitas

enlaces rápidos

  • Conseguir lo que necesitas
  • Configurar el cortafuegos
    • Encuentra la interfaz
    • Conceptos básicos de Iptables
    • Configura tus reglas
      • Bucle invertido
      • Silbido
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • TONEL
      • Inicio sesión
      • Rechazar todo lo demás
      • NAT Masquerading
    • Reenviar tráfico IPv4
    • Detener todas las conexiones IPv6
    • Importar y guardar en Iptables

Ubuntu empaqueta y distribuye OpenVPN en sus repositorios. Solo necesita usar apt para instalarlo. También necesitará la herramienta para generar claves de cifrado. Instalarlos a los dos.

$ sudo apt install openvpn easy-rsa

Configurar el cortafuegos

A continuación, debe cuidar el firewall. Es una pieza importante para mantener su VPN segura y evitar tanto la fuga de datos como el acceso no deseado.

Iptables es el firewall principal para Linux, y es su mejor opción para controlar el acceso a los puertos de Ubuntu. Ya lo tendrá instalado, por lo que puede comenzar a configurar las reglas de su firewall.

Encuentra la interfaz

Antes de comenzar a escribir reglas en iptables, averigüe con qué interfaz está conectado su servidor a Internet. Ejecute ifconfig para mostrar sus interfaces de red. El que tiene un inet addr: coincidir con la dirección IP a la que está conectado es la interfaz correcta.

Conceptos básicos de Iptables

Por lo general, no es una buena idea copiar aleatoriamente y pegar cosas en el terminal desde Internet. Esto es especialmente cierto cuando se trata de temas de seguridad. Entonces, tómese un tiempo aquí para aprender un poco sobre las reglas de iptables antes de comenzar a ingresarlas.

Eche un vistazo a este ejemplo de una regla de iptables.

-A ENTRADA -i eth0 -p tcp -m estado –estado ESTABLECIDO –deporte 443 -j ACEPTAR

Muy bien, entonces -A significa que vas a agregar una nueva regla. Entonces INPUT significa que se referirá a la entrada a su servidor. También hay una SALIDA. El indicador -i le dice a iptables para qué interfaz es esta regla. Puede especificar para qué protocolo es la regla con -p. Esta regla maneja tcp. -m especifica una condición que debe cumplir una conexión. En este caso, debe coincidir con el estado especificado. Por supuesto, entonces –state especifica un estado, en este caso una conexión ESTABLECIDA. La siguiente parte le dice a iptables para qué puerto es esta regla. Es el puerto 443, el puerto HTTPS, aquí. La última bandera es -j. Significa "salto" y le dice a iptables qué hacer con la conexión. Si esta conexión cumpliera con todos los requisitos de la regla, iptables la ACEPTARÍA.

Configura tus reglas

Por lo tanto, debe tener una idea general de cómo funcionan las reglas de iptables ahora. El resto de esta sección le dirá cómo configurar sus reglas pieza por pieza.

La mejor manera de crear un conjunto de reglas de iptables es crear un archivo que las contenga todas. Luego, puede importarlo todo a iptables a la vez. Establecer reglas una por una puede ser confuso, especialmente si está comenzando un nuevo conjunto de reglas desde cero.

Cree un archivo en el directorio / tmp para construir sus reglas.

$ vim / tmp / ipv4

Comience ese archivo con * filtro. Esto le dice a iptables que lo que sigue serán reglas para el filtrado de paquetes.

Bucle invertido

La primera sección de reglas bloquea la interfaz de bucle invertido. Le dicen a iptables que el servidor debe aceptar el tráfico de sí mismo en la interfaz de bucle invertido. También debe rechazar el tráfico proveniente de sí mismo que no proviene del bucle invertido.

-A ENTRADA -i lo -j ACEPTAR -A ENTRADA! -i lo -s 127.0.0.0/8 -j RECHAZAR -A SALIDA -o lo -j ACEPTAR

Silbido

Luego, permita el ping. Debería poder hacer ping a su servidor para asegurarse de que esté en línea en caso de que no se pueda acceder de otra manera. En este caso, solo se permiten solicitudes de eco y el servidor se permitirá enviar la salida ICMP.

-A ENTRADA -p icmp -m estado - estado NUEVO --icmp-type 8 -j ACCEPT -A ENTRADA -p icmp -m estado - estado ESTABLECIDO, RELACIONADO -j ACEPTAR -A SALIDA -p icmp -j ACEPTAR

SSH

Necesitas SSH. Esa es la única forma en que puede llegar a su servidor. Las reglas SSH son específicas de su interfaz de Internet, así que asegúrese de sustituir eth0 por la interfaz que su servidor esté utilizando realmente.

También podría ser una buena idea cambiar sus conexiones SSH fuera del puerto 22, ya que ese es el valor predeterminado que intentarían los posibles atacantes. Si lo hace, asegúrese de cambiarlo en sus reglas de iptables también.

-A ENTRADA -i eth0 -p tcp -m estado - estado NUEVO, ESTABLECIDO --dport 22 -j ACEPTAR -A SALIDA -o eth0 -p tcp -m estado - estado ESTABLECIDO --sport 22 -j ACEPTAR

OpenVPN

La siguiente pieza permite el tráfico hacia y desde el servidor OpenVPN a través de UDP.

-A ENTRADA -i eth0 -p udp -m estado - estado NUEVO, ESTABLECIDO --porto 1194 -j ACEPTAR -A SALIDA -o eth0 -p udp -m estado - estado ESTABLECIDO --deporte 1194 -j ACEPTAR

DNS

Ahora, permita conexiones DNS a través de UDP y TCP. Desea que su VPN maneje DNS, no su ISP. Esa es parte de la razón por la que está configurando una VPN en primer lugar.

-A ENTRADA -i eth0 -p udp -m estado --estado ESTABLECIDO --sport 53 -j ACEPTAR -A SALIDA -o eth0 -p udp -m estado --estado NUEVO, ESTABLECIDO --dport 53 -j ACEPTAR -A ENTRADA -i eth0 -p tcp -m estado --estado ESTABLECIDO --sport 53 -j ACEPTAR -A SALIDA -o eth0 -p tcp -m estado --estado NUEVO, ESTABLECIDO --dport 53 -j ACEPTAR

HTTP / S

Para que Ubuntu pueda actualizarse, debe agregar un conjunto de reglas para permitir la conexión saliente de HTTP y HTTPS. Tenga en cuenta que estas reglas solo permiten que el servidor inicie conexiones HTTP, por lo que no puede usarlo como servidor web ni conectarse a él a través del puerto 80 o el puerto 443

-A ENTRADA -i eth0 -p tcp -m estado --estado ESTABLECIDO --sport 80 -j ACEPTAR -A ENTRADA -i eth0 -p tcp -m estado --estado ESTABLECIDO --sport 443 -j ACEPTAR -A SALIDA - o eth0 -p tcp -m estado - estado NUEVO, ESTABLECIDO --dport 80 -j ACEPTAR -A SALIDA -o eth0 -p tcp -m estado - estado NUEVO, ESTABLECIDO --dport 443 -j ACEPTAR

NTP

Para mantener el reloj de su servidor funcionando correctamente, necesitará NTP. NTP permite que su servidor se sincronice con servidores de tiempo en todo el mundo. Tener un reloj incorrecto en su servidor puede causar problemas de conexión, por lo que ejecutar NTP es una buena idea. Una vez más, solo debe aceptar conexiones salientes y ya establecidas.

-A ENTRADA -i eth0 -p udp -m estado --estado ESTABLECIDO --sport 123 -j ACEPTAR -A SALIDA -o eth0 -p udp -m estado --estado NUEVO, ESTABLECIDO --dport 123 -j ACEPTAR

TONEL

Desbloquee la interfaz TUN que OpenVPN usa para canalizar el tráfico.

-A ENTRADA -i tun0 -j ACEPTAR -A ADELANTE -i tun0 -j ACEPTAR -A SALIDA -o tun0 -j ACEPTAR

Debe permitir que TUN reenvíe el tráfico a su interfaz habitual para la VPN. Encontrará esa dirección IP en la configuración de OpenVPN. Si lo cambia en la configuración, cámbielo también en sus reglas.

-A ADELANTE -i tun0 -o eth0 -s 10.8.0.0/24 -j ACEPTAR -A ADELANTE -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR

Inicio sesión

Es una buena idea mantener registros de todo lo que iptables rechaza. En este caso, significa cualquier cosa que no se ajuste a ninguna de estas reglas. Los registros le permiten ver si hay alguna actividad maliciosa o algún intento de hacer algo nefasto contra su servidor.

-A INPUT -m limit –limit 3 / min -j LOG –log-prefix “iptables_INPUT_denied:” –log-level 4
-A FORWARD -m limit –limit 3 / min -j LOG –log-prefix “iptables_FORWARD_denied:” –log-level 4
-A OUTPUT -m limit –limit 3 / min -j LOG –log-prefix “iptables_OUTPUT_denied:” –log-level 4

Rechazar todo lo demás

Finalmente, debe bloquear todo lo que no se ajuste a sus reglas. Ese es realmente el propósito de tener un firewall en primer lugar.

-A ENTRADA -j RECHAZO -A ADELANTE -j RECHAZO -A SALIDA -j RECHAZO

Cierre el archivo con COMMIT para decirle a iptables que confirme todas las reglas.

NAT Masquerading

Necesita que las conexiones de la VPN parezcan que provienen del servidor mismo. Esta pieza no se puede incluir en el archivo normal de iptables porque usa una tabla diferente. Sin embargo, está bien, es solo una línea.

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Reenviar tráfico IPv4

Deberá habilitar el reenvío del tráfico IPv4 para que pueda pasar entre la VPN y la interfaz de red real de su servidor. Abra /etc/sysctl.d/99-sysctl.conf con sudo.

Busque la línea a continuación y descomente quitando el #.

net.ipv4.ip_forward = 1

Detener todas las conexiones IPv6

Lo sentimos, aún no has terminado con iptables. Necesita bloquear todo el tráfico IPv6. Este servidor OpenVPN solo admitirá IPv4, lo cual está bien, ya que no se encontrará con una situación en la que necesite IPv6. Como resultado, cualquier conexión IPv6 puede potencialmente filtrar información, que es lo contrario de lo que desea cuando usa una VPN.

Antes de establecer las reglas para iptables, debe deshabilitar IPv6 en cualquier otro lugar del sistema.

Agregue las siguientes líneas a /etc/sysctl.d/99-sysctl.conf. Si lo cerró desde la sección anterior, vuelva a abrirlo con sudo.

net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1

Activa tus cambios.

$ sudo sysctl -p

Comente todas las líneas IPv6 en / etc / hosts. Necesitarás sudo aquí también.

# :: 1 ip6-localhost ip6-loopback # fe00 :: 0 ip6-localnet # ff00 :: 0 ip6-mcastprefix # ff02 :: 1 ip6-allnodes # ff02 :: 2 ip6-allrouters

Por fin, puede escribir las reglas de iptables de IPv6. Cree un archivo para ellos en / tmp / ipv6.

* filtro -A ENTRADA -j RECHAZO -A ADELANTE -j RECHAZO -A SALIDA -j RECHAZO COMPROMISO

Mira, son simples. Rechaza todo.

Importar y guardar en Iptables

Debe importar esas reglas para que puedan hacer cualquier cosa. Entonces, ahora es el momento de hacer eso.

Comience limpiando todo lo demás que está allí. No quieres que ninguna regla vieja se interponga en el camino.

$ sudo iptables -F && sudo iptables -X

Importe sus reglas IPv4 e IPv6.

$ sudo iptables-restore </ tmp / ipv4 $ sudo ip6tables-restore </ tmp / ipv6

Probablemente nunca quieras volver a hacer eso. Por lo tanto, necesitará un nuevo paquete para guardar sus reglas de forma permanente.

$ sudo apt install iptables-persistent

Durante la instalación, el paquete le pedirá que guarde sus reglas existentes. Responda "Sí".

Si realiza cambios más adelante, también puede actualizar sus configuraciones guardadas.

$ sudo service netfilter-persistent save

Tomó un tiempo, pero su firewall está listo para funcionar. En la página siguiente, abordaremos la creación de las claves de cifrado necesarias.

Haga clic aquí: Página siguiente

Todo sobre VPN: cómo configurar tu propia VPN con OpenVPN (parte 3)