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 #.
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
